From 0fa45fbca4a33a4325bee1177c75f22c465e294e Mon Sep 17 00:00:00 2001 From: alexsong-oai Date: Thu, 22 Jan 2026 18:46:14 -0800 Subject: [PATCH] feat: add session source as otel metadata tag (#9720) Add session.source and user.account_id as global OTEL metric tags to identify client surface and user. --- codex-rs/otel/src/lib.rs | 8 +++++++- codex-rs/otel/src/traces/otel_manager.rs | 3 ++- codex-rs/otel/tests/suite/manager_metrics.rs | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/codex-rs/otel/src/lib.rs b/codex-rs/otel/src/lib.rs index 32540d107..93975cbf9 100644 --- a/codex-rs/otel/src/lib.rs +++ b/codex-rs/otel/src/lib.rs @@ -31,6 +31,7 @@ pub struct OtelEventMetadata { pub(crate) auth_mode: Option, pub(crate) account_id: Option, pub(crate) account_email: Option, + pub(crate) session_source: String, pub(crate) model: String, pub(crate) slug: String, pub(crate) log_user_prompts: bool, @@ -149,8 +150,13 @@ 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, "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 0847fd882..7ce411970 100644 --- a/codex-rs/otel/src/traces/otel_manager.rs +++ b/codex-rs/otel/src/traces/otel_manager.rs @@ -40,7 +40,7 @@ impl OtelManager { auth_mode: Option, log_user_prompts: bool, terminal_type: String, - _session_source: SessionSource, + session_source: SessionSource, ) -> OtelManager { Self { metadata: OtelEventMetadata { @@ -48,6 +48,7 @@ impl OtelManager { auth_mode: auth_mode.map(|m| m.to_string()), account_id, account_email, + session_source: session_source.to_string(), model: model.to_owned(), slug: slug.to_owned(), log_user_prompts, diff --git a/codex-rs/otel/tests/suite/manager_metrics.rs b/codex-rs/otel/tests/suite/manager_metrics.rs index 1497a5f84..ad98543bc 100644 --- a/codex-rs/otel/tests/suite/manager_metrics.rs +++ b/codex-rs/otel/tests/suite/manager_metrics.rs @@ -55,6 +55,7 @@ fn manager_attaches_metadata_tags_to_metrics() -> Result<()> { ("auth_mode".to_string(), AuthMode::ApiKey.to_string()), ("model".to_string(), "gpt-5.1".to_string()), ("service".to_string(), "codex-cli".to_string()), + ("session_source".to_string(), "cli".to_string()), ("source".to_string(), "tui".to_string()), ]); assert_eq!(attrs, expected);