quantrs2_tytan/advanced_performance_analysis/
monitoring.rs1use super::*;
4
5pub trait PerformanceMonitor: Send + Sync + std::fmt::Debug {
7 fn start_monitoring(&mut self) -> Result<(), AnalysisError>;
9
10 fn stop_monitoring(&mut self) -> Result<(), AnalysisError>;
12
13 fn get_current_metrics(&self) -> Result<HashMap<String, f64>, AnalysisError>;
15
16 fn get_monitor_name(&self) -> &str;
18
19 fn is_active(&self) -> bool;
21}
22
23#[derive(Debug)]
25pub struct CpuMonitor {
26 active: bool,
27}
28
29impl Default for CpuMonitor {
30 fn default() -> Self {
31 Self::new()
32 }
33}
34
35impl CpuMonitor {
36 pub const fn new() -> Self {
37 Self { active: false }
38 }
39}
40
41impl PerformanceMonitor for CpuMonitor {
42 fn start_monitoring(&mut self) -> Result<(), AnalysisError> {
43 self.active = true;
44 Ok(())
45 }
46
47 fn stop_monitoring(&mut self) -> Result<(), AnalysisError> {
48 self.active = false;
49 Ok(())
50 }
51
52 fn get_current_metrics(&self) -> Result<HashMap<String, f64>, AnalysisError> {
53 if !self.active {
54 return Err(AnalysisError::DataCollectionError(
55 "Monitor not active".to_string(),
56 ));
57 }
58
59 let mut metrics = HashMap::new();
60 metrics.insert("cpu_utilization".to_string(), 45.5); Ok(metrics)
62 }
63
64 fn get_monitor_name(&self) -> &'static str {
65 "CPU Monitor"
66 }
67
68 fn is_active(&self) -> bool {
69 self.active
70 }
71}
72
73#[derive(Debug)]
75pub struct MemoryMonitor {
76 active: bool,
77}
78
79impl Default for MemoryMonitor {
80 fn default() -> Self {
81 Self::new()
82 }
83}
84
85impl MemoryMonitor {
86 pub const fn new() -> Self {
87 Self { active: false }
88 }
89}
90
91impl PerformanceMonitor for MemoryMonitor {
92 fn start_monitoring(&mut self) -> Result<(), AnalysisError> {
93 self.active = true;
94 Ok(())
95 }
96
97 fn stop_monitoring(&mut self) -> Result<(), AnalysisError> {
98 self.active = false;
99 Ok(())
100 }
101
102 fn get_current_metrics(&self) -> Result<HashMap<String, f64>, AnalysisError> {
103 if !self.active {
104 return Err(AnalysisError::DataCollectionError(
105 "Monitor not active".to_string(),
106 ));
107 }
108
109 let mut metrics = HashMap::new();
110 metrics.insert("memory_utilization".to_string(), 65.2); Ok(metrics)
112 }
113
114 fn get_monitor_name(&self) -> &'static str {
115 "Memory Monitor"
116 }
117
118 fn is_active(&self) -> bool {
119 self.active
120 }
121}
122
123#[derive(Debug)]
125pub struct IoMonitor {
126 active: bool,
127}
128
129impl Default for IoMonitor {
130 fn default() -> Self {
131 Self::new()
132 }
133}
134
135impl IoMonitor {
136 pub const fn new() -> Self {
137 Self { active: false }
138 }
139}
140
141impl PerformanceMonitor for IoMonitor {
142 fn start_monitoring(&mut self) -> Result<(), AnalysisError> {
143 self.active = true;
144 Ok(())
145 }
146
147 fn stop_monitoring(&mut self) -> Result<(), AnalysisError> {
148 self.active = false;
149 Ok(())
150 }
151
152 fn get_current_metrics(&self) -> Result<HashMap<String, f64>, AnalysisError> {
153 if !self.active {
154 return Err(AnalysisError::DataCollectionError(
155 "Monitor not active".to_string(),
156 ));
157 }
158
159 let mut metrics = HashMap::new();
160 metrics.insert("io_utilization".to_string(), 25.8); Ok(metrics)
162 }
163
164 fn get_monitor_name(&self) -> &'static str {
165 "I/O Monitor"
166 }
167
168 fn is_active(&self) -> bool {
169 self.active
170 }
171}
172
173#[derive(Debug)]
175pub struct NetworkMonitor {
176 active: bool,
177}
178
179impl Default for NetworkMonitor {
180 fn default() -> Self {
181 Self::new()
182 }
183}
184
185impl NetworkMonitor {
186 pub const fn new() -> Self {
187 Self { active: false }
188 }
189}
190
191impl PerformanceMonitor for NetworkMonitor {
192 fn start_monitoring(&mut self) -> Result<(), AnalysisError> {
193 self.active = true;
194 Ok(())
195 }
196
197 fn stop_monitoring(&mut self) -> Result<(), AnalysisError> {
198 self.active = false;
199 Ok(())
200 }
201
202 fn get_current_metrics(&self) -> Result<HashMap<String, f64>, AnalysisError> {
203 if !self.active {
204 return Err(AnalysisError::DataCollectionError(
205 "Monitor not active".to_string(),
206 ));
207 }
208
209 let mut metrics = HashMap::new();
210 metrics.insert("network_utilization".to_string(), 15.3); Ok(metrics)
212 }
213
214 fn get_monitor_name(&self) -> &'static str {
215 "Network Monitor"
216 }
217
218 fn is_active(&self) -> bool {
219 self.active
220 }
221}