Skip to main content

saluki_components/config_registry/datadog/
aggregate.rs

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