mirror of
https://github.com/openai/codex.git
synced 2026-10-21 17:48:44 +00:00
Fixes distributed trace continuity across exec-server JSON-RPC HTTP egress by adding an executor client span and injecting its W3C context through a reusable `codex-otel` helper. This preserves the caller trace across core/tool → executor → provider/MCP instead of dropping parentage at raw reqwest. Note that this doesn't include the websocket path, which is needed to really get the full story but at least we cover the basic http path with this change.
81 lines
2.8 KiB
Rust
81 lines
2.8 KiB
Rust
pub(crate) mod config;
|
|
mod events;
|
|
pub(crate) mod metrics;
|
|
pub(crate) mod provider;
|
|
pub(crate) mod trace_context;
|
|
|
|
mod otlp;
|
|
mod targets;
|
|
|
|
use crate::metrics::Result as MetricsResult;
|
|
use codex_protocol::auth::AuthMode;
|
|
use serde::Serialize;
|
|
use strum_macros::Display;
|
|
|
|
pub use crate::config::OtelExporter;
|
|
pub use crate::config::OtelHttpProtocol;
|
|
pub use crate::config::OtelSettings;
|
|
pub use crate::config::OtelTlsConfig;
|
|
pub use crate::config::StatsigMetricsSettings;
|
|
pub use crate::config::validate_span_attributes;
|
|
pub use crate::events::session_telemetry::AuthEnvTelemetryMetadata;
|
|
pub use crate::events::session_telemetry::SessionTelemetry;
|
|
pub use crate::events::session_telemetry::SessionTelemetryMetadata;
|
|
pub use crate::metrics::runtime_metrics::RuntimeMetricTotals;
|
|
pub use crate::metrics::runtime_metrics::RuntimeMetricsSummary;
|
|
pub use crate::metrics::timer::Timer;
|
|
pub use crate::metrics::*;
|
|
pub use crate::provider::OtelProvider;
|
|
pub use crate::trace_context::context_from_w3c_trace_context;
|
|
pub use crate::trace_context::current_span_trace_id;
|
|
pub use crate::trace_context::current_span_w3c_trace_context;
|
|
pub use crate::trace_context::inject_span_w3c_trace_headers;
|
|
pub use crate::trace_context::set_parent_from_context;
|
|
pub use crate::trace_context::set_parent_from_w3c_trace_context;
|
|
pub use crate::trace_context::span_w3c_trace_context;
|
|
pub use crate::trace_context::traceparent_context_from_env;
|
|
pub use crate::trace_context::validate_tracestate_entries;
|
|
pub use crate::trace_context::validate_tracestate_member;
|
|
pub use codex_utils_string::sanitize_metric_tag_value;
|
|
|
|
#[derive(Debug, Clone, Serialize, Display)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum ToolDecisionSource {
|
|
AutomatedReviewer,
|
|
Config,
|
|
User,
|
|
}
|
|
|
|
/// Coarsens the authentication domain into the dimensions used by telemetry.
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Display)]
|
|
pub enum TelemetryAuthMode {
|
|
ApiKey,
|
|
Chatgpt,
|
|
}
|
|
|
|
impl From<AuthMode> for TelemetryAuthMode {
|
|
fn from(mode: AuthMode) -> Self {
|
|
match mode {
|
|
AuthMode::ApiKey | AuthMode::BedrockApiKey => Self::ApiKey,
|
|
AuthMode::Chatgpt
|
|
| AuthMode::ChatgptAuthTokens
|
|
| AuthMode::AgentIdentity
|
|
| AuthMode::PersonalAccessToken => Self::Chatgpt,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Start a metrics timer using the globally installed metrics client.
|
|
pub fn start_global_timer(name: &str, tags: &[(&str, &str)]) -> MetricsResult<Timer> {
|
|
let Some(metrics) = crate::metrics::global() else {
|
|
return Err(MetricsError::ExporterDisabled);
|
|
};
|
|
metrics.start_timer(name, tags)
|
|
}
|
|
|
|
/// Returns the resolved Statsig metrics settings for the globally installed
|
|
/// OTEL metrics client, if the active metrics exporter is Statsig.
|
|
pub fn global_statsig_metrics_settings() -> Option<StatsigMetricsSettings> {
|
|
crate::metrics::global_statsig_settings()
|
|
}
|