diff --git a/src/observability/metrics.rs b/src/observability/metrics.rs index 5b8f225..c34bc82 100644 --- a/src/observability/metrics.rs +++ b/src/observability/metrics.rs @@ -49,6 +49,7 @@ pub fn init_recorder() -> Option { let builder = PrometheusBuilder::new(); match builder.install_recorder() { Ok(handle) => { + register_baseline_counters(); tracing::info!("Prometheus metrics recorder installed"); Some(handle) } @@ -61,6 +62,13 @@ pub fn init_recorder() -> Option { .clone() } +fn register_baseline_counters() { + metrics::counter!(MESSAGE_PROCESSING_ERRORS).absolute(0); + metrics::counter!(AGENT_ITERATIONS).absolute(0); + metrics::counter!(LLM_TOKENS_USED).absolute(0); + metrics::counter!(TOOL_EXECUTION_TOTAL).absolute(0); +} + // ============================================================================ // MetricsObserver — 桥接 ObserverEvent 到 metrics 宏 // ============================================================================ @@ -156,3 +164,20 @@ pub fn default_observer() -> Arc { pub fn record_message_processing_error() { metrics::counter!(MESSAGE_PROCESSING_ERRORS).increment(1); } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn metrics_render_is_not_blank_right_after_init() { + let Some(handle) = init_recorder() else { + return; + }; + let rendered = handle.render(); + assert!( + rendered.contains(MESSAGE_PROCESSING_ERRORS), + "expected baseline counters in render output, got: {rendered:?}" + ); + } +}