scirs2_core/advanced_distributed_computing/
monitoring.rs1use super::types::default_instant;
7use std::time::{Duration, Instant};
8
9#[derive(Debug, Clone)]
11pub struct ClusterStatistics {
12 pub total_nodes: usize,
14 pub active_nodes: usize,
16 pub total_tasks_processed: u64,
18 pub avg_task_completion_time: Duration,
20 pub cluster_throughput: f64,
22 pub resource_utilization: ClusterResourceUtilization,
24 pub fault_tolerance_metrics: FaultToleranceMetrics,
26 pub tasks_submitted: u64,
28 pub avg_submission_time: Duration,
30 pub last_update: Instant,
32}
33
34#[derive(Debug, Clone)]
36pub struct ClusterResourceUtilization {
37 pub cpu_utilization: f64,
39 pub memory_utilization: f64,
41 pub storage_utilization: f64,
43 pub network_utilization: f64,
45}
46
47#[derive(Debug, Clone)]
49pub struct FaultToleranceMetrics {
50 pub mtbf: Duration,
52 pub mttr: Duration,
54 pub availability: f64,
56 pub successful_recoveries: u64,
58}
59
60impl Default for ClusterStatistics {
62 fn default() -> Self {
63 Self {
64 total_nodes: 0,
65 active_nodes: 0,
66 total_tasks_processed: 0,
67 avg_task_completion_time: Duration::default(),
68 cluster_throughput: 0.0,
69 resource_utilization: ClusterResourceUtilization {
70 cpu_utilization: 0.0,
71 memory_utilization: 0.0,
72 storage_utilization: 0.0,
73 network_utilization: 0.0,
74 },
75 fault_tolerance_metrics: FaultToleranceMetrics {
76 mtbf: Duration::from_secs(168 * 60 * 60), mttr: Duration::from_secs(15 * 60),
78 availability: 0.999,
79 successful_recoveries: 0,
80 },
81 tasks_submitted: 0,
82 avg_submission_time: Duration::default(),
83 last_update: default_instant(),
84 }
85 }
86}