apollo-opentelemetry 0.8.0

OpenTelemetry configuration types for Apollo platform
Documentation
//! Honeycomb OTLP exporter configuration.
//!
//! See [Honeycomb OpenTelemetry](https://docs.honeycomb.io/send-data/opentelemetry/)
//! for details.

use apollo_configuration::configuration;
use apollo_configuration::types::{HeaderValue, Url};
use apollo_redaction::Redacted;

use super::otlp::{Compression, TlsConfig};

/// Honeycomb HTTP exporter configuration.
#[configuration]
pub(crate) struct HoneycombHttpExporterConfig {
    /// Honeycomb API key.
    #[config(required)]
    pub(crate) api_key: Redacted<HeaderValue>,

    /// Honeycomb OTLP endpoint URL.
    ///
    /// See [Honeycomb endpoints](https://docs.honeycomb.io/send-data/opentelemetry/#using-the-honeycomb-opentelemetry-endpoint)
    /// for endpoint URLs by region:
    /// - US: `https://api.honeycomb.io`
    /// - EU: `https://api.eu1.honeycomb.io`
    #[config(required)]
    pub(crate) endpoint: Url,

    /// Dataset name (required for Honeycomb Classic).
    pub(crate) dataset: Option<HeaderValue>,

    /// Compression algorithm.
    pub(crate) compression: Compression,

    /// Export timeout in milliseconds.
    #[config(default = 10000)]
    pub(crate) timeout: u64,

    /// TLS configuration.
    pub(crate) tls: Option<TlsConfig>,
}

/// Honeycomb gRPC exporter configuration.
#[configuration]
pub(crate) struct HoneycombGrpcExporterConfig {
    /// Honeycomb API key.
    #[config(required)]
    pub(crate) api_key: Redacted<HeaderValue>,

    /// Honeycomb OTLP endpoint URL.
    ///
    /// See [Honeycomb endpoints](https://docs.honeycomb.io/send-data/opentelemetry/)
    /// for endpoint URLs by region:
    /// - US: `https://api.honeycomb.io:443`
    /// - EU: `https://api.eu1.honeycomb.io:443`
    #[config(required)]
    pub(crate) endpoint: Url,

    /// Dataset name (required for Honeycomb Classic).
    pub(crate) dataset: Option<HeaderValue>,

    /// Compression algorithm.
    pub(crate) compression: Compression,

    /// Export timeout in milliseconds.
    #[config(default = 10000)]
    pub(crate) timeout: u64,

    /// TLS configuration.
    pub(crate) tls: Option<TlsConfig>,
}

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

    use crate::config::OpenTelemetryConfig;

    #[test]
    fn parse_honeycomb_http_exporter() {
        let config: OpenTelemetryConfig = parse_yaml(
            indoc::indoc! {"
                tracer_provider:
                  processors:
                    - batch:
                        exporter:
                          honeycomb_http:
                            api_key: test-api-key
                            endpoint: https://api.eu1.honeycomb.io
                            dataset: my-dataset
            "},
            &Default::default(),
        )
        .unwrap();

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