Skip to main content

saluki_components/config_registry/datadog/
dogstatsd.rs

1//! Annotations for DogStatsD source configuration keys.
2use crate::config_registry::{generated::schema, structs, SalukiAnnotation, SchemaEntry, SupportLevel, ValueType};
3
4static DOGSTATSD_ALLOW_CONTEXT_HEAP_ALLOCS_SCHEMA: SchemaEntry = SchemaEntry {
5    yaml_path: "dogstatsd_allow_context_heap_allocs",
6    env_vars: &[],
7    value_type: ValueType::Bool,
8    default: Some("true"),
9};
10
11static DOGSTATSD_BUFFER_COUNT_SCHEMA: SchemaEntry = SchemaEntry {
12    yaml_path: "dogstatsd_buffer_count",
13    env_vars: &[],
14    value_type: ValueType::Integer,
15    default: None,
16};
17
18static DOGSTATSD_CACHED_CONTEXTS_LIMIT_SCHEMA: SchemaEntry = SchemaEntry {
19    yaml_path: "dogstatsd_cached_contexts_limit",
20    env_vars: &[],
21    value_type: ValueType::Integer,
22    default: None,
23};
24
25static DOGSTATSD_CACHED_TAGSETS_LIMIT_SCHEMA: SchemaEntry = SchemaEntry {
26    yaml_path: "dogstatsd_cached_tagsets_limit",
27    env_vars: &[],
28    value_type: ValueType::Integer,
29    default: None,
30};
31
32static DOGSTATSD_LOG_FILE_SCHEMA: SchemaEntry = SchemaEntry {
33    yaml_path: "dogstatsd_log_file",
34    env_vars: &["DD_DOGSTATSD_LOG_FILE"],
35    value_type: ValueType::String,
36    default: Some("\"\""),
37};
38
39static DOGSTATSD_LOG_FILE_MAX_ROLLS_SCHEMA: SchemaEntry = SchemaEntry {
40    yaml_path: "dogstatsd_log_file_max_rolls",
41    env_vars: &["DD_DOGSTATSD_LOG_FILE_MAX_ROLLS"],
42    value_type: ValueType::Integer,
43    default: Some("3"),
44};
45
46static DOGSTATSD_LOG_FILE_MAX_SIZE_SCHEMA: SchemaEntry = SchemaEntry {
47    yaml_path: "dogstatsd_log_file_max_size",
48    env_vars: &["DD_DOGSTATSD_LOG_FILE_MAX_SIZE"],
49    value_type: ValueType::String,
50    default: Some("\"10Mb\""),
51};
52
53static DOGSTATSD_LOGGING_ENABLED_SCHEMA: SchemaEntry = SchemaEntry {
54    yaml_path: "dogstatsd_logging_enabled",
55    env_vars: &["DD_DOGSTATSD_LOGGING_ENABLED"],
56    value_type: ValueType::Bool,
57    default: Some("true"),
58};
59
60static DOGSTATSD_METRICS_STATS_ENABLE_SCHEMA: SchemaEntry = SchemaEntry {
61    yaml_path: "dogstatsd_metrics_stats_enable",
62    env_vars: &["DD_DOGSTATSD_METRICS_STATS_ENABLE"],
63    value_type: ValueType::Bool,
64    default: Some("false"),
65};
66
67static DOGSTATSD_MINIMUM_SAMPLE_RATE_SCHEMA: SchemaEntry = SchemaEntry {
68    yaml_path: "dogstatsd_minimum_sample_rate",
69    env_vars: &[],
70    value_type: ValueType::Float,
71    default: None,
72};
73
74static DOGSTATSD_PERMISSIVE_DECODING_SCHEMA: SchemaEntry = SchemaEntry {
75    yaml_path: "dogstatsd_permissive_decoding",
76    env_vars: &[],
77    value_type: ValueType::Bool,
78    default: Some("true"),
79};
80
81static DOGSTATSD_STRING_INTERNER_SIZE_BYTES_SCHEMA: SchemaEntry = SchemaEntry {
82    yaml_path: "dogstatsd_string_interner_size_bytes",
83    env_vars: &[],
84    value_type: ValueType::Integer,
85    default: None,
86};
87
88static DOGSTATSD_SO_RCVBUF_SCHEMA: SchemaEntry = SchemaEntry {
89    yaml_path: "dogstatsd_so_rcvbuf",
90    env_vars: &["DD_DOGSTATSD_SO_RCVBUF"],
91    value_type: ValueType::Integer,
92    default: Some("0"),
93};
94
95static DOGSTATSD_TCP_PORT_SCHEMA: SchemaEntry = SchemaEntry {
96    yaml_path: "dogstatsd_tcp_port",
97    env_vars: &[],
98    value_type: ValueType::Integer,
99    default: None,
100};
101
102crate::declare_annotations! {
103    // ── Schema-based ──────────────────────────────────────────────────────────
104
105    /// `bind_host` — host address to bind UDP/TCP listeners to.
106    BIND_HOST = SalukiAnnotation {
107        schema: &schema::BIND_HOST,
108        support_level: SupportLevel::Full,
109        additional_yaml_paths: &[],
110        env_var_override: None,
111        used_by: &[structs::DOGSTATSD_CONFIGURATION],
112        value_type_override: None,
113        test_json: None,
114    };
115
116    /// `dogstatsd_buffer_size` — receive buffer size in bytes. Schema says Float; field is usize.
117    DOGSTATSD_BUFFER_SIZE = SalukiAnnotation {
118        schema: &schema::DOGSTATSD_BUFFER_SIZE,
119        support_level: SupportLevel::Full,
120        additional_yaml_paths: &[],
121        env_var_override: None,
122        used_by: &[structs::DOGSTATSD_CONFIGURATION],
123        value_type_override: Some(ValueType::Integer),
124        test_json: None,
125    };
126
127    /// `dogstatsd_entity_id_precedence` — client entity ID takes precedence over UDS origin.
128    DOGSTATSD_ENTITY_ID_PRECEDENCE = SalukiAnnotation {
129        schema: &schema::DOGSTATSD_ENTITY_ID_PRECEDENCE,
130        support_level: SupportLevel::Full,
131        additional_yaml_paths: &[],
132        env_var_override: None,
133        used_by: &[structs::DOGSTATSD_CONFIGURATION],
134        value_type_override: None,
135        test_json: None,
136    };
137
138    /// `dogstatsd_non_local_traffic` — accept packets from non-localhost addresses.
139    DOGSTATSD_NON_LOCAL_TRAFFIC = SalukiAnnotation {
140        schema: &schema::DOGSTATSD_NON_LOCAL_TRAFFIC,
141        support_level: SupportLevel::Full,
142        additional_yaml_paths: &[],
143        env_var_override: None,
144        used_by: &[structs::DOGSTATSD_CONFIGURATION],
145        value_type_override: None,
146        test_json: None,
147    };
148
149    /// `dogstatsd_origin_detection` — enable UDS-based origin detection.
150    DOGSTATSD_ORIGIN_DETECTION = SalukiAnnotation {
151        schema: &schema::DOGSTATSD_ORIGIN_DETECTION,
152        support_level: SupportLevel::Full,
153        additional_yaml_paths: &[],
154        env_var_override: None,
155        used_by: &[structs::DOGSTATSD_CONFIGURATION],
156        value_type_override: None,
157        test_json: None,
158    };
159
160    /// `dogstatsd_origin_detection_client` — enable container enrichment fields.
161    DOGSTATSD_ORIGIN_DETECTION_CLIENT = SalukiAnnotation {
162        schema: &schema::DOGSTATSD_ORIGIN_DETECTION_CLIENT,
163        support_level: SupportLevel::Full,
164        additional_yaml_paths: &[],
165        env_var_override: None,
166        used_by: &[structs::DOGSTATSD_CONFIGURATION],
167        value_type_override: None,
168        test_json: None,
169    };
170
171    /// `dogstatsd_origin_optout_enabled` — skip enrichment when cardinality=none.
172    DOGSTATSD_ORIGIN_OPTOUT_ENABLED = SalukiAnnotation {
173        schema: &schema::DOGSTATSD_ORIGIN_OPTOUT_ENABLED,
174        support_level: SupportLevel::Full,
175        additional_yaml_paths: &[],
176        env_var_override: None,
177        used_by: &[structs::DOGSTATSD_CONFIGURATION],
178        value_type_override: None,
179        test_json: None,
180    };
181
182    /// `dogstatsd_port` — UDP port. Schema says Float; field is u16.
183    DOGSTATSD_PORT = SalukiAnnotation {
184        schema: &schema::DOGSTATSD_PORT,
185        support_level: SupportLevel::Full,
186        additional_yaml_paths: &[],
187        env_var_override: None,
188        used_by: &[structs::DOGSTATSD_CONFIGURATION],
189        value_type_override: Some(ValueType::Integer),
190        test_json: None,
191    };
192
193    /// `dogstatsd_socket` — UDS datagram socket path.
194    DOGSTATSD_SOCKET = SalukiAnnotation {
195        schema: &schema::DOGSTATSD_SOCKET,
196        support_level: SupportLevel::Full,
197        additional_yaml_paths: &[],
198        env_var_override: None,
199        used_by: &[structs::DOGSTATSD_CONFIGURATION],
200        value_type_override: None,
201        test_json: None,
202    };
203
204    /// `dogstatsd_so_rcvbuf` — DogStatsD UDP/UDS socket receive buffer size.
205    DOGSTATSD_SO_RCVBUF = SalukiAnnotation {
206        schema: &DOGSTATSD_SO_RCVBUF_SCHEMA,
207        support_level: SupportLevel::Full,
208        additional_yaml_paths: &[],
209        env_var_override: None,
210        used_by: &[structs::DOGSTATSD_CONFIGURATION],
211        value_type_override: None,
212        test_json: None,
213    };
214
215    /// `dogstatsd_stream_socket` — UDS stream socket path.
216    DOGSTATSD_STREAM_SOCKET = SalukiAnnotation {
217        schema: &schema::DOGSTATSD_STREAM_SOCKET,
218        support_level: SupportLevel::Full,
219        additional_yaml_paths: &[],
220        env_var_override: None,
221        used_by: &[structs::DOGSTATSD_CONFIGURATION],
222        value_type_override: None,
223        test_json: None,
224    };
225
226    /// `dogstatsd_string_interner_size` — context interner entry count. Schema Float; field u64.
227    DOGSTATSD_STRING_INTERNER_SIZE = SalukiAnnotation {
228        schema: &schema::DOGSTATSD_STRING_INTERNER_SIZE,
229        support_level: SupportLevel::Full,
230        additional_yaml_paths: &[],
231        env_var_override: None,
232        used_by: &[structs::DOGSTATSD_CONFIGURATION],
233        value_type_override: Some(ValueType::Integer),
234        test_json: None,
235    };
236
237    /// `dogstatsd_tag_cardinality` — default tag cardinality for origin enrichment.
238    /// Default is "Low"; inject "high" as test value to differ from default.
239    DOGSTATSD_TAG_CARDINALITY = SalukiAnnotation {
240        schema: &schema::DOGSTATSD_TAG_CARDINALITY,
241        support_level: SupportLevel::Full,
242        additional_yaml_paths: &[],
243        env_var_override: None,
244        used_by: &[structs::DOGSTATSD_CONFIGURATION],
245        value_type_override: None,
246        test_json: Some(r#""high""#),
247    };
248
249    /// `dogstatsd_tags` — additional tags applied to all ingested metrics.
250    DOGSTATSD_TAGS = SalukiAnnotation {
251        schema: &schema::DOGSTATSD_TAGS,
252        support_level: SupportLevel::Full,
253        additional_yaml_paths: &[],
254        env_var_override: None,
255        used_by: &[structs::DOGSTATSD_CONFIGURATION],
256        value_type_override: None,
257        test_json: None,
258    };
259
260    /// `origin_detection_unified` — use unified entity ID resolution for origin enrichment.
261    ORIGIN_DETECTION_UNIFIED = SalukiAnnotation {
262        schema: &schema::ORIGIN_DETECTION_UNIFIED,
263        support_level: SupportLevel::Full,
264        additional_yaml_paths: &[],
265        env_var_override: None,
266        used_by: &[structs::DOGSTATSD_CONFIGURATION],
267        value_type_override: None,
268        test_json: None,
269    };
270
271    /// `dogstatsd_log_file` — path to the DogStatsD metric debug log file.
272    DOGSTATSD_LOG_FILE = SalukiAnnotation {
273        schema: &DOGSTATSD_LOG_FILE_SCHEMA,
274        support_level: SupportLevel::Full,
275        additional_yaml_paths: &[],
276        env_var_override: None,
277        used_by: &[structs::DOGSTATSD_DEBUG_LOG_CONFIGURATION],
278        value_type_override: None,
279        test_json: None,
280    };
281
282    /// `dogstatsd_log_file_max_rolls` — number of rotated DogStatsD metric debug log files to keep.
283    DOGSTATSD_LOG_FILE_MAX_ROLLS = SalukiAnnotation {
284        schema: &DOGSTATSD_LOG_FILE_MAX_ROLLS_SCHEMA,
285        support_level: SupportLevel::Full,
286        additional_yaml_paths: &[],
287        env_var_override: None,
288        used_by: &[structs::DOGSTATSD_DEBUG_LOG_CONFIGURATION],
289        value_type_override: None,
290        test_json: None,
291    };
292
293    /// `dogstatsd_log_file_max_size` — maximum active DogStatsD metric debug log file size before rotation.
294    DOGSTATSD_LOG_FILE_MAX_SIZE = SalukiAnnotation {
295        schema: &DOGSTATSD_LOG_FILE_MAX_SIZE_SCHEMA,
296        support_level: SupportLevel::Full,
297        additional_yaml_paths: &[],
298        env_var_override: None,
299        used_by: &[structs::DOGSTATSD_DEBUG_LOG_CONFIGURATION],
300        value_type_override: None,
301        test_json: Some(r#""42MB""#),
302    };
303
304    /// `dogstatsd_logging_enabled` — enable writing DogStatsD metric debug stats to a file.
305    DOGSTATSD_LOGGING_ENABLED = SalukiAnnotation {
306        schema: &DOGSTATSD_LOGGING_ENABLED_SCHEMA,
307        support_level: SupportLevel::Full,
308        additional_yaml_paths: &[],
309        env_var_override: None,
310        used_by: &[structs::DOGSTATSD_DEBUG_LOG_CONFIGURATION],
311        value_type_override: None,
312        test_json: None,
313    };
314
315    /// `dogstatsd_metrics_stats_enable` — enable metric-level DogStatsD debug statistics.
316    DOGSTATSD_METRICS_STATS_ENABLE = SalukiAnnotation {
317        schema: &DOGSTATSD_METRICS_STATS_ENABLE_SCHEMA,
318        support_level: SupportLevel::Partial,
319        additional_yaml_paths: &[],
320        env_var_override: None,
321        used_by: &[structs::DOGSTATSD_DEBUG_LOG_CONFIGURATION],
322        value_type_override: None,
323        test_json: None,
324    };
325
326    // ── ADP-specific ──────────────────────────────────────────────────────────
327
328    /// `dogstatsd_allow_context_heap_allocs` — allow heap allocations when interner is full.
329    DOGSTATSD_ALLOW_CONTEXT_HEAP_ALLOCS = SalukiAnnotation {
330        schema: &DOGSTATSD_ALLOW_CONTEXT_HEAP_ALLOCS_SCHEMA,
331        support_level: SupportLevel::Full,
332        additional_yaml_paths: &[],
333        env_var_override: None,
334        used_by: &[structs::DOGSTATSD_CONFIGURATION],
335        value_type_override: None,
336        test_json: None,
337    };
338
339    /// `dogstatsd_buffer_count` — number of message buffers to pre-allocate.
340    DOGSTATSD_BUFFER_COUNT = SalukiAnnotation {
341        schema: &DOGSTATSD_BUFFER_COUNT_SCHEMA,
342        support_level: SupportLevel::Full,
343        additional_yaml_paths: &[],
344        env_var_override: None,
345        used_by: &[structs::DOGSTATSD_CONFIGURATION],
346        value_type_override: None,
347        test_json: None,
348    };
349
350    /// `dogstatsd_cached_contexts_limit` — max cached metric contexts.
351    DOGSTATSD_CACHED_CONTEXTS_LIMIT = SalukiAnnotation {
352        schema: &DOGSTATSD_CACHED_CONTEXTS_LIMIT_SCHEMA,
353        support_level: SupportLevel::Full,
354        additional_yaml_paths: &[],
355        env_var_override: None,
356        used_by: &[structs::DOGSTATSD_CONFIGURATION],
357        value_type_override: None,
358        test_json: None,
359    };
360
361    /// `dogstatsd_cached_tagsets_limit` — max cached tag sets.
362    DOGSTATSD_CACHED_TAGSETS_LIMIT = SalukiAnnotation {
363        schema: &DOGSTATSD_CACHED_TAGSETS_LIMIT_SCHEMA,
364        support_level: SupportLevel::Full,
365        additional_yaml_paths: &[],
366        env_var_override: None,
367        used_by: &[structs::DOGSTATSD_CONFIGURATION],
368        value_type_override: None,
369        test_json: None,
370    };
371
372    /// `dogstatsd_minimum_sample_rate` — minimum allowed sample rate.
373    DOGSTATSD_MINIMUM_SAMPLE_RATE = SalukiAnnotation {
374        schema: &DOGSTATSD_MINIMUM_SAMPLE_RATE_SCHEMA,
375        support_level: SupportLevel::Full,
376        additional_yaml_paths: &[],
377        env_var_override: None,
378        used_by: &[structs::DOGSTATSD_CONFIGURATION],
379        value_type_override: None,
380        test_json: None,
381    };
382
383    /// `dogstatsd_permissive_decoding` — relax decoding strictness for Agent compat.
384    DOGSTATSD_PERMISSIVE_DECODING = SalukiAnnotation {
385        schema: &DOGSTATSD_PERMISSIVE_DECODING_SCHEMA,
386        support_level: SupportLevel::Full,
387        additional_yaml_paths: &[],
388        env_var_override: None,
389        used_by: &[structs::DOGSTATSD_CONFIGURATION],
390        value_type_override: None,
391        test_json: None,
392    };
393
394    /// `dogstatsd_string_interner_size_bytes` — explicit interner byte budget (overrides entry count).
395    DOGSTATSD_STRING_INTERNER_SIZE_BYTES = SalukiAnnotation {
396        schema: &DOGSTATSD_STRING_INTERNER_SIZE_BYTES_SCHEMA,
397        support_level: SupportLevel::Full,
398        additional_yaml_paths: &[],
399        env_var_override: None,
400        used_by: &[structs::DOGSTATSD_CONFIGURATION],
401        value_type_override: None,
402        test_json: None,
403    };
404
405    /// `dogstatsd_tcp_port` — TCP port (0 = disabled).
406    DOGSTATSD_TCP_PORT = SalukiAnnotation {
407        schema: &DOGSTATSD_TCP_PORT_SCHEMA,
408        support_level: SupportLevel::Full,
409        additional_yaml_paths: &[],
410        env_var_override: None,
411        used_by: &[structs::DOGSTATSD_CONFIGURATION],
412        value_type_override: None,
413        test_json: None,
414    };
415
416    /// `enable_payloads.events` — forward event payloads.
417    ENABLE_PAYLOADS_EVENTS = SalukiAnnotation {
418        schema: &schema::ENABLE_PAYLOADS_EVENTS,
419        support_level: SupportLevel::Full,
420        additional_yaml_paths: &[],
421        env_var_override: None,
422        used_by: &[structs::DOGSTATSD_CONFIGURATION],
423        value_type_override: None,
424        test_json: None,
425    };
426
427    /// `enable_payloads.series` — forward series (counter/gauge/rate) payloads.
428    ENABLE_PAYLOADS_SERIES = SalukiAnnotation {
429        schema: &schema::ENABLE_PAYLOADS_SERIES,
430        support_level: SupportLevel::Full,
431        additional_yaml_paths: &[],
432        env_var_override: None,
433        used_by: &[structs::DOGSTATSD_CONFIGURATION],
434        value_type_override: None,
435        test_json: None,
436    };
437
438    /// `enable_payloads.service_checks` — forward service check payloads.
439    ENABLE_PAYLOADS_SERVICE_CHECKS = SalukiAnnotation {
440        schema: &schema::ENABLE_PAYLOADS_SERVICE_CHECKS,
441        support_level: SupportLevel::Full,
442        additional_yaml_paths: &[],
443        env_var_override: None,
444        used_by: &[structs::DOGSTATSD_CONFIGURATION],
445        value_type_override: None,
446        test_json: None,
447    };
448
449    /// `enable_payloads.sketches` — forward sketch (distribution) payloads.
450    ENABLE_PAYLOADS_SKETCHES = SalukiAnnotation {
451        schema: &schema::ENABLE_PAYLOADS_SKETCHES,
452        support_level: SupportLevel::Full,
453        additional_yaml_paths: &[],
454        env_var_override: None,
455        used_by: &[structs::DOGSTATSD_CONFIGURATION],
456        value_type_override: None,
457        test_json: None,
458    };
459}