pub trait CoreMetricsRecorder {
fn record_get_hit(&mut self);
fn record_get_miss(&mut self);
fn record_insert_call(&mut self);
fn record_insert_new(&mut self);
fn record_insert_update(&mut self);
fn record_evict_call(&mut self);
fn record_evicted_entry(&mut self);
fn record_clear(&mut self);
}
pub trait FifoMetricsRecorder: CoreMetricsRecorder {
fn record_evict_scan_step(&mut self);
fn record_stale_skip(&mut self);
fn record_pop_oldest_call(&mut self);
fn record_pop_oldest_found(&mut self);
fn record_pop_oldest_empty_or_stale(&mut self);
}
pub trait FifoMetricsReadRecorder {
fn record_peek_oldest_call(&self);
fn record_peek_oldest_found(&self);
fn record_age_rank_call(&self);
fn record_age_rank_found(&self);
fn record_age_rank_scan_step(&self);
}
pub trait LruMetricsRecorder: CoreMetricsRecorder {
fn record_pop_lru_call(&mut self);
fn record_pop_lru_found(&mut self);
fn record_peek_lru_call(&mut self);
fn record_peek_lru_found(&mut self);
fn record_touch_call(&mut self);
fn record_touch_found(&mut self);
fn record_recency_rank_call(&mut self);
fn record_recency_rank_found(&mut self);
fn record_recency_rank_scan_step(&mut self);
}
pub trait LruMetricsReadRecorder {
fn record_peek_lru_call(&self);
fn record_peek_lru_found(&self);
fn record_recency_rank_call(&self);
fn record_recency_rank_found(&self);
fn record_recency_rank_scan_step(&self);
}
pub trait LfuMetricsRecorder: CoreMetricsRecorder {
fn record_pop_lfu_call(&mut self);
fn record_pop_lfu_found(&mut self);
fn record_peek_lfu_call(&mut self);
fn record_peek_lfu_found(&mut self);
fn record_frequency_call(&mut self);
fn record_frequency_found(&mut self);
fn record_reset_frequency_call(&mut self);
fn record_reset_frequency_found(&mut self);
fn record_increment_frequency_call(&mut self);
fn record_increment_frequency_found(&mut self);
}
pub trait LfuMetricsReadRecorder {
fn record_peek_lfu_call(&self);
fn record_peek_lfu_found(&self);
fn record_frequency_call(&self);
fn record_frequency_found(&self);
}
pub trait LruKMetricsRecorder: LruMetricsRecorder {
fn record_pop_lru_k_call(&mut self);
fn record_pop_lru_k_found(&mut self);
fn record_peek_lru_k_call(&mut self);
fn record_peek_lru_k_found(&mut self);
fn record_k_distance_call(&mut self);
fn record_k_distance_found(&mut self);
fn record_k_distance_rank_call(&mut self);
fn record_k_distance_rank_found(&mut self);
fn record_k_distance_rank_scan_step(&mut self);
}
pub trait LruKMetricsReadRecorder {
fn record_peek_lru_k_call(&self);
fn record_peek_lru_k_found(&self);
fn record_k_distance_call(&self);
fn record_k_distance_found(&self);
fn record_k_distance_rank_call(&self);
fn record_k_distance_rank_found(&self);
fn record_k_distance_rank_scan_step(&self);
}
pub trait MetricsSnapshotProvider<S> {
fn snapshot(&self) -> S;
}
pub trait MetricsReset {
fn reset_metrics(&self);
}
pub trait MetricsExporter<S> {
fn export(&self, snapshot: &S);
}
#[derive(Debug, Default, Clone, Copy)]
pub struct CoreMetricsSnapshot {
pub get_calls: u64,
pub get_hits: u64,
pub get_misses: u64,
pub insert_calls: u64,
pub insert_updates: u64,
pub insert_new: u64,
pub evict_calls: u64,
pub evicted_entries: u64,
}
#[derive(Debug, Default, Clone, Copy)]
pub struct FifoMetricsSnapshot {
pub core: CoreMetricsSnapshot,
pub pop_oldest_calls: u64,
pub pop_oldest_found: u64,
pub pop_oldest_empty_or_stale: u64,
pub peek_oldest_calls: u64,
pub peek_oldest_found: u64,
pub age_rank_calls: u64,
pub age_rank_found: u64,
pub age_rank_scan_steps: u64,
}