use serde::{Deserialize, Serialize};
use std::time::Duration;
use super::types::{AlertChannel, AllocationStrategy, MetricType};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeConfig {
pub monitoring_interval: Duration,
pub max_queue_size: usize,
pub allocation_strategy: AllocationStrategy,
pub fault_detection_sensitivity: f64,
pub analytics_config: AnalyticsConfig,
pub auto_recovery_enabled: bool,
pub alert_thresholds: AlertThresholds,
pub data_retention_period: Duration,
}
impl Default for RealtimeConfig {
fn default() -> Self {
Self {
monitoring_interval: Duration::from_millis(100),
max_queue_size: 1000,
allocation_strategy: AllocationStrategy::LoadBalanced,
fault_detection_sensitivity: 0.95,
analytics_config: AnalyticsConfig::default(),
auto_recovery_enabled: true,
alert_thresholds: AlertThresholds::default(),
data_retention_period: Duration::from_secs(24 * 3600), }
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalyticsConfig {
pub real_time_metrics: bool,
pub predictive_analytics: bool,
pub aggregation_interval: Duration,
pub analysis_depth: Duration,
pub prediction_horizon: Duration,
}
impl Default for AnalyticsConfig {
fn default() -> Self {
Self {
real_time_metrics: true,
predictive_analytics: true,
aggregation_interval: Duration::from_secs(60),
analysis_depth: Duration::from_secs(3600), prediction_horizon: Duration::from_secs(1800), }
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertThresholds {
pub cpu_threshold: f64,
pub memory_threshold: f64,
pub queue_threshold: usize,
pub error_rate_threshold: f64,
pub response_time_threshold: Duration,
pub hardware_failure_threshold: f64,
}
impl Default for AlertThresholds {
fn default() -> Self {
Self {
cpu_threshold: 0.85,
memory_threshold: 0.90,
queue_threshold: 100,
error_rate_threshold: 0.05,
response_time_threshold: Duration::from_secs(300),
hardware_failure_threshold: 0.01,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MonitorConfig {
pub monitoring_frequency: Duration,
pub metrics_to_collect: Vec<MetricType>,
pub alert_config: AlertConfig,
pub data_retention: Duration,
}
impl Default for MonitorConfig {
fn default() -> Self {
Self {
monitoring_frequency: Duration::from_secs(60),
metrics_to_collect: vec![MetricType::All],
alert_config: AlertConfig {
alerts_enabled: true,
alert_channels: vec![AlertChannel::Dashboard],
alert_rules: vec![],
escalation_policy: EscalationPolicy {
levels: vec![],
auto_acknowledge_timeout: Duration::from_secs(300),
max_level: 3,
},
},
data_retention: Duration::from_secs(7 * 24 * 3600), }
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertConfig {
pub alerts_enabled: bool,
pub alert_channels: Vec<AlertChannel>,
pub alert_rules: Vec<AlertRule>,
pub escalation_policy: EscalationPolicy,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertRule {
pub name: String,
pub condition: String,
pub threshold: f64,
pub severity: super::types::AlertSeverity,
pub cooldown: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EscalationPolicy {
pub levels: Vec<EscalationLevel>,
pub auto_acknowledge_timeout: Duration,
pub max_level: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EscalationLevel {
pub level: usize,
pub delay: Duration,
pub targets: Vec<String>,
pub channels: Vec<AlertChannel>,
}