use std::time::Duration;
#[derive(Debug, Clone)]
pub struct PerformanceMonitoringConfig {
pub enable_monitoring: bool,
pub metrics: Vec<PerformanceMetric>,
pub monitoring_interval: Duration,
pub history_retention: Duration,
pub anomaly_detection: AnomalyDetectionConfig,
pub performance_prediction: PerformancePredictionConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PerformanceMetric {
ExecutionTime,
Fidelity,
GateErrorRate,
DecoherenceRate,
ThroughputRate,
ResourceUtilization,
EnergyConsumption,
SuccessRate,
LatencyVariance,
CustomMetric(String),
}
#[derive(Debug, Clone)]
pub struct AnomalyDetectionConfig {
pub enable_detection: bool,
pub detection_algorithms: Vec<AnomalyDetectionAlgorithm>,
pub sensitivity: f64,
pub baseline_window: Duration,
pub response_config: AnomalyResponseConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AnomalyDetectionAlgorithm {
StatisticalOutlier,
MachineLearningBased,
ThresholdBased,
ChangePointDetection,
ClusteringBased,
EnsembleBased,
}
#[derive(Debug, Clone)]
pub struct AnomalyResponseConfig {
pub response_strategies: Vec<AnomalyResponse>,
pub response_delay: Duration,
pub escalation_thresholds: EscalationThresholds,
pub notification_settings: NotificationSettings,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AnomalyResponse {
LogOnly,
RecalibrateDevice,
SwitchOptimizationStrategy,
IncreaseErrorMitigation,
NotifyOperator,
HaltExecution,
AutomaticRecovery,
}
#[derive(Debug, Clone)]
pub struct EscalationThresholds {
pub warning_threshold: f64,
pub critical_threshold: f64,
pub emergency_threshold: f64,
pub escalation_timeouts: EscalationTimeouts,
}
#[derive(Debug, Clone)]
pub struct EscalationTimeouts {
pub warning_timeout: Duration,
pub critical_timeout: Duration,
pub emergency_timeout: Duration,
}
#[derive(Debug, Clone)]
pub struct NotificationSettings {
pub enable_notifications: bool,
pub notification_channels: Vec<NotificationChannel>,
pub frequency_limits: NotificationFrequencyLimits,
pub content_config: NotificationContentConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NotificationChannel {
Email,
SMS,
Dashboard,
API,
Webhook,
Log,
}
#[derive(Debug, Clone)]
pub struct NotificationFrequencyLimits {
pub max_per_hour: usize,
pub min_interval: Duration,
pub burst_allowance: usize,
}
#[derive(Debug, Clone)]
pub struct NotificationContentConfig {
pub include_performance_data: bool,
pub include_suggested_actions: bool,
pub include_historical_context: bool,
pub verbosity_level: VerbosityLevel,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum VerbosityLevel {
Minimal,
Standard,
Detailed,
Comprehensive,
}
#[derive(Debug, Clone)]
pub struct PerformancePredictionConfig {
pub enable_prediction: bool,
pub prediction_models: Vec<PredictionModelType>,
pub prediction_horizon: Duration,
pub model_update_frequency: Duration,
pub accuracy_requirements: AccuracyRequirements,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PredictionModelType {
LinearRegression,
ARIMA,
LSTM,
GaussianProcess,
RandomForest,
EnsembleModel,
}
#[derive(Debug, Clone)]
pub struct AccuracyRequirements {
pub min_accuracy: f64,
pub confidence_interval: f64,
pub max_prediction_error: f64,
pub validation_requirements: ValidationRequirements,
}
#[derive(Debug, Clone)]
pub struct ValidationRequirements {
pub validation_method: ValidationMethod,
pub validation_frequency: Duration,
pub cross_validation_folds: usize,
pub test_data_percentage: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ValidationMethod {
CrossValidation,
TimeSeriesSplit,
WalkForward,
Bootstrap,
HoldOut,
}
impl Default for PerformanceMonitoringConfig {
fn default() -> Self {
Self {
enable_monitoring: true,
metrics: vec![
PerformanceMetric::ExecutionTime,
PerformanceMetric::Fidelity,
PerformanceMetric::GateErrorRate,
PerformanceMetric::ThroughputRate,
],
monitoring_interval: Duration::from_secs(10),
history_retention: Duration::from_secs(86400 * 7), anomaly_detection: AnomalyDetectionConfig::default(),
performance_prediction: PerformancePredictionConfig::default(),
}
}
}
impl Default for AnomalyDetectionConfig {
fn default() -> Self {
Self {
enable_detection: true,
detection_algorithms: vec![
AnomalyDetectionAlgorithm::StatisticalOutlier,
AnomalyDetectionAlgorithm::ThresholdBased,
],
sensitivity: 0.95,
baseline_window: Duration::from_secs(3600), response_config: AnomalyResponseConfig::default(),
}
}
}
impl Default for AnomalyResponseConfig {
fn default() -> Self {
Self {
response_strategies: vec![AnomalyResponse::LogOnly, AnomalyResponse::NotifyOperator],
response_delay: Duration::from_secs(5),
escalation_thresholds: EscalationThresholds::default(),
notification_settings: NotificationSettings::default(),
}
}
}
impl Default for EscalationThresholds {
fn default() -> Self {
Self {
warning_threshold: 0.1,
critical_threshold: 0.05,
emergency_threshold: 0.01,
escalation_timeouts: EscalationTimeouts::default(),
}
}
}
impl Default for EscalationTimeouts {
fn default() -> Self {
Self {
warning_timeout: Duration::from_secs(300), critical_timeout: Duration::from_secs(60), emergency_timeout: Duration::from_secs(10), }
}
}
impl Default for NotificationSettings {
fn default() -> Self {
Self {
enable_notifications: true,
notification_channels: vec![NotificationChannel::Dashboard, NotificationChannel::Log],
frequency_limits: NotificationFrequencyLimits::default(),
content_config: NotificationContentConfig::default(),
}
}
}
impl Default for NotificationFrequencyLimits {
fn default() -> Self {
Self {
max_per_hour: 10,
min_interval: Duration::from_secs(60),
burst_allowance: 3,
}
}
}
impl Default for NotificationContentConfig {
fn default() -> Self {
Self {
include_performance_data: true,
include_suggested_actions: true,
include_historical_context: false,
verbosity_level: VerbosityLevel::Standard,
}
}
}
impl Default for PerformancePredictionConfig {
fn default() -> Self {
Self {
enable_prediction: true,
prediction_models: vec![
PredictionModelType::LinearRegression,
PredictionModelType::ARIMA,
],
prediction_horizon: Duration::from_secs(3600), model_update_frequency: Duration::from_secs(1800), accuracy_requirements: AccuracyRequirements::default(),
}
}
}
impl Default for AccuracyRequirements {
fn default() -> Self {
Self {
min_accuracy: 0.8,
confidence_interval: 0.95,
max_prediction_error: 0.1,
validation_requirements: ValidationRequirements::default(),
}
}
}
impl Default for ValidationRequirements {
fn default() -> Self {
Self {
validation_method: ValidationMethod::CrossValidation,
validation_frequency: Duration::from_secs(3600 * 6), cross_validation_folds: 5,
test_data_percentage: 0.2,
}
}
}