use serde::{Deserialize, Serialize};
use super::cache_manager::CacheManager;
#[derive(Debug, Clone)]
pub struct CachePerformanceStats {
pub hits: u64,
pub misses: u64,
pub writes: u64,
pub deletes: u64,
pub total_query_latency_ns: u64,
pub total_write_latency_ns: u64,
pub query_count: u64,
pub write_count: u64,
}
impl CachePerformanceStats {
pub fn new() -> Self {
Self {
hits: 0,
misses: 0,
writes: 0,
deletes: 0,
total_query_latency_ns: 0,
total_write_latency_ns: 0,
query_count: 0,
write_count: 0,
}
}
pub fn hit_rate(&self) -> f64 {
let total = self.hits + self.misses;
if total == 0 {
0.0
} else {
self.hits as f64 / total as f64
}
}
pub fn avg_query_latency_ms(&self) -> f64 {
if self.query_count == 0 {
0.0
} else {
(self.total_query_latency_ns as f64 / self.query_count as f64) / 1_000_000.0
}
}
pub fn avg_write_latency_ms(&self) -> f64 {
if self.write_count == 0 {
0.0
} else {
(self.total_write_latency_ns as f64 / self.write_count as f64) / 1_000_000.0
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CacheStats {
pub hits: u64,
pub misses: u64,
pub hit_rate: f64,
pub entries: usize,
pub memory_usage_bytes: usize,
pub disk_usage_bytes: usize,
}
impl Default for CacheStats {
fn default() -> Self {
Self {
hits: 0,
misses: 0,
hit_rate: 0.0,
entries: 0,
memory_usage_bytes: 0,
disk_usage_bytes: 0,
}
}
}