diff --git a/codex-rs/otel/src/lib.rs b/codex-rs/otel/src/lib.rs index cbedc4836..8a6d1f04f 100644 --- a/codex-rs/otel/src/lib.rs +++ b/codex-rs/otel/src/lib.rs @@ -197,13 +197,18 @@ impl OtelManager { if !self.metrics_use_metadata_tags { return Ok(Vec::new()); } - let mut tags = Vec::with_capacity(5); + let mut tags = Vec::with_capacity(6); Self::push_metadata_tag(&mut tags, "auth_mode", self.metadata.auth_mode.as_deref())?; Self::push_metadata_tag( &mut tags, "session_source", Some(self.metadata.session_source.as_str()), )?; + Self::push_metadata_tag( + &mut tags, + "originator", + Some(self.metadata.originator.as_str()), + )?; Self::push_metadata_tag(&mut tags, "model", Some(self.metadata.model.as_str()))?; Self::push_metadata_tag(&mut tags, "app.version", Some(self.metadata.app_version))?; Ok(tags) diff --git a/codex-rs/otel/src/traces/otel_manager.rs b/codex-rs/otel/src/traces/otel_manager.rs index 8c0f5d295..f50eb5dfa 100644 --- a/codex-rs/otel/src/traces/otel_manager.rs +++ b/codex-rs/otel/src/traces/otel_manager.rs @@ -16,6 +16,7 @@ use crate::metrics::names::WEBSOCKET_EVENT_DURATION_METRIC; use crate::metrics::names::WEBSOCKET_REQUEST_COUNT_METRIC; use crate::metrics::names::WEBSOCKET_REQUEST_DURATION_METRIC; use crate::otel_provider::traceparent_context_from_env; +use crate::sanitize_metric_tag_value; use chrono::SecondsFormat; use chrono::Utc; use codex_api::ApiError; @@ -77,7 +78,7 @@ impl OtelManager { auth_mode: auth_mode.map(|m| m.to_string()), account_id, account_email, - originator, + originator: sanitize_metric_tag_value(originator.as_str()), session_source: session_source.to_string(), model: model.to_owned(), slug: slug.to_owned(), diff --git a/codex-rs/otel/tests/suite/manager_metrics.rs b/codex-rs/otel/tests/suite/manager_metrics.rs index 3dbc33441..1012a1b36 100644 --- a/codex-rs/otel/tests/suite/manager_metrics.rs +++ b/codex-rs/otel/tests/suite/manager_metrics.rs @@ -58,6 +58,7 @@ fn manager_attaches_metadata_tags_to_metrics() -> Result<()> { TelemetryAuthMode::ApiKey.to_string(), ), ("model".to_string(), "gpt-5.1".to_string()), + ("originator".to_string(), "test_originator".to_string()), ("service".to_string(), "codex-cli".to_string()), ("session_source".to_string(), "cli".to_string()), ("source".to_string(), "tui".to_string()), diff --git a/codex-rs/otel/tests/suite/snapshot.rs b/codex-rs/otel/tests/suite/snapshot.rs index 0c6ef7e91..e13775af6 100644 --- a/codex-rs/otel/tests/suite/snapshot.rs +++ b/codex-rs/otel/tests/suite/snapshot.rs @@ -113,6 +113,7 @@ fn manager_snapshot_metrics_collects_without_shutdown() -> Result<()> { TelemetryAuthMode::ApiKey.to_string(), ), ("model".to_string(), "gpt-5.1".to_string()), + ("originator".to_string(), "test_originator".to_string()), ("service".to_string(), "codex-cli".to_string()), ("session_source".to_string(), "cli".to_string()), ("success".to_string(), "true".to_string()),