Skip to main content

saluki_components/config_registry/datadog/
aggregate.rs

1//! Annotations for the aggregate transform configuration keys.
2use crate::config_registry::{generated::schema, structs, SalukiAnnotation, SchemaEntry, SupportLevel, ValueType};
3
4// ADP-specific keys not present in the vendored Agent schema.
5static AGGREGATE_WINDOW_DURATION_SCHEMA: SchemaEntry = SchemaEntry {
6    yaml_path: "aggregate_window_duration",
7    env_vars: &[],
8    value_type: ValueType::String,
9    default: None,
10};
11
12static AGGREGATE_FLUSH_INTERVAL_SCHEMA: SchemaEntry = SchemaEntry {
13    yaml_path: "aggregate_flush_interval",
14    env_vars: &[],
15    value_type: ValueType::String,
16    default: None,
17};
18
19static AGGREGATE_CONTEXT_LIMIT_SCHEMA: SchemaEntry = SchemaEntry {
20    yaml_path: "aggregate_context_limit",
21    env_vars: &[],
22    value_type: ValueType::Integer,
23    default: None,
24};
25
26static COUNTER_EXPIRY_SECONDS_SCHEMA: SchemaEntry = SchemaEntry {
27    yaml_path: "counter_expiry_seconds",
28    env_vars: &[],
29    value_type: ValueType::Integer,
30    default: None,
31};
32
33static AGGREGATE_PASSTHROUGH_IDLE_FLUSH_TIMEOUT_SCHEMA: SchemaEntry = SchemaEntry {
34    yaml_path: "aggregate_passthrough_idle_flush_timeout",
35    env_vars: &[],
36    value_type: ValueType::String,
37    default: None,
38};
39
40crate::declare_annotations! {
41    /// `aggregate_window_duration` — size of each aggregation window.
42    /// Duration fields serialize as {secs, nanos}; inject as object with test_json.
43    AGGREGATE_WINDOW_DURATION = SalukiAnnotation {
44        schema: &AGGREGATE_WINDOW_DURATION_SCHEMA,
45        support_level: SupportLevel::Full,
46        additional_yaml_paths: &[],
47        env_var_override: None,
48        used_by: &[structs::AGGREGATE_CONFIGURATION],
49        value_type_override: None,
50        test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
51    };
52
53    /// `aggregate_flush_interval` — how often to flush aggregation buckets.
54    AGGREGATE_FLUSH_INTERVAL = SalukiAnnotation {
55        schema: &AGGREGATE_FLUSH_INTERVAL_SCHEMA,
56        support_level: SupportLevel::Full,
57        additional_yaml_paths: &[],
58        env_var_override: None,
59        used_by: &[structs::AGGREGATE_CONFIGURATION],
60        value_type_override: None,
61        test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
62    };
63
64    /// `aggregate_context_limit` — max distinct metric contexts per window.
65    AGGREGATE_CONTEXT_LIMIT = SalukiAnnotation {
66        schema: &AGGREGATE_CONTEXT_LIMIT_SCHEMA,
67        support_level: SupportLevel::Full,
68        additional_yaml_paths: &[],
69        env_var_override: None,
70        used_by: &[structs::AGGREGATE_CONFIGURATION],
71        value_type_override: None,
72        test_json: None,
73    };
74
75    /// `dogstatsd_flush_incomplete_buckets` — flush open buckets on shutdown.
76    AGGREGATE_FLUSH_OPEN_WINDOWS = SalukiAnnotation {
77        schema: &schema::DOGSTATSD_FLUSH_INCOMPLETE_BUCKETS,
78        support_level: SupportLevel::Full,
79        additional_yaml_paths: &["aggregate_flush_open_windows"],
80        env_var_override: None,
81        used_by: &[structs::AGGREGATE_CONFIGURATION],
82        value_type_override: None,
83        test_json: None,
84    };
85
86    /// `counter_expiry_seconds` — idle counter lifetime before removal.
87    COUNTER_EXPIRY_SECONDS = SalukiAnnotation {
88        schema: &COUNTER_EXPIRY_SECONDS_SCHEMA,
89        support_level: SupportLevel::Full,
90        additional_yaml_paths: &["dogstatsd_expiry_seconds"],
91        env_var_override: None,
92        used_by: &[structs::AGGREGATE_CONFIGURATION],
93        value_type_override: None,
94        test_json: None,
95    };
96
97    /// `dogstatsd_no_aggregation_pipeline` — pass through pre-timestamped metrics immediately.
98    DOGSTATSD_NO_AGGREGATION_PIPELINE = SalukiAnnotation {
99        schema: &schema::DOGSTATSD_NO_AGGREGATION_PIPELINE,
100        support_level: SupportLevel::Full,
101        additional_yaml_paths: &[],
102        env_var_override: None,
103        used_by: &[structs::AGGREGATE_CONFIGURATION, structs::DOGSTATSD_CONFIGURATION],
104        value_type_override: None,
105        test_json: None,
106    };
107
108    /// `aggregate_passthrough_idle_flush_timeout` — max buffer time for passthrough metrics.
109    AGGREGATE_PASSTHROUGH_IDLE_FLUSH_TIMEOUT = SalukiAnnotation {
110        schema: &AGGREGATE_PASSTHROUGH_IDLE_FLUSH_TIMEOUT_SCHEMA,
111        support_level: SupportLevel::Full,
112        additional_yaml_paths: &[],
113        env_var_override: None,
114        used_by: &[structs::AGGREGATE_CONFIGURATION],
115        value_type_override: None,
116        test_json: Some(r#"{"secs": 42, "nanos": 0}"#),
117    };
118
119    /// `histogram_aggregates` — list of aggregates to compute for histogram metrics.
120    HISTOGRAM_AGGREGATES = SalukiAnnotation {
121        schema: &schema::HISTOGRAM_AGGREGATES,
122        support_level: SupportLevel::Full,
123        additional_yaml_paths: &[],
124        env_var_override: None,
125        used_by: &[structs::AGGREGATE_CONFIGURATION],
126        value_type_override: None,
127        test_json: Some(r#"["count"]"#),
128    };
129
130    /// `histogram_copy_to_distribution` — also emit histograms as distributions.
131    HISTOGRAM_COPY_TO_DISTRIBUTION = SalukiAnnotation {
132        schema: &schema::HISTOGRAM_COPY_TO_DISTRIBUTION,
133        support_level: SupportLevel::Full,
134        additional_yaml_paths: &[],
135        env_var_override: None,
136        used_by: &[structs::AGGREGATE_CONFIGURATION],
137        value_type_override: None,
138        test_json: None,
139    };
140
141    /// `histogram_copy_to_distribution_prefix` — prefix for distribution copies of histograms.
142    HISTOGRAM_COPY_TO_DISTRIBUTION_PREFIX = SalukiAnnotation {
143        schema: &schema::HISTOGRAM_COPY_TO_DISTRIBUTION_PREFIX,
144        support_level: SupportLevel::Full,
145        additional_yaml_paths: &[],
146        env_var_override: None,
147        used_by: &[structs::AGGREGATE_CONFIGURATION],
148        value_type_override: None,
149        test_json: None,
150    };
151}