Files
codex/codex-rs/core/src/telemetry_init.rs
T
2025-09-19 14:43:25 -07:00

56 lines
1.8 KiB
Rust

use opentelemetry_sdk::trace::Tracer;
use crate::config::Config;
use crate::config_types::TelemetryExporterKind as Kind;
use codex_telemetry as telemetry;
/// Build an OpenTelemetry tracer and guard from the app Config.
///
/// Returns `None` when telemetry is disabled.
pub fn build_otel_layer_from_config(
config: &Config,
service_name: &str,
service_version: &str,
) -> Option<(telemetry::Guard, Tracer)> {
let exporter = match config.telemetry.exporter {
Kind::None => telemetry::Exporter::None,
Kind::OtlpFile => telemetry::Exporter::OtlpFile {
rotate_mb: config.telemetry.rotate_mb,
},
Kind::OtlpHttp => telemetry::Exporter::OtlpHttp {
endpoint: config
.telemetry
.endpoint
.clone()
.unwrap_or_else(|| "http://localhost:4318".to_string()),
headers: config
.telemetry
.headers
.iter()
.map(|(k, v)| (k.clone(), v.clone()))
.collect(),
},
Kind::OtlpGrpc => telemetry::Exporter::OtlpGrpc {
endpoint: config
.telemetry
.endpoint
.clone()
.unwrap_or_else(|| "http://localhost:4317".to_string()),
headers: config
.telemetry
.headers
.iter()
.map(|(k, v)| (k.clone(), v.clone()))
.collect(),
},
};
telemetry::build_layer(&telemetry::Settings {
enabled: config.telemetry.enabled,
exporter,
service_name: service_name.to_string(),
service_version: service_version.to_string(),
codex_home: Some(config.codex_home.clone()),
})
}