#[non_exhaustive]
#[derive(Debug, Clone, Default)]
pub struct CacheMetrics {
pub hits: u64,
pub misses: u64,
pub inserts: u64,
pub updates: u64,
pub evictions: u64,
pub removals: u64,
pub current_size_bytes: usize,
pub capacity_bytes: usize,
pub entry_count: usize,
}
impl CacheMetrics {
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 utilization(&self) -> f64 {
if self.capacity_bytes == 0 {
0.0
} else {
self.current_size_bytes as f64 / self.capacity_bytes as f64
}
}
pub fn total_accesses(&self) -> u64 {
self.hits + self.misses
}
pub fn total_writes(&self) -> u64 {
self.inserts + self.updates
}
}