mod attribute_limits;
pub(crate) mod exporters;
pub(crate) mod logs;
pub(crate) mod metrics;
pub(crate) mod processor;
pub(crate) mod propagator;
mod resource;
pub(crate) mod traces;
pub(crate) use processor::BatchProcessorConfig;
pub(crate) use processor::RateLimitedProcessorConfig;
use attribute_limits::AttributeLimitsConfig;
pub(crate) use exporters::LogExporter;
pub(crate) use exporters::MetricExporter;
pub(crate) use exporters::SpanExporter;
pub(crate) use logs::LogRecordProcessor;
use logs::LoggerProviderConfig;
use metrics::MeterProviderConfig;
pub(crate) use metrics::MetricReader;
use propagator::PropagatorConfig;
use resource::ResourceConfig;
pub(crate) use traces::SpanProcessor;
use traces::TracerProviderConfig;
use apollo_configuration::configuration;
#[configuration]
pub struct OpenTelemetryConfig {
pub(crate) file_format: Option<String>,
pub(crate) disabled: Option<bool>,
pub(crate) log_level: Option<LogLevel>,
pub(crate) attribute_limits: AttributeLimitsConfig,
pub(crate) resource: ResourceConfig,
pub(crate) propagator: PropagatorConfig,
pub(crate) tracer_provider: TracerProviderConfig,
pub(crate) meter_provider: MeterProviderConfig,
pub(crate) logger_provider: LoggerProviderConfig,
}
#[configuration]
#[derive(Copy, PartialEq, Eq)]
pub(crate) enum LogLevel {
Trace,
Debug,
Info,
Warn,
Error,
}
#[cfg(test)]
mod tests {
use apollo_configuration::parse_yaml;
use super::*;
#[test]
fn parse_minimal_config() {
let config: OpenTelemetryConfig = parse_yaml("{}", &Default::default()).unwrap();
assert!(config.disabled.is_none());
}
#[test]
fn parse_disabled_config() {
let config: OpenTelemetryConfig = parse_yaml(
indoc::indoc! {"
disabled: true
"},
&Default::default(),
)
.unwrap();
assert_eq!(config.disabled, Some(true));
}
#[test]
fn parse_full_config() {
let config: OpenTelemetryConfig = parse_yaml(
indoc::indoc! {"
file_format: '1.0-rc.1'
disabled: false
log_level: info
attribute_limits:
attribute_count_limit: 128
attribute_value_length_limit: 1024
resource:
attributes:
- name: service.name
value: my-service
propagator:
composite:
- tracecontext
- baggage
tracer_provider:
processors:
- batch:
exporter:
console: {}
sampler: always_on
limits:
attribute_count_limit: 128
meter_provider:
readers:
- periodic:
exporter:
console: {}
logger_provider:
processors:
- batch:
exporter:
console: {}
"},
&Default::default(),
)
.unwrap();
assert_eq!(config.file_format, Some("1.0-rc.1".to_string()));
assert_eq!(config.disabled, Some(false));
assert!(config.log_level.is_some());
}
#[test]
fn json_schema() {
insta::assert_json_snapshot!(apollo_configuration::export_json_schema::<
OpenTelemetryConfig,
>());
}
}