use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CacheConfiguration {
pub max_total_size_bytes: u64,
pub num_tiers: u32,
pub tier_size_ratios: Vec<f64>,
pub default_ttl_seconds: u64,
pub optimization_interval_seconds: u64,
pub ml_update_interval_seconds: u64,
pub enable_prefetching: bool,
pub enable_adaptive_optimization: bool,
pub monitoring_config: MonitoringConfiguration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MonitoringConfiguration {
pub enable_detailed_metrics: bool,
pub metrics_retention_days: u32,
pub alert_thresholds: AlertThresholds,
pub export_prometheus: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertThresholds {
pub min_hit_rate: f64,
pub max_latency_p99_ms: f64,
pub max_memory_utilization: f64,
pub min_cache_efficiency: f64,
}
impl Default for CacheConfiguration {
fn default() -> Self {
Self {
max_total_size_bytes: 1024 * 1024 * 1024, num_tiers: 3,
tier_size_ratios: vec![0.5, 0.3, 0.2], default_ttl_seconds: 3600, optimization_interval_seconds: 300, ml_update_interval_seconds: 900, enable_prefetching: true,
enable_adaptive_optimization: true,
monitoring_config: MonitoringConfiguration {
enable_detailed_metrics: true,
metrics_retention_days: 7,
alert_thresholds: AlertThresholds {
min_hit_rate: 0.8,
max_latency_p99_ms: 100.0,
max_memory_utilization: 0.9,
min_cache_efficiency: 0.7,
},
export_prometheus: true,
},
}
}
}