Skip to main content

saluki_components/config_registry/datadog/
forwarder.rs

1//! Annotations for ForwarderConfiguration keys (endpoint, retry, and forwarder settings).
2use crate::config_registry::{generated::schema, structs, SalukiAnnotation, SupportLevel, ValueType};
3
4crate::declare_annotations! {
5    // ── Endpoint ──────────────────────────────────────────────────────────────
6
7    /// `api_key` — Datadog API key for authentication.
8    API_KEY = SalukiAnnotation {
9        schema: &schema::API_KEY,
10        support_level: SupportLevel::Full,
11        additional_yaml_paths: &[],
12        env_var_override: None,
13        used_by: &[structs::FORWARDER_CONFIGURATION],
14        value_type_override: None,
15        test_json: None,
16    };
17
18    /// `site` — Datadog site domain (e.g. `datadoghq.com`).
19    SITE = SalukiAnnotation {
20        schema: &schema::SITE,
21        support_level: SupportLevel::Full,
22        additional_yaml_paths: &[],
23        env_var_override: None,
24        used_by: &[structs::FORWARDER_CONFIGURATION],
25        value_type_override: None,
26        test_json: None,
27    };
28
29    /// `dd_url` — explicit intake URL, overrides `site`.
30    DD_URL = SalukiAnnotation {
31        schema: &schema::DD_URL,
32        support_level: SupportLevel::Full,
33        additional_yaml_paths: &[],
34        env_var_override: None,
35        used_by: &[structs::FORWARDER_CONFIGURATION],
36        value_type_override: None,
37        test_json: None,
38    };
39
40    /// `additional_endpoints` — extra intake endpoints (JSON map of host → API keys).
41    /// Uses a structured test_json because the field uses PickFirst<(DisplayFromStr, _)>.
42    ADDITIONAL_ENDPOINTS = SalukiAnnotation {
43        schema: &schema::ADDITIONAL_ENDPOINTS,
44        support_level: SupportLevel::Full,
45        additional_yaml_paths: &[],
46        env_var_override: None,
47        used_by: &[structs::FORWARDER_CONFIGURATION],
48        value_type_override: None,
49        test_json: Some(r#"{"smoke-host-1.example.com": ["smoke-api-key"]}"#),
50    };
51
52    // ── ForwarderConfiguration direct fields ──────────────────────────────────
53
54    /// `forwarder_num_workers` — max concurrent requests per endpoint. Schema Float; field usize.
55    FORWARDER_NUM_WORKERS = SalukiAnnotation {
56        schema: &schema::FORWARDER_NUM_WORKERS,
57        support_level: SupportLevel::Full,
58        additional_yaml_paths: &[],
59        env_var_override: None,
60        used_by: &[structs::FORWARDER_CONFIGURATION],
61        value_type_override: Some(ValueType::Integer),
62        test_json: None,
63    };
64
65    /// `forwarder_timeout` — request timeout in seconds. Schema Float; field u64.
66    FORWARDER_TIMEOUT = SalukiAnnotation {
67        schema: &schema::FORWARDER_TIMEOUT,
68        support_level: SupportLevel::Full,
69        additional_yaml_paths: &[],
70        env_var_override: None,
71        used_by: &[structs::FORWARDER_CONFIGURATION],
72        value_type_override: Some(ValueType::Integer),
73        test_json: None,
74    };
75
76    /// `forwarder_high_prio_buffer_size` — max pending requests per endpoint. Schema Float; field usize.
77    FORWARDER_HIGH_PRIO_BUFFER_SIZE = SalukiAnnotation {
78        schema: &schema::FORWARDER_HIGH_PRIO_BUFFER_SIZE,
79        support_level: SupportLevel::Full,
80        additional_yaml_paths: &[],
81        env_var_override: None,
82        used_by: &[structs::FORWARDER_CONFIGURATION],
83        value_type_override: Some(ValueType::Integer),
84        test_json: None,
85    };
86
87    /// `forwarder_connection_reset_interval` — seconds between connection resets. Schema Float; field u64.
88    FORWARDER_CONNECTION_RESET_INTERVAL = SalukiAnnotation {
89        schema: &schema::FORWARDER_CONNECTION_RESET_INTERVAL,
90        support_level: SupportLevel::Full,
91        additional_yaml_paths: &[],
92        env_var_override: None,
93        used_by: &[structs::FORWARDER_CONFIGURATION],
94        value_type_override: Some(ValueType::Integer),
95        test_json: None,
96    };
97
98    /// `skip_ssl_validation` — disables TLS certificate validation for Datadog intake forwarding.
99    SKIP_SSL_VALIDATION = SalukiAnnotation {
100        schema: &schema::SKIP_SSL_VALIDATION,
101        support_level: SupportLevel::Full,
102        additional_yaml_paths: &[],
103        env_var_override: Some(&["DD_SKIP_SSL_VALIDATION"]),
104        used_by: &[structs::FORWARDER_CONFIGURATION],
105        value_type_override: None,
106        test_json: None,
107    };
108
109    // ── RetryConfiguration fields ─────────────────────────────────────────────
110
111    /// `forwarder_backoff_base` — base growth rate for retry backoff in seconds.
112    FORWARDER_BACKOFF_BASE = SalukiAnnotation {
113        schema: &schema::FORWARDER_BACKOFF_BASE,
114        support_level: SupportLevel::Full,
115        additional_yaml_paths: &[],
116        env_var_override: None,
117        used_by: &[structs::FORWARDER_CONFIGURATION],
118        value_type_override: None,
119        test_json: None,
120    };
121
122    /// `forwarder_backoff_factor` — jitter factor for retry backoff.
123    FORWARDER_BACKOFF_FACTOR = SalukiAnnotation {
124        schema: &schema::FORWARDER_BACKOFF_FACTOR,
125        support_level: SupportLevel::Full,
126        additional_yaml_paths: &[],
127        env_var_override: None,
128        used_by: &[structs::FORWARDER_CONFIGURATION],
129        value_type_override: None,
130        test_json: None,
131    };
132
133    /// `forwarder_backoff_max` — maximum retry backoff duration in seconds.
134    FORWARDER_BACKOFF_MAX = SalukiAnnotation {
135        schema: &schema::FORWARDER_BACKOFF_MAX,
136        support_level: SupportLevel::Full,
137        additional_yaml_paths: &[],
138        env_var_override: None,
139        used_by: &[structs::FORWARDER_CONFIGURATION],
140        value_type_override: None,
141        test_json: None,
142    };
143
144    /// `forwarder_recovery_interval` — error count decrease on success. Schema Float; field u32.
145    FORWARDER_RECOVERY_INTERVAL = SalukiAnnotation {
146        schema: &schema::FORWARDER_RECOVERY_INTERVAL,
147        support_level: SupportLevel::Full,
148        additional_yaml_paths: &[],
149        env_var_override: None,
150        used_by: &[structs::FORWARDER_CONFIGURATION],
151        value_type_override: Some(ValueType::Integer),
152        test_json: None,
153    };
154
155    /// `forwarder_recovery_reset` — reset error count on successful request.
156    FORWARDER_RECOVERY_RESET = SalukiAnnotation {
157        schema: &schema::FORWARDER_RECOVERY_RESET,
158        support_level: SupportLevel::Full,
159        additional_yaml_paths: &[],
160        env_var_override: None,
161        used_by: &[structs::FORWARDER_CONFIGURATION],
162        value_type_override: None,
163        test_json: None,
164    };
165
166    /// `forwarder_retry_queue_max_size` — (deprecated) max in-memory retry queue size in bytes. Schema Float; field `Option<u64>`.
167    FORWARDER_RETRY_QUEUE_MAX_SIZE = SalukiAnnotation {
168        schema: &schema::FORWARDER_RETRY_QUEUE_MAX_SIZE,
169        support_level: SupportLevel::Full,
170        additional_yaml_paths: &[],
171        env_var_override: None,
172        used_by: &[structs::FORWARDER_CONFIGURATION],
173        value_type_override: Some(ValueType::Integer),
174        test_json: None,
175    };
176
177    /// `forwarder_retry_queue_payloads_max_size` — max in-memory retry queue size in bytes. Schema Float; field `Option<u64>`.
178    FORWARDER_RETRY_QUEUE_PAYLOADS_MAX_SIZE = SalukiAnnotation {
179        schema: &schema::FORWARDER_RETRY_QUEUE_PAYLOADS_MAX_SIZE,
180        support_level: SupportLevel::Full,
181        additional_yaml_paths: &[],
182        env_var_override: None,
183        used_by: &[structs::FORWARDER_CONFIGURATION],
184        value_type_override: Some(ValueType::Integer),
185        test_json: None,
186    };
187
188    /// `forwarder_storage_max_disk_ratio` — max disk usage fraction before stopping on-disk queue.
189    FORWARDER_STORAGE_MAX_DISK_RATIO = SalukiAnnotation {
190        schema: &schema::FORWARDER_STORAGE_MAX_DISK_RATIO,
191        support_level: SupportLevel::Full,
192        additional_yaml_paths: &[],
193        env_var_override: None,
194        used_by: &[structs::FORWARDER_CONFIGURATION],
195        value_type_override: None,
196        test_json: None,
197    };
198
199    /// `forwarder_storage_max_size_in_bytes` — max on-disk retry queue size. Schema Float; field u64.
200    FORWARDER_STORAGE_MAX_SIZE_IN_BYTES = SalukiAnnotation {
201        schema: &schema::FORWARDER_STORAGE_MAX_SIZE_IN_BYTES,
202        support_level: SupportLevel::Full,
203        additional_yaml_paths: &[],
204        env_var_override: None,
205        used_by: &[structs::FORWARDER_CONFIGURATION],
206        value_type_override: Some(ValueType::Integer),
207        test_json: None,
208    };
209
210    /// `forwarder_storage_path` — directory for on-disk retry queue.
211    FORWARDER_STORAGE_PATH = SalukiAnnotation {
212        schema: &schema::FORWARDER_STORAGE_PATH,
213        support_level: SupportLevel::Full,
214        additional_yaml_paths: &[],
215        env_var_override: None,
216        used_by: &[structs::FORWARDER_CONFIGURATION],
217        value_type_override: None,
218        test_json: None,
219    };
220}