apollo_opentelemetry/config/
mod.rs1mod attribute_limits;
4pub(crate) mod exporters;
5pub(crate) mod logs;
6pub(crate) mod metrics;
7pub(crate) mod processor;
8pub(crate) mod propagator;
9mod resource;
10pub(crate) mod traces;
11
12pub(crate) use processor::BatchProcessorConfig;
13pub(crate) use processor::RateLimitedProcessorConfig;
14
15use attribute_limits::AttributeLimitsConfig;
16pub(crate) use exporters::LogExporter;
17pub(crate) use exporters::MetricExporter;
18pub(crate) use exporters::SpanExporter;
19pub(crate) use logs::LogRecordProcessor;
20use logs::LoggerProviderConfig;
21use metrics::MeterProviderConfig;
22pub(crate) use metrics::MetricReader;
23use propagator::PropagatorConfig;
24use resource::ResourceConfig;
25pub(crate) use traces::SpanProcessor;
26use traces::TracerProviderConfig;
27
28use apollo_configuration::configuration;
29
30#[configuration]
35pub struct OpenTelemetryConfig {
36 pub(crate) file_format: Option<String>,
38
39 pub(crate) disabled: Option<bool>,
41
42 pub(crate) log_level: Option<LogLevel>,
44
45 pub(crate) attribute_limits: AttributeLimitsConfig,
47
48 pub(crate) resource: ResourceConfig,
50
51 pub(crate) propagator: PropagatorConfig,
53
54 pub(crate) tracer_provider: TracerProviderConfig,
56
57 pub(crate) meter_provider: MeterProviderConfig,
59
60 pub(crate) logger_provider: LoggerProviderConfig,
62}
63
64#[configuration]
66#[derive(Copy, PartialEq, Eq)]
67pub(crate) enum LogLevel {
68 Trace,
69 Debug,
70 Info,
71 Warn,
72 Error,
73}
74
75#[cfg(test)]
76mod tests {
77 use apollo_configuration::parse_yaml;
78
79 use super::*;
80
81 #[test]
82 fn parse_minimal_config() {
83 let config: OpenTelemetryConfig = parse_yaml("{}", &Default::default()).unwrap();
84 assert!(config.disabled.is_none());
85 }
86
87 #[test]
88 fn parse_disabled_config() {
89 let config: OpenTelemetryConfig = parse_yaml(
90 indoc::indoc! {"
91 disabled: true
92 "},
93 &Default::default(),
94 )
95 .unwrap();
96 assert_eq!(config.disabled, Some(true));
97 }
98
99 #[test]
100 fn parse_full_config() {
101 let config: OpenTelemetryConfig = parse_yaml(
102 indoc::indoc! {"
103 file_format: '1.0-rc.1'
104 disabled: false
105 log_level: info
106
107 attribute_limits:
108 attribute_count_limit: 128
109 attribute_value_length_limit: 1024
110
111 resource:
112 attributes:
113 - name: service.name
114 value: my-service
115
116 propagator:
117 composite:
118 - tracecontext
119 - baggage
120
121 tracer_provider:
122 processors:
123 - batch:
124 exporter:
125 console: {}
126 sampler: always_on
127 limits:
128 attribute_count_limit: 128
129
130 meter_provider:
131 readers:
132 - periodic:
133 exporter:
134 console: {}
135
136 logger_provider:
137 processors:
138 - batch:
139 exporter:
140 console: {}
141 "},
142 &Default::default(),
143 )
144 .unwrap();
145
146 assert_eq!(config.file_format, Some("1.0-rc.1".to_string()));
147 assert_eq!(config.disabled, Some(false));
148 assert!(config.log_level.is_some());
149 }
150
151 #[test]
152 fn json_schema() {
153 insta::assert_json_snapshot!(apollo_configuration::export_json_schema::<
154 OpenTelemetryConfig,
155 >());
156 }
157}