saluki_components/config/
mrf.rs1use agent_data_plane_config::domains::multi_region_failover;
4
5#[derive(Debug, Eq, PartialEq)]
7pub struct MrfConfiguration {
8 enabled: bool,
9 api_key: Option<String>,
10 metrics_endpoint: Option<String>,
11}
12
13impl MrfConfiguration {
14 pub fn from_configuration(mrf: &multi_region_failover::Domain) -> Self {
16 Self {
17 enabled: mrf.enabled,
18 api_key: mrf.api_key.clone(),
19 metrics_endpoint: mrf.metrics_endpoint_url(),
20 }
21 }
22
23 pub const fn is_enabled(&self) -> bool {
25 self.enabled
26 }
27
28 pub fn api_key(&self) -> Option<&str> {
30 self.api_key.as_deref()
31 }
32
33 pub fn metrics_endpoint_url(&self) -> Option<&str> {
35 self.metrics_endpoint.as_deref()
36 }
37
38 pub fn metrics_endpoint_override(&self) -> Option<(String, String)> {
40 if !self.enabled {
41 return None;
42 }
43
44 Some((self.metrics_endpoint.clone()?, self.api_key.clone()?))
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use agent_data_plane_config::domains::multi_region_failover::MetricMirroring;
51
52 use super::*;
53
54 fn mrf_config(mrf: multi_region_failover::Domain) -> MrfConfiguration {
55 MrfConfiguration::from_configuration(&mrf)
56 }
57
58 #[test]
59 fn carries_the_resolved_multi_region_failover_configuration() {
60 let config = mrf_config(multi_region_failover::Domain {
61 enabled: true,
62 api_key: Some("mrf-api-key".to_string()),
63 site: Some("datadoghq.eu".to_string()),
64 ..Default::default()
65 });
66
67 assert!(config.is_enabled());
68 assert_eq!(Some("mrf-api-key"), config.api_key());
69 assert_eq!(Some("https://app.mrf.datadoghq.eu"), config.metrics_endpoint_url());
70 }
71
72 #[test]
73 fn metrics_endpoint_override_requires_api_key_and_endpoint() {
74 let missing_api_key = mrf_config(multi_region_failover::Domain {
75 enabled: true,
76 site: Some("datadoghq.eu".to_string()),
77 ..Default::default()
78 });
79 assert_eq!(None, missing_api_key.metrics_endpoint_override());
80
81 let missing_endpoint = mrf_config(multi_region_failover::Domain {
82 enabled: true,
83 api_key: Some("mrf-api-key".to_string()),
84 ..Default::default()
85 });
86 assert_eq!(None, missing_endpoint.metrics_endpoint_override());
87
88 let ready = mrf_config(multi_region_failover::Domain {
89 enabled: true,
90 api_key: Some("mrf-api-key".to_string()),
91 dd_url: Some("https://mrf.example.com".to_string()),
92 ..Default::default()
93 });
94 assert_eq!(
95 Some(("https://mrf.example.com".to_string(), "mrf-api-key".to_string())),
96 ready.metrics_endpoint_override()
97 );
98 }
99
100 #[test]
101 fn metrics_endpoint_override_does_not_require_failover_metrics() {
102 let config = mrf_config(multi_region_failover::Domain {
105 enabled: true,
106 metric_mirroring: MetricMirroring {
107 enabled: false,
108 allowlist: Vec::new(),
109 },
110 api_key: Some("mrf-api-key".to_string()),
111 dd_url: Some("https://mrf.example.com".to_string()),
112 ..Default::default()
113 });
114
115 assert_eq!(
116 Some(("https://mrf.example.com".to_string(), "mrf-api-key".to_string())),
117 config.metrics_endpoint_override()
118 );
119 }
120
121 #[test]
122 fn metrics_endpoint_override_is_none_when_disabled() {
123 let config = mrf_config(multi_region_failover::Domain {
126 enabled: false,
127 api_key: Some("mrf-api-key".to_string()),
128 dd_url: Some("https://mrf.example.com".to_string()),
129 ..Default::default()
130 });
131
132 assert!(!config.is_enabled());
133 assert_eq!(None, config.metrics_endpoint_override());
134
135 assert_eq!(Some("https://mrf.example.com"), config.metrics_endpoint_url());
138 assert_eq!(Some("mrf-api-key"), config.api_key());
139 }
140}