apollo-opentelemetry 0.8.0

OpenTelemetry configuration types for Apollo platform
Documentation
//! Datadog exporter configuration.

use apollo_configuration::configuration;
use apollo_configuration::types::Url;
use apollo_redaction::Redacted;

/// Datadog exporter configuration.
#[configuration]
pub(crate) struct DatadogNativeExporterConfig {
    /// Datadog API key.
    #[config(required)]
    pub(crate) api_key: Redacted<String>,

    /// Datadog OTLP endpoint URL.
    ///
    /// See relevant Datadog documentation
    /// https://docs.datadoghq.com/opentelemetry/setup/otlp_ingest/metrics
    /// https://docs.datadoghq.com/opentelemetry/setup/otlp_ingest/logs
    /// https://docs.datadoghq.com/opentelemetry/setup/otlp_ingest_in_the_agent
    #[config(required)]
    pub(crate) endpoint: Url,

    /// Service name override.
    pub(crate) service: Option<String>,

    /// Environment name.
    pub(crate) env: Option<String>,

    /// Version string.
    pub(crate) version: Option<String>,

    /// Custom tags to add to all spans.
    pub(crate) tags: Vec<String>,
}

#[cfg(test)]
mod tests {
    use apollo_configuration::parse_yaml;

    use crate::config::OpenTelemetryConfig;

    #[test]
    fn parse_datadog_exporter() {
        let config: OpenTelemetryConfig = parse_yaml(
            indoc::indoc! {"
                tracer_provider:
                  processors:
                    - batch:
                        exporter:
                          datadog:
                            api_key: test-api-key
                            endpoint: https://trace-otlp.intake.datadoghq.eu/api/v0.2/traces
            "},
            &Default::default(),
        )
        .unwrap();

        assert!(!config.tracer_provider.processors.is_empty());
    }
}