mirror of
https://github.com/openai/codex.git
synced 2026-04-29 17:06:51 +00:00
Summary of changes:
- Adds a new feature flag: runtime_metrics
- Declared in core/src/features.rs
- Added to core/config.schema.json
- Wired into OTEL init in core/src/otel_init.rs
- Enables on-demand runtime metric snapshots in OTEL
- Adds runtime_metrics: bool to otel/src/config.rs
- Enables experimental custom reader features in otel/Cargo.toml
- Adds snapshot/reset/summary APIs in:
- otel/src/lib.rs
- otel/src/metrics/client.rs
- otel/src/metrics/config.rs
- otel/src/metrics/error.rs
- Defines metric names and a runtime summary builder
- New files:
- otel/src/metrics/names.rs
- otel/src/metrics/runtime_metrics.rs
- Summarizes totals for:
- Tool calls
- API requests
- SSE/streaming events
- Instruments metrics collection in OTEL manager
- otel/src/traces/otel_manager.rs now records:
- API call counts + durations
- SSE event counts + durations (success/failure)
- Tool call metrics now use shared constants
- Surfaces runtime metrics in the TUI
- Resets runtime metrics at turn start in tui/src/chatwidget.rs
- Displays metrics in the final separator line in
tui/src/history_cell.rs
- Adds tests
- New OTEL tests:
- otel/tests/suite/snapshot.rs
- otel/tests/suite/runtime_summary.rs
- New TUI test:
- final_message_separator_includes_runtime_metrics in
tui/src/history_cell.rs
Scope:
- 19 files changed
- ~652 insertions, 38 deletions
<img width="922" height="169" alt="Screenshot 2026-01-30 at 4 11 34 PM"
src="https://github.com/user-attachments/assets/1efd754d-a16d-4564-83a5-f4442fd2f998"
/>
77 lines
2.2 KiB
Rust
77 lines
2.2 KiB
Rust
use std::collections::HashMap;
|
|
use std::path::PathBuf;
|
|
|
|
use codex_utils_absolute_path::AbsolutePathBuf;
|
|
|
|
pub(crate) const STATSIG_OTLP_HTTP_ENDPOINT: &str = "https://ab.chatgpt.com/otlp/v1/metrics";
|
|
pub(crate) const STATSIG_API_KEY_HEADER: &str = "statsig-api-key";
|
|
pub(crate) const STATSIG_API_KEY: &str = "client-MkRuleRQBd6qakfnDYqJVR9JuXcY57Ljly3vi5JVUIO";
|
|
|
|
pub(crate) fn resolve_exporter(exporter: &OtelExporter) -> OtelExporter {
|
|
match exporter {
|
|
OtelExporter::Statsig => {
|
|
if cfg!(test) || cfg!(feature = "disable-default-metrics-exporter") {
|
|
return OtelExporter::None;
|
|
}
|
|
|
|
OtelExporter::OtlpHttp {
|
|
endpoint: STATSIG_OTLP_HTTP_ENDPOINT.to_string(),
|
|
headers: HashMap::from([(
|
|
STATSIG_API_KEY_HEADER.to_string(),
|
|
STATSIG_API_KEY.to_string(),
|
|
)]),
|
|
protocol: OtelHttpProtocol::Json,
|
|
tls: None,
|
|
}
|
|
}
|
|
_ => exporter.clone(),
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub struct OtelSettings {
|
|
pub environment: String,
|
|
pub service_name: String,
|
|
pub service_version: String,
|
|
pub codex_home: PathBuf,
|
|
pub exporter: OtelExporter,
|
|
pub trace_exporter: OtelExporter,
|
|
pub metrics_exporter: OtelExporter,
|
|
pub runtime_metrics: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub enum OtelHttpProtocol {
|
|
/// HTTP protocol with binary protobuf
|
|
Binary,
|
|
/// HTTP protocol with JSON payload
|
|
Json,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default)]
|
|
pub struct OtelTlsConfig {
|
|
pub ca_certificate: Option<AbsolutePathBuf>,
|
|
pub client_certificate: Option<AbsolutePathBuf>,
|
|
pub client_private_key: Option<AbsolutePathBuf>,
|
|
}
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub enum OtelExporter {
|
|
None,
|
|
/// Statsig metrics ingestion exporter using Codex-internal defaults.
|
|
///
|
|
/// This is intended for metrics only.
|
|
Statsig,
|
|
OtlpGrpc {
|
|
endpoint: String,
|
|
headers: HashMap<String, String>,
|
|
tls: Option<OtelTlsConfig>,
|
|
},
|
|
OtlpHttp {
|
|
endpoint: String,
|
|
headers: HashMap<String, String>,
|
|
protocol: OtelHttpProtocol,
|
|
tls: Option<OtelTlsConfig>,
|
|
},
|
|
}
|