1use std::time::Duration;
4
5#[derive(Debug, Clone)]
7pub struct PerformanceMonitoringConfig {
8 pub enable_monitoring: bool,
10 pub metrics: Vec<PerformanceMetric>,
12 pub monitoring_interval: Duration,
14 pub history_retention: Duration,
16 pub anomaly_detection: AnomalyDetectionConfig,
18 pub performance_prediction: PerformancePredictionConfig,
20}
21
22#[derive(Debug, Clone, PartialEq)]
24pub enum PerformanceMetric {
25 ExecutionTime,
26 Fidelity,
27 GateErrorRate,
28 DecoherenceRate,
29 ThroughputRate,
30 ResourceUtilization,
31 EnergyConsumption,
32 SuccessRate,
33 LatencyVariance,
34 CustomMetric(String),
35}
36
37#[derive(Debug, Clone)]
39pub struct AnomalyDetectionConfig {
40 pub enable_detection: bool,
42 pub detection_algorithms: Vec<AnomalyDetectionAlgorithm>,
44 pub sensitivity: f64,
46 pub baseline_window: Duration,
48 pub response_config: AnomalyResponseConfig,
50}
51
52#[derive(Debug, Clone, PartialEq)]
54pub enum AnomalyDetectionAlgorithm {
55 StatisticalOutlier,
56 MachineLearningBased,
57 ThresholdBased,
58 ChangePointDetection,
59 ClusteringBased,
60 EnsembleBased,
61}
62
63#[derive(Debug, Clone)]
65pub struct AnomalyResponseConfig {
66 pub response_strategies: Vec<AnomalyResponse>,
68 pub response_delay: Duration,
70 pub escalation_thresholds: EscalationThresholds,
72 pub notification_settings: NotificationSettings,
74}
75
76#[derive(Debug, Clone, PartialEq)]
78pub enum AnomalyResponse {
79 LogOnly,
80 RecalibrateDevice,
81 SwitchOptimizationStrategy,
82 IncreaseErrorMitigation,
83 NotifyOperator,
84 HaltExecution,
85 AutomaticRecovery,
86}
87
88#[derive(Debug, Clone)]
90pub struct EscalationThresholds {
91 pub warning_threshold: f64,
93 pub critical_threshold: f64,
95 pub emergency_threshold: f64,
97 pub escalation_timeouts: EscalationTimeouts,
99}
100
101#[derive(Debug, Clone)]
103pub struct EscalationTimeouts {
104 pub warning_timeout: Duration,
106 pub critical_timeout: Duration,
108 pub emergency_timeout: Duration,
110}
111
112#[derive(Debug, Clone)]
114pub struct NotificationSettings {
115 pub enable_notifications: bool,
117 pub notification_channels: Vec<NotificationChannel>,
119 pub frequency_limits: NotificationFrequencyLimits,
121 pub content_config: NotificationContentConfig,
123}
124
125#[derive(Debug, Clone, PartialEq)]
127pub enum NotificationChannel {
128 Email,
129 SMS,
130 Dashboard,
131 API,
132 Webhook,
133 Log,
134}
135
136#[derive(Debug, Clone)]
138pub struct NotificationFrequencyLimits {
139 pub max_per_hour: usize,
141 pub min_interval: Duration,
143 pub burst_allowance: usize,
145}
146
147#[derive(Debug, Clone)]
149pub struct NotificationContentConfig {
150 pub include_performance_data: bool,
152 pub include_suggested_actions: bool,
154 pub include_historical_context: bool,
156 pub verbosity_level: VerbosityLevel,
158}
159
160#[derive(Debug, Clone, PartialEq)]
162pub enum VerbosityLevel {
163 Minimal,
164 Standard,
165 Detailed,
166 Comprehensive,
167}
168
169#[derive(Debug, Clone)]
171pub struct PerformancePredictionConfig {
172 pub enable_prediction: bool,
174 pub prediction_models: Vec<PredictionModelType>,
176 pub prediction_horizon: Duration,
178 pub model_update_frequency: Duration,
180 pub accuracy_requirements: AccuracyRequirements,
182}
183
184#[derive(Debug, Clone, PartialEq)]
186pub enum PredictionModelType {
187 LinearRegression,
188 ARIMA,
189 LSTM,
190 GaussianProcess,
191 RandomForest,
192 EnsembleModel,
193}
194
195#[derive(Debug, Clone)]
197pub struct AccuracyRequirements {
198 pub min_accuracy: f64,
200 pub confidence_interval: f64,
202 pub max_prediction_error: f64,
204 pub validation_requirements: ValidationRequirements,
206}
207
208#[derive(Debug, Clone)]
210pub struct ValidationRequirements {
211 pub validation_method: ValidationMethod,
213 pub validation_frequency: Duration,
215 pub cross_validation_folds: usize,
217 pub test_data_percentage: f64,
219}
220
221#[derive(Debug, Clone, PartialEq)]
223pub enum ValidationMethod {
224 CrossValidation,
225 TimeSeriesSplit,
226 WalkForward,
227 Bootstrap,
228 HoldOut,
229}
230
231impl Default for PerformanceMonitoringConfig {
232 fn default() -> Self {
233 Self {
234 enable_monitoring: true,
235 metrics: vec![
236 PerformanceMetric::ExecutionTime,
237 PerformanceMetric::Fidelity,
238 PerformanceMetric::GateErrorRate,
239 PerformanceMetric::ThroughputRate,
240 ],
241 monitoring_interval: Duration::from_secs(10),
242 history_retention: Duration::from_secs(86400 * 7), anomaly_detection: AnomalyDetectionConfig::default(),
244 performance_prediction: PerformancePredictionConfig::default(),
245 }
246 }
247}
248
249impl Default for AnomalyDetectionConfig {
250 fn default() -> Self {
251 Self {
252 enable_detection: true,
253 detection_algorithms: vec![
254 AnomalyDetectionAlgorithm::StatisticalOutlier,
255 AnomalyDetectionAlgorithm::ThresholdBased,
256 ],
257 sensitivity: 0.95,
258 baseline_window: Duration::from_secs(3600), response_config: AnomalyResponseConfig::default(),
260 }
261 }
262}
263
264impl Default for AnomalyResponseConfig {
265 fn default() -> Self {
266 Self {
267 response_strategies: vec![AnomalyResponse::LogOnly, AnomalyResponse::NotifyOperator],
268 response_delay: Duration::from_secs(5),
269 escalation_thresholds: EscalationThresholds::default(),
270 notification_settings: NotificationSettings::default(),
271 }
272 }
273}
274
275impl Default for EscalationThresholds {
276 fn default() -> Self {
277 Self {
278 warning_threshold: 0.1,
279 critical_threshold: 0.05,
280 emergency_threshold: 0.01,
281 escalation_timeouts: EscalationTimeouts::default(),
282 }
283 }
284}
285
286impl Default for EscalationTimeouts {
287 fn default() -> Self {
288 Self {
289 warning_timeout: Duration::from_secs(300), critical_timeout: Duration::from_secs(60), emergency_timeout: Duration::from_secs(10), }
293 }
294}
295
296impl Default for NotificationSettings {
297 fn default() -> Self {
298 Self {
299 enable_notifications: true,
300 notification_channels: vec![NotificationChannel::Dashboard, NotificationChannel::Log],
301 frequency_limits: NotificationFrequencyLimits::default(),
302 content_config: NotificationContentConfig::default(),
303 }
304 }
305}
306
307impl Default for NotificationFrequencyLimits {
308 fn default() -> Self {
309 Self {
310 max_per_hour: 10,
311 min_interval: Duration::from_secs(60),
312 burst_allowance: 3,
313 }
314 }
315}
316
317impl Default for NotificationContentConfig {
318 fn default() -> Self {
319 Self {
320 include_performance_data: true,
321 include_suggested_actions: true,
322 include_historical_context: false,
323 verbosity_level: VerbosityLevel::Standard,
324 }
325 }
326}
327
328impl Default for PerformancePredictionConfig {
329 fn default() -> Self {
330 Self {
331 enable_prediction: true,
332 prediction_models: vec![
333 PredictionModelType::LinearRegression,
334 PredictionModelType::ARIMA,
335 ],
336 prediction_horizon: Duration::from_secs(3600), model_update_frequency: Duration::from_secs(1800), accuracy_requirements: AccuracyRequirements::default(),
339 }
340 }
341}
342
343impl Default for AccuracyRequirements {
344 fn default() -> Self {
345 Self {
346 min_accuracy: 0.8,
347 confidence_interval: 0.95,
348 max_prediction_error: 0.1,
349 validation_requirements: ValidationRequirements::default(),
350 }
351 }
352}
353
354impl Default for ValidationRequirements {
355 fn default() -> Self {
356 Self {
357 validation_method: ValidationMethod::CrossValidation,
358 validation_frequency: Duration::from_secs(3600 * 6), cross_validation_folds: 5,
360 test_data_percentage: 0.2,
361 }
362 }
363}