datadog_agent_config_overlay_model/
saluki_keys.rs

1//! ADP-only configuration keys that are not in the Datadog Agent schema.
2//! Shared between registry_gen.rs (for config registry annotations) and doc_gen.rs (for the
3//! ADP-Only documentation section).
4
5pub struct SalukiKey {
6    pub yaml_path: &'static str,
7    pub description: &'static str,
8    pub default: &'static str,
9    /// Multi-line documentation rendered as a prose section below the ADP-Only table.
10    /// If the text starts with `#`, the heading is taken from the text itself.
11    pub documentation: Option<&'static str>,
12    // Fields used only by registry_gen:
13    pub value_type: &'static str,
14    pub schema_default: Option<&'static str>,
15    pub env_vars: &'static [&'static str],
16    pub env_var_override: Option<&'static [&'static str]>,
17    pub additional_yaml_paths: &'static [&'static str],
18    pub used_by: &'static [&'static str],
19    pub test_json: Option<&'static str>,
20    pub pipeline_affinity: &'static str,
21    pub filename: &'static str,
22}
23
24pub static SALUKI_KEYS: &[SalukiKey] = &[
25    // ── data_plane.rs ────────────────────────────────────────────────────────
26    SalukiKey {
27        yaml_path: "data_plane.otlp.receiver_grpc_endpoint_temporary",
28        description: "ADP OTLP gRPC listen endpoint",
29        default: "localhost:6317",
30        documentation: Some(
31            "Temporary development key for setting ADP's OTLP listen endpoints independently from the Agent's.",
32        ),
33        value_type: "ValueType::String",
34        schema_default: Some("localhost:6317"),
35        env_vars: &[],
36        env_var_override: None,
37        additional_yaml_paths: &[],
38        used_by: &["TYPED_CONFIG_SYSTEM"],
39        test_json: None,
40        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
41        filename: "data_plane.rs",
42    },
43    SalukiKey {
44        yaml_path: "data_plane.otlp.receiver_http_endpoint_temporary",
45        description: "ADP OTLP HTTP listen endpoint",
46        default: "localhost:6318",
47        documentation: Some(
48            "Temporary development key for setting ADP's OTLP listen endpoints independently from the Agent's.",
49        ),
50        value_type: "ValueType::String",
51        schema_default: Some("localhost:6318"),
52        env_vars: &[],
53        env_var_override: None,
54        additional_yaml_paths: &[],
55        used_by: &["TYPED_CONFIG_SYSTEM"],
56        test_json: None,
57        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
58        filename: "data_plane.rs",
59    },
60    // ── dogstatsd.rs ─────────────────────────────────────────────────────────
61    SalukiKey {
62        yaml_path: "dogstatsd_allow_context_heap_allocs",
63        description: "Allow heap allocations for contexts",
64        default: "true",
65        documentation: None,
66        value_type: "ValueType::Bool",
67        schema_default: Some("true"),
68        env_vars: &[],
69        env_var_override: None,
70        additional_yaml_paths: &[],
71        used_by: &["TYPED_CONFIG_SYSTEM"],
72        test_json: None,
73        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
74        filename: "dogstatsd.rs",
75    },
76    SalukiKey {
77        yaml_path: "dogstatsd_autoscale_udp_listeners",
78        description: "Bind multiple UDP sockets via SO_REUSEPORT",
79        default: "false",
80        documentation: None,
81        value_type: "ValueType::Bool",
82        schema_default: Some("false"),
83        env_vars: &[],
84        env_var_override: None,
85        additional_yaml_paths: &[],
86        used_by: &["TYPED_CONFIG_SYSTEM"],
87        test_json: None,
88        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
89        filename: "dogstatsd.rs",
90    },
91    SalukiKey {
92        yaml_path: "dogstatsd_buffer_count",
93        description: "Baseline receive buffers",
94        default: "128",
95        documentation: None,
96        value_type: "ValueType::Integer",
97        schema_default: Some("128"),
98        env_vars: &[],
99        env_var_override: None,
100        additional_yaml_paths: &[],
101        used_by: &["TYPED_CONFIG_SYSTEM"],
102        test_json: None,
103        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
104        filename: "dogstatsd.rs",
105    },
106    SalukiKey {
107        yaml_path: "dogstatsd_buffer_count_max",
108        description: "Maximum receive buffer count",
109        default: "32768",
110        documentation: None,
111        value_type: "ValueType::Integer",
112        schema_default: Some("32768"),
113        env_vars: &[],
114        env_var_override: None,
115        additional_yaml_paths: &[],
116        used_by: &["TYPED_CONFIG_SYSTEM"],
117        test_json: None,
118        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
119        filename: "dogstatsd.rs",
120    },
121    SalukiKey {
122        yaml_path: "dogstatsd_cached_contexts_limit",
123        description: "Max cached metric contexts",
124        default: "500000",
125        documentation: None,
126        value_type: "ValueType::Integer",
127        schema_default: Some("500000"),
128        env_vars: &[],
129        env_var_override: None,
130        additional_yaml_paths: &[],
131        used_by: &["TYPED_CONFIG_SYSTEM"],
132        test_json: None,
133        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
134        filename: "dogstatsd.rs",
135    },
136    SalukiKey {
137        yaml_path: "dogstatsd_cached_tagsets_limit",
138        description: "Max cached tagsets",
139        default: "500000",
140        documentation: None,
141        value_type: "ValueType::Integer",
142        schema_default: Some("500000"),
143        env_vars: &[],
144        env_var_override: None,
145        additional_yaml_paths: &[],
146        used_by: &["TYPED_CONFIG_SYSTEM"],
147        test_json: None,
148        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
149        filename: "dogstatsd.rs",
150    },
151    SalukiKey {
152        yaml_path: "dogstatsd_minimum_sample_rate",
153        description: "Floor for metric sample rates",
154        default: "0.000000003845",
155        documentation: Some(
156            "ADP enforces a minimum sample rate on incoming metrics to prevent memory exhaustion \
157             from extremely low sample rates on histograms and sketches. Sending metrics with a \
158             very high inverse sample rate (for example `@0.0000001`) can cause unbounded memory \
159             growth in a sketch; this setting prevents that. The default is conservative enough \
160             that normal clients are unaffected.",
161        ),
162        value_type: "ValueType::Float",
163        schema_default: Some("0.000000003845"),
164        env_vars: &[],
165        env_var_override: None,
166        additional_yaml_paths: &[],
167        used_by: &["TYPED_CONFIG_SYSTEM"],
168        test_json: None,
169        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
170        filename: "dogstatsd.rs",
171    },
172    SalukiKey {
173        yaml_path: "metric_tag_value_allowlist",
174        description: "Per-metric tag value allow-list",
175        default: "[]",
176        documentation: Some(concat!(
177            "### `metric_tag_value_allowlist`\n\n",
178            "Use `metric_tag_value_allowlist` to bound metric cardinality by retaining selected values for a tag. ",
179            "Configure each list item with a `metric_prefix`, a `tag_name`, and the `values` to retain. The rule ",
180            "applies to every metric whose name starts with the prefix. Values not in the list lose the tag by default. To aggregate them under a sentinel instead, set ",
181            "`on_miss: replace` and configure `replacement`; the replacement defaults to `other`.\n\n",
182            "```yaml\n",
183            "metric_tag_value_allowlist:\n",
184            "  - metric_prefix: requests.\n",
185            "    tag_name: customer_id\n",
186            "    values: [customer-1, customer-2]\n",
187            "    on_miss: replace\n",
188            "    replacement: other\n",
189            "```\n\n",
190            "This ADP-only key is independent from `metric_tag_filterlist`. Remote Config updates to ",
191            "`metric_tag_filterlist` therefore do not replace locally configured value allow-lists. Value allow-list ",
192            "changes require an ADP restart in this initial implementation. Rules apply to counters and sketch-backed ",
193            "metrics before aggregation, including instrumented and origin tags. ADP matches `metric_prefix` after ",
194            "DogStatsD mapper rewrites and `statsd_metric_namespace` prefixing, so configure the final metric name ",
195            "produced by those steps.\n\n",
196            "Whole-tag filtering runs first. If `metric_tag_filterlist` uses `action: include`, add the value-filtered ",
197            "tag key to its `tags` list or the whole-tag rule removes it before value filtering. Value rules do not ",
198            "operate on bare tags such as `customer_id`, because they have no value. An empty string in a key/value ",
199            "tag such as `customer_id:` is a value and is subject to the allow-list; include `\"\"` in `values` to ",
200            "retain it. An empty `values` list treats every key/value tag as a mismatch.\n\n",
201            "Distinct metric prefixes must not overlap, even when the rules target different tags. Multiple rules may ",
202            "use the same prefix when they target different tags. ADP rejects overlapping rules at startup so each ",
203            "metric matches at most one prefix. ADP also rejects empty metric prefixes and tag names, duplicate prefix ",
204            "and tag pairs, and tag names containing `:`. As with ",
205            "`metric_tag_filterlist`, ADP does not trim configured strings: prefixes, tag names, values, and replacements ",
206            "preserve whitespace and match exactly. Configure a replacement that cannot collide with a real tag value.",
207        )),
208        value_type: "ValueType::String",
209        schema_default: Some("[]"),
210        env_vars: &[],
211        env_var_override: Some(&[]),
212        additional_yaml_paths: &[],
213        used_by: &["TYPED_CONFIG_SYSTEM"],
214        test_json: Some(
215            r#"[{"metric_prefix":"smoke.","tag_name":"customer_id","values":["customer-1"],"on_miss":"replace","replacement":"other"}]"#,
216        ),
217        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
218        filename: "tag_filterlist.rs",
219    },
220    SalukiKey {
221        yaml_path: "dogstatsd_permissive_decoding",
222        description: "Relaxes decoder strictness",
223        default: "true",
224        documentation: Some(
225            "By default, ADP parses DogStatsD packets with the same leniency as the core agent, \
226             accepting packets that technically violate the spec. Setting this to `false` enables \
227             strict mode, which rejects non-conformant packets. Strict mode is not available in \
228             the core agent.",
229        ),
230        value_type: "ValueType::Bool",
231        schema_default: Some("true"),
232        env_vars: &[],
233        env_var_override: None,
234        additional_yaml_paths: &[],
235        used_by: &["TYPED_CONFIG_SYSTEM"],
236        test_json: None,
237        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
238        filename: "dogstatsd.rs",
239    },
240    SalukiKey {
241        yaml_path: "dogstatsd_string_interner_size_bytes",
242        description: "Explicit byte budget for context interner",
243        default: "",
244        documentation: Some(
245            "Accepts a bare integer number of bytes or a human-readable byte-size string such as `12MiB`. \
246             When unset, ADP derives the byte budget from `dogstatsd_string_interner_size`.",
247        ),
248        value_type: "ValueType::String",
249        schema_default: None,
250        env_vars: &[],
251        env_var_override: None,
252        additional_yaml_paths: &[],
253        used_by: &["TYPED_CONFIG_SYSTEM"],
254        test_json: Some(r#""12MiB""#),
255        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
256        filename: "dogstatsd.rs",
257    },
258    SalukiKey {
259        yaml_path: "dogstatsd_tcp_port",
260        description: "DogStatsD TCP listen port; 0 disables TCP",
261        default: "0",
262        documentation: None,
263        value_type: "ValueType::Integer",
264        schema_default: Some("0"),
265        env_vars: &[],
266        env_var_override: None,
267        additional_yaml_paths: &[],
268        used_by: &["TYPED_CONFIG_SYSTEM"],
269        test_json: None,
270        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
271        filename: "dogstatsd.rs",
272    },
273    // ── otlp.rs ──────────────────────────────────────────────────────────────
274    SalukiKey {
275        yaml_path: "otlp_config.traces.enable_otlp_compute_top_level_by_span_kind",
276        description: "Enable OTLP top-level-by-span-kind",
277        default: "",
278        documentation: None,
279        value_type: "ValueType::Bool",
280        schema_default: Some("true"),
281        env_vars: &[],
282        env_var_override: None,
283        additional_yaml_paths: &[],
284        used_by: &["TYPED_CONFIG_SYSTEM"],
285        test_json: None,
286        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
287        filename: "otlp.rs",
288    },
289    SalukiKey {
290        yaml_path: "otlp_config.traces.ignore_missing_datadog_fields",
291        description: "Ignore missing Datadog fields in OTLP",
292        default: "",
293        documentation: None,
294        value_type: "ValueType::Bool",
295        schema_default: None,
296        env_vars: &[],
297        env_var_override: None,
298        additional_yaml_paths: &[],
299        used_by: &["TYPED_CONFIG_SYSTEM"],
300        test_json: None,
301        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
302        filename: "otlp.rs",
303    },
304    SalukiKey {
305        yaml_path: "otlp_config.traces.string_interner_size",
306        description: "OTLP trace string interner capacity",
307        default: "",
308        documentation: None,
309        value_type: "ValueType::Integer",
310        schema_default: None,
311        env_vars: &[],
312        env_var_override: None,
313        additional_yaml_paths: &[],
314        used_by: &["TYPED_CONFIG_SYSTEM"],
315        test_json: None,
316        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
317        filename: "otlp.rs",
318    },
319    SalukiKey {
320        yaml_path: "otlp_config.receiver.protocols.http.transport",
321        description: "OTLP HTTP receiver transport",
322        default: "",
323        documentation: None,
324        value_type: "ValueType::String",
325        schema_default: None,
326        env_vars: &[],
327        env_var_override: None,
328        additional_yaml_paths: &[],
329        used_by: &["TYPED_CONFIG_SYSTEM"],
330        test_json: None,
331        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
332        filename: "otlp.rs",
333    },
334    SalukiKey {
335        yaml_path: "otlp_allow_context_heap_allocs",
336        description: "Allow heap allocations for OTLP contexts",
337        default: "",
338        documentation: None,
339        value_type: "ValueType::Bool",
340        schema_default: Some("true"),
341        env_vars: &[],
342        env_var_override: None,
343        additional_yaml_paths: &[],
344        used_by: &["TYPED_CONFIG_SYSTEM"],
345        test_json: None,
346        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
347        filename: "otlp.rs",
348    },
349    SalukiKey {
350        yaml_path: "otlp_cached_contexts_limit",
351        description: "Max cached OTLP metric contexts",
352        default: "",
353        documentation: None,
354        value_type: "ValueType::Integer",
355        schema_default: None,
356        env_vars: &[],
357        env_var_override: None,
358        additional_yaml_paths: &[],
359        used_by: &["TYPED_CONFIG_SYSTEM"],
360        test_json: None,
361        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
362        filename: "otlp.rs",
363    },
364    SalukiKey {
365        yaml_path: "otlp_cached_tagsets_limit",
366        description: "Max cached OTLP tagsets",
367        default: "",
368        documentation: None,
369        value_type: "ValueType::Integer",
370        schema_default: None,
371        env_vars: &[],
372        env_var_override: None,
373        additional_yaml_paths: &[],
374        used_by: &["TYPED_CONFIG_SYSTEM"],
375        test_json: None,
376        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
377        filename: "otlp.rs",
378    },
379    SalukiKey {
380        yaml_path: "otlp_string_interner_size",
381        description: "OTLP context interner capacity",
382        default: "",
383        documentation: None,
384        value_type: "ValueType::Integer",
385        schema_default: None,
386        env_vars: &[],
387        env_var_override: None,
388        additional_yaml_paths: &[],
389        used_by: &["TYPED_CONFIG_SYSTEM"],
390        test_json: None,
391        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Otlp])",
392        filename: "otlp.rs",
393    },
394    // ── aggregate.rs ─────────────────────────────────────────────────────────
395    SalukiKey {
396        yaml_path: "aggregate_window_duration_seconds",
397        description: "Aggregation window size",
398        default: "",
399        documentation: None,
400        value_type: "ValueType::Integer",
401        schema_default: None,
402        env_vars: &[],
403        env_var_override: None,
404        additional_yaml_paths: &[],
405        used_by: &["TYPED_CONFIG_SYSTEM"],
406        test_json: None,
407        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
408        filename: "aggregate.rs",
409    },
410    SalukiKey {
411        yaml_path: "aggregate_flush_interval",
412        description: "Aggregator flush period",
413        default: "",
414        documentation: None,
415        value_type: "ValueType::String",
416        schema_default: None,
417        env_vars: &[],
418        env_var_override: None,
419        additional_yaml_paths: &[],
420        used_by: &["TYPED_CONFIG_SYSTEM"],
421        test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
422        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
423        filename: "aggregate.rs",
424    },
425    SalukiKey {
426        yaml_path: "aggregate_context_limit",
427        description: "Max contexts per aggregation window",
428        default: "",
429        documentation: None,
430        value_type: "ValueType::Integer",
431        schema_default: None,
432        env_vars: &[],
433        env_var_override: None,
434        additional_yaml_paths: &[],
435        used_by: &["TYPED_CONFIG_SYSTEM"],
436        test_json: None,
437        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
438        filename: "aggregate.rs",
439    },
440    SalukiKey {
441        yaml_path: "aggregate_passthrough_idle_flush_timeout",
442        description: "Passthrough buffer flush delay",
443        default: "",
444        documentation: None,
445        value_type: "ValueType::String",
446        schema_default: None,
447        env_vars: &[],
448        env_var_override: None,
449        additional_yaml_paths: &[],
450        used_by: &["TYPED_CONFIG_SYSTEM"],
451        test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
452        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD, Pipeline::Checks])",
453        filename: "aggregate.rs",
454    },
455    // ── trace_obfuscation.rs ─────────────────────────────────────────────────
456    SalukiKey {
457        yaml_path: "apm_config.obfuscation.sql.dbms",
458        description: "SQL obfuscation DBMS dialect",
459        default: "",
460        documentation: None,
461        value_type: "ValueType::String",
462        schema_default: None,
463        env_vars: &[],
464        env_var_override: None,
465        additional_yaml_paths: &[],
466        used_by: &["TYPED_CONFIG_SYSTEM"],
467        test_json: None,
468        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
469        filename: "trace_obfuscation.rs",
470    },
471    SalukiKey {
472        yaml_path: "apm_config.obfuscation.sql.dollar_quoted_func",
473        description: "Preserve dollar-quoted SQL functions",
474        default: "",
475        documentation: None,
476        value_type: "ValueType::Bool",
477        schema_default: None,
478        env_vars: &[],
479        env_var_override: None,
480        additional_yaml_paths: &[],
481        used_by: &["TYPED_CONFIG_SYSTEM"],
482        test_json: None,
483        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
484        filename: "trace_obfuscation.rs",
485    },
486    SalukiKey {
487        yaml_path: "apm_config.obfuscation.sql.keep_sql_alias",
488        description: "Preserve SQL aliases in obfuscation",
489        default: "",
490        documentation: None,
491        value_type: "ValueType::Bool",
492        schema_default: None,
493        env_vars: &[],
494        env_var_override: None,
495        additional_yaml_paths: &[],
496        used_by: &["TYPED_CONFIG_SYSTEM"],
497        test_json: None,
498        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
499        filename: "trace_obfuscation.rs",
500    },
501    SalukiKey {
502        yaml_path: "apm_config.obfuscation.sql.replace_digits",
503        description: "Replace digits in SQL obfuscation",
504        default: "",
505        documentation: None,
506        value_type: "ValueType::Bool",
507        schema_default: None,
508        env_vars: &[],
509        env_var_override: None,
510        additional_yaml_paths: &[],
511        used_by: &["TYPED_CONFIG_SYSTEM"],
512        test_json: None,
513        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
514        filename: "trace_obfuscation.rs",
515    },
516    SalukiKey {
517        yaml_path: "apm_config.obfuscation.sql.table_names",
518        description: "Collect table names during obfuscation",
519        default: "",
520        documentation: None,
521        value_type: "ValueType::Bool",
522        schema_default: None,
523        env_vars: &[],
524        env_var_override: None,
525        additional_yaml_paths: &[],
526        used_by: &["TYPED_CONFIG_SYSTEM"],
527        test_json: None,
528        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Traces])",
529        filename: "trace_obfuscation.rs",
530    },
531    // ── encoders.rs ──────────────────────────────────────────────────────────
532    SalukiKey {
533        yaml_path: "flush_timeout_secs",
534        description: "Encoder flush timeout (secs)",
535        default: "",
536        documentation: None,
537        value_type: "ValueType::Integer",
538        schema_default: None,
539        env_vars: &[],
540        env_var_override: None,
541        additional_yaml_paths: &[],
542        used_by: &["TYPED_CONFIG_SYSTEM"],
543        test_json: None,
544        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Checks, Pipeline::Traces, Pipeline::DogStatsD])",
545        filename: "encoders.rs",
546    },
547    SalukiKey {
548        yaml_path: "serializer_max_metrics_per_payload",
549        description: "Max metrics per payload",
550        default: "",
551        documentation: None,
552        value_type: "ValueType::Integer",
553        schema_default: None,
554        env_vars: &[],
555        env_var_override: None,
556        additional_yaml_paths: &[],
557        used_by: &["TYPED_CONFIG_SYSTEM"],
558        test_json: None,
559        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::Checks, Pipeline::DogStatsD])",
560        filename: "encoders.rs",
561    },
562    // ── dogstatsd_mapper.rs ──────────────────────────────────────────────────
563    SalukiKey {
564        yaml_path: "dogstatsd_mapper_string_interner_size",
565        description: "Mapper string interner byte capacity",
566        default: "64KiB",
567        documentation: Some(
568            "Controls the pre-allocated byte capacity for interning mapped metric names and tags. The default is \
569             `64KiB`. Set this to a nonzero byte count; you can use a bare number of bytes or a human-readable \
570             byte-size string such as `64KiB`. Larger values increase memory usage.",
571        ),
572        value_type: "ValueType::Integer",
573        schema_default: None,
574        env_vars: &[],
575        env_var_override: None,
576        additional_yaml_paths: &[],
577        used_by: &["TYPED_CONFIG_SYSTEM"],
578        test_json: None,
579        pipeline_affinity: "PipelineAffinity::Pipelines(&[Pipeline::DogStatsD])",
580        filename: "dogstatsd_mapper.rs",
581    },
582    // ── accounting.rs ────────────────────────────────────────────────────────
583    SalukiKey {
584        yaml_path: "memory_limit",
585        description: "Process memory limit",
586        default: "",
587        documentation: Some(
588            "### `memory_limit` / `memory_slop_factor`
589
590\
591             ADP uses an explicit process memory limit (`memory_limit`) rather than relying on \
592             Go's garbage collector. The `memory_slop_factor` reserves a fraction of the limit \
593             to account for allocations not tracked by ADP's internal accounting. When memory \
594             usage approaches `memory_limit`, ADP's global limiter begins exerting backpressure \
595             (see `enable_global_limiter`).",
596        ),
597        value_type: "ValueType::String",
598        schema_default: None,
599        env_vars: &[],
600        env_var_override: None,
601        additional_yaml_paths: &[],
602        used_by: &["TYPED_CONFIG_SYSTEM"],
603        test_json: None,
604        pipeline_affinity: "PipelineAffinity::CrossCutting",
605        filename: "accounting.rs",
606    },
607    SalukiKey {
608        yaml_path: "memory_slop_factor",
609        description: "Memory accounting slop fraction",
610        default: "0.25",
611        documentation: Some("See `memory_limit` above."),
612        value_type: "ValueType::Float",
613        schema_default: Some("0.25"),
614        env_vars: &[],
615        env_var_override: None,
616        additional_yaml_paths: &[],
617        used_by: &["TYPED_CONFIG_SYSTEM"],
618        test_json: None,
619        pipeline_affinity: "PipelineAffinity::CrossCutting",
620        filename: "accounting.rs",
621    },
622    SalukiKey {
623        yaml_path: "enable_global_limiter",
624        description: "Global memory limiter toggle",
625        default: "true",
626        documentation: Some(
627            "Controls whether the global memory limiter exerts backpressure as memory usage \
628             approaches `memory_limit`. The default is `true`. When set to `false`, the limiter \
629             becomes a no-op and only the memory bounds of the running components influence \
630             memory usage.",
631        ),
632        value_type: "ValueType::Bool",
633        schema_default: Some("true"),
634        env_vars: &[],
635        env_var_override: None,
636        additional_yaml_paths: &[],
637        used_by: &["TYPED_CONFIG_SYSTEM"],
638        test_json: None,
639        pipeline_affinity: "PipelineAffinity::CrossCutting",
640        filename: "accounting.rs",
641    },
642    SalukiKey {
643        yaml_path: "memory_mode",
644        description: "Memory bounds validation mode",
645        default: "disabled",
646        documentation: Some(
647            "Controls how the calculated memory bounds are reconciled against `memory_limit`. The \
648             default is `disabled`. Accepted values: `disabled` skips bounds validation and applies \
649             no memory limiting; `permissive` logs a warning when the bounds do not fit within the \
650             limit and starts anyway; `strict` refuses to start. Under `permissive` and `strict`, \
651             the global memory limiter is active only when a limit is in effect (configured or \
652             detected from cgroups) and `enable_global_limiter` is `true`.",
653        ),
654        value_type: "ValueType::String",
655        schema_default: Some("disabled"),
656        env_vars: &[],
657        env_var_override: None,
658        additional_yaml_paths: &[],
659        used_by: &["TYPED_CONFIG_SYSTEM"],
660        test_json: None,
661        pipeline_affinity: "PipelineAffinity::CrossCutting",
662        filename: "accounting.rs",
663    },
664];