use std::collections::HashMap;
pub trait Metrics: Send + Sync {
fn record_latency(&self, operation: &str, duration_ms: f64);
fn increment_counter(&self, name: &str, delta: u64);
fn record_gauge(&self, name: &str, value: f64);
}
pub struct NoopMetrics;
impl Metrics for NoopMetrics {
fn record_latency(&self, _operation: &str, _duration_ms: f64) {}
fn increment_counter(&self, _name: &str, _delta: u64) {}
fn record_gauge(&self, _name: &str, _value: f64) {}
}
#[derive(Debug, Clone, Default, serde::Serialize)]
pub struct MetricsSnapshot {
pub latencies: HashMap<String, LatencyStats>,
pub counters: HashMap<String, u64>,
pub gauges: HashMap<String, f64>,
}
#[derive(Debug, Clone, Default, serde::Serialize)]
pub struct LatencyStats {
pub count: u64,
pub total_ms: f64,
pub min_ms: f64,
pub max_ms: f64,
pub p50_ms: f64,
pub p95_ms: f64,
pub p99_ms: f64,
}
#[cfg(test)]
#[path = "tests/metrics_tests.rs"]
mod tests;