mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
8660ad6c64
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"
/>
47 lines
1.4 KiB
Rust
47 lines
1.4 KiB
Rust
use thiserror::Error;
|
|
|
|
pub type Result<T> = std::result::Result<T, MetricsError>;
|
|
|
|
#[derive(Debug, Error)]
|
|
pub enum MetricsError {
|
|
// Metrics.
|
|
#[error("metric name cannot be empty")]
|
|
EmptyMetricName,
|
|
#[error("metric name contains invalid characters: {name}")]
|
|
InvalidMetricName { name: String },
|
|
#[error("{label} cannot be empty")]
|
|
EmptyTagComponent { label: String },
|
|
#[error("{label} contains invalid characters: {value}")]
|
|
InvalidTagComponent { label: String, value: String },
|
|
|
|
#[error("metrics exporter is disabled")]
|
|
ExporterDisabled,
|
|
|
|
#[error("counter increment must be non-negative for {name}: {inc}")]
|
|
NegativeCounterIncrement { name: String, inc: i64 },
|
|
|
|
#[error("failed to build OTLP metrics exporter")]
|
|
ExporterBuild {
|
|
#[source]
|
|
source: opentelemetry_otlp::ExporterBuildError,
|
|
},
|
|
|
|
#[error("invalid OTLP metrics configuration: {message}")]
|
|
InvalidConfig { message: String },
|
|
|
|
#[error("failed to flush or shutdown metrics provider")]
|
|
ProviderShutdown {
|
|
#[source]
|
|
source: opentelemetry_sdk::error::OTelSdkError,
|
|
},
|
|
|
|
#[error("runtime metrics snapshot reader is not enabled")]
|
|
RuntimeSnapshotUnavailable,
|
|
|
|
#[error("failed to collect runtime metrics snapshot from metrics reader")]
|
|
RuntimeSnapshotCollect {
|
|
#[source]
|
|
source: opentelemetry_sdk::error::OTelSdkError,
|
|
},
|
|
}
|