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