use super::types::default_instant;
use std::time::{Duration, Instant};
#[derive(Debug, Clone)]
pub struct ClusterStatistics {
pub total_nodes: usize,
pub active_nodes: usize,
pub total_tasks_processed: u64,
pub avg_task_completion_time: Duration,
pub cluster_throughput: f64,
pub resource_utilization: ClusterResourceUtilization,
pub fault_tolerance_metrics: FaultToleranceMetrics,
pub tasks_submitted: u64,
pub avg_submission_time: Duration,
pub last_update: Instant,
}
#[derive(Debug, Clone)]
pub struct ClusterResourceUtilization {
pub cpu_utilization: f64,
pub memory_utilization: f64,
pub storage_utilization: f64,
pub network_utilization: f64,
}
#[derive(Debug, Clone)]
pub struct FaultToleranceMetrics {
pub mtbf: Duration,
pub mttr: Duration,
pub availability: f64,
pub successful_recoveries: u64,
}
impl Default for ClusterStatistics {
fn default() -> Self {
Self {
total_nodes: 0,
active_nodes: 0,
total_tasks_processed: 0,
avg_task_completion_time: Duration::default(),
cluster_throughput: 0.0,
resource_utilization: ClusterResourceUtilization {
cpu_utilization: 0.0,
memory_utilization: 0.0,
storage_utilization: 0.0,
network_utilization: 0.0,
},
fault_tolerance_metrics: FaultToleranceMetrics {
mtbf: Duration::from_secs(168 * 60 * 60), mttr: Duration::from_secs(15 * 60),
availability: 0.999,
successful_recoveries: 0,
},
tasks_submitted: 0,
avg_submission_time: Duration::default(),
last_update: default_instant(),
}
}
}