use std::collections::{BTreeMap, HashMap, HashSet, VecDeque};
use std::sync::{Arc, Mutex, RwLock};
use std::time::{Duration, Instant, SystemTime};
use quantrs2_circuit::prelude::*;
use quantrs2_core::{
error::{QuantRS2Error, QuantRS2Result},
gate::GateOp,
platform::PlatformCapabilities,
qubit::QubitId,
};
#[cfg(feature = "scirs2")]
use scirs2_graph::{
betweenness_centrality, closeness_centrality, dijkstra_path, minimum_spanning_tree,
strongly_connected_components, topological_sort, Graph,
};
#[cfg(feature = "scirs2")]
use scirs2_optimize::{differential_evolution, minimize, OptimizeResult};
#[cfg(feature = "scirs2")]
use scirs2_stats::{corrcoef, mean, pearsonr, std};
use scirs2_core::ndarray::{Array1, Array2, ArrayView1, ArrayView2};
use serde::{Deserialize, Serialize};
use tokio::sync::{Mutex as AsyncMutex, RwLock as AsyncRwLock, Semaphore};
use crate::{
backend_traits::{query_backend_capabilities, BackendCapabilities},
calibration::{CalibrationManager, DeviceCalibration},
integrated_device_manager::{DeviceInfo, IntegratedQuantumDeviceManager},
routing_advanced::{AdvancedQubitRouter, AdvancedRoutingResult},
topology::HardwareTopology,
translation::HardwareBackend,
DeviceError, DeviceResult,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParallelizationConfig {
pub strategy: ParallelizationStrategy,
pub resource_allocation: ResourceAllocationConfig,
pub scheduling_config: ParallelSchedulingConfig,
pub hardware_awareness: HardwareAwarenessConfig,
pub performance_config: PerformanceOptimizationConfig,
pub load_balancing: LoadBalancingConfig,
pub monitoring_config: ResourceMonitoringConfig,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ParallelizationStrategy {
CircuitLevel,
GateLevel,
Hybrid,
TopologyAware,
ResourceConstrained,
SciRS2Optimized,
Custom {
circuit_concurrency: usize,
gate_concurrency: usize,
resource_weights: HashMap<String, f64>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceAllocationConfig {
pub max_concurrent_circuits: usize,
pub max_concurrent_gates: usize,
pub cpu_allocation: CpuAllocationStrategy,
pub memory_limits: MemoryLimits,
pub qpu_allocation: QpuAllocationConfig,
pub network_allocation: NetworkAllocationConfig,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum CpuAllocationStrategy {
AllCores,
FixedCores(usize),
PercentageCores(f64),
Adaptive,
NumaAware,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryLimits {
pub max_total_memory_mb: f64,
pub max_per_circuit_mb: f64,
pub allocation_strategy: MemoryAllocationStrategy,
pub enable_pooling: bool,
pub gc_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MemoryAllocationStrategy {
Static,
Dynamic,
Pooled,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QpuAllocationConfig {
pub max_qpu_time_per_circuit: Duration,
pub sharing_strategy: QpuSharingStrategy,
pub queue_management: QueueManagementConfig,
pub fairness_config: FairnessConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum QpuSharingStrategy {
TimeSlicing,
SpaceSlicing,
HybridSlicing,
Exclusive,
BestEffort,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueueManagementConfig {
pub algorithm: QueueSchedulingAlgorithm,
pub max_queue_size: usize,
pub priority_levels: usize,
pub enable_preemption: bool,
pub timeout_config: TimeoutConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum QueueSchedulingAlgorithm {
FCFS,
SJF,
Priority,
RoundRobin,
MLFQ,
SciRS2Optimized,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeoutConfig {
pub execution_timeout: Duration,
pub queue_timeout: Duration,
pub resource_timeout: Duration,
pub adaptive_timeouts: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FairnessConfig {
pub algorithm: FairnessAlgorithm,
pub resource_quotas: ResourceQuotas,
pub aging_factor: f64,
pub enable_burst_allowances: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FairnessAlgorithm {
ProportionalFair,
MaxMinFair,
WeightedFairQueuing,
LotteryScheduling,
GameTheoretic,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceQuotas {
pub cpu_quota: Option<Duration>,
pub qpu_quota: Option<Duration>,
pub memory_quota: Option<f64>,
pub circuit_quota: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkAllocationConfig {
pub max_bandwidth_per_circuit: f64,
pub qos_class: NetworkQoSClass,
pub compression_config: CompressionConfig,
pub latency_optimization: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum NetworkQoSClass {
BestEffort,
AssuredForwarding,
ExpeditedForwarding,
RealTime,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompressionConfig {
pub enabled: bool,
pub algorithm: CompressionAlgorithm,
pub level: u8,
pub size_threshold: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CompressionAlgorithm {
Gzip,
Zstd,
LZ4,
Brotli,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParallelSchedulingConfig {
pub algorithm: ParallelSchedulingAlgorithm,
pub work_stealing: WorkStealingConfig,
pub load_balancing_params: LoadBalancingParams,
pub thread_pool_config: ThreadPoolConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ParallelSchedulingAlgorithm {
WorkStealing,
WorkSharing,
ForkJoin,
ActorModel,
Pipeline,
DataParallel,
TaskParallel,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkStealingConfig {
pub enabled: bool,
pub strategy: WorkStealingStrategy,
pub queue_size: usize,
pub stealing_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WorkStealingStrategy {
Random,
RoundRobin,
LoadBased,
LocalityAware,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadBalancingParams {
pub rebalancing_frequency: Duration,
pub load_threshold: f64,
pub migration_cost_factor: f64,
pub adaptive_balancing: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreadPoolConfig {
pub core_threads: usize,
pub max_threads: usize,
pub keep_alive_time: Duration,
pub thread_priority: ThreadPriority,
pub affinity_config: ThreadAffinityConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ThreadPriority {
Low,
Normal,
High,
RealTime,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreadAffinityConfig {
pub enabled: bool,
pub assignment_strategy: CoreAssignmentStrategy,
pub numa_preference: NumaPreference,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CoreAssignmentStrategy {
Automatic,
Fixed(Vec<usize>),
RoundRobin,
LoadBased,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum NumaPreference {
None,
LocalNode,
SpecificNode(usize),
Interleaved,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HardwareAwarenessConfig {
pub topology_awareness: TopologyAwarenessLevel,
pub calibration_integration: CalibrationIntegrationConfig,
pub error_rate_config: ErrorRateConfig,
pub connectivity_config: ConnectivityConfig,
pub resource_tracking: ResourceTrackingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum TopologyAwarenessLevel {
Basic,
Connectivity,
Calibration,
Full,
SciRS2Enhanced,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CalibrationIntegrationConfig {
pub use_realtime_calibration: bool,
pub update_frequency: Duration,
pub quality_threshold: f64,
pub enable_predictive: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ErrorRateConfig {
pub consider_error_rates: bool,
pub error_threshold: f64,
pub mitigation_strategy: ErrorMitigationStrategy,
pub prediction_model: ErrorPredictionModel,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ErrorMitigationStrategy {
None,
Retry,
DynamicalDecoupling,
ZeroNoiseExtrapolation,
Composite,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ErrorPredictionModel {
Static,
TimeDependent,
MachineLearning,
PhysicsBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConnectivityConfig {
pub enforce_constraints: bool,
pub swap_strategy: SwapInsertionStrategy,
pub routing_preference: RoutingPreference,
pub optimization_config: ConnectivityOptimizationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SwapInsertionStrategy {
Minimal,
Lookahead,
GlobalOptimal,
Heuristic,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RoutingPreference {
ShortestPath,
MinimumCongestion,
LoadBalancing,
QualityAware,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConnectivityOptimizationConfig {
pub enable_parallel_routing: bool,
pub optimization_level: OptimizationLevel,
pub use_ml_routing: bool,
pub precompute_tables: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum OptimizationLevel {
None,
Basic,
Moderate,
Aggressive,
Experimental,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceTrackingConfig {
pub track_cpu_usage: bool,
pub track_memory_usage: bool,
pub track_qpu_usage: bool,
pub track_network_usage: bool,
pub tracking_granularity: TrackingGranularity,
pub reporting_frequency: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum TrackingGranularity {
Coarse,
Medium,
Fine,
UltraFine,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceOptimizationConfig {
pub objectives: Vec<OptimizationObjective>,
pub caching_config: CachingConfig,
pub prefetching_config: PrefetchingConfig,
pub batch_config: BatchProcessingConfig,
pub adaptive_config: AdaptiveOptimizationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum OptimizationObjective {
MinimizeTime,
MaximizeThroughput,
MinimizeResources,
MaximizeQuality,
MinimizeCost,
MinimizeEnergy,
Balanced,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CachingConfig {
pub enable_result_caching: bool,
pub enable_compilation_caching: bool,
pub size_limits: CacheSizeLimits,
pub eviction_policy: CacheEvictionPolicy,
pub warming_strategies: Vec<CacheWarmingStrategy>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CacheSizeLimits {
pub max_entries: usize,
pub max_memory_mb: f64,
pub max_disk_mb: f64,
pub per_user_limits: Option<Box<Self>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CacheEvictionPolicy {
LRU,
LFU,
FIFO,
Random,
TimeExpiration,
SizeBased,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CacheWarmingStrategy {
PreloadCommon,
Predictive,
UserPatternBased,
Background,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrefetchingConfig {
pub enabled: bool,
pub strategy: PrefetchingStrategy,
pub prefetch_distance: usize,
pub confidence_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PrefetchingStrategy {
Sequential,
PatternBased,
MachineLearning,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchProcessingConfig {
pub enabled: bool,
pub size_limits: BatchSizeLimits,
pub strategy: BatchingStrategy,
pub timeout: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchSizeLimits {
pub min_size: usize,
pub max_size: usize,
pub optimal_size: usize,
pub dynamic_sizing: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum BatchingStrategy {
FixedSize,
TimeBased,
Adaptive,
SimilarityBased,
ResourceAware,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdaptiveOptimizationConfig {
pub enabled: bool,
pub adaptation_frequency: Duration,
pub monitoring_window: Duration,
pub sensitivity: f64,
pub ml_config: AdaptiveMLConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdaptiveMLConfig {
pub enabled: bool,
pub model_type: MLModelType,
pub training_frequency: Duration,
pub feature_config: FeatureEngineeringConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MLModelType {
LinearRegression,
RandomForest,
NeuralNetwork,
ReinforcementLearning,
Ensemble,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeatureEngineeringConfig {
pub circuit_features: Vec<CircuitFeature>,
pub hardware_features: Vec<HardwareFeature>,
pub performance_features: Vec<PerformanceFeature>,
pub normalization: FeatureNormalization,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CircuitFeature {
QubitCount,
Depth,
GateCount,
GateTypeDistribution,
ConnectivityRequirements,
ParallelismPotential,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum HardwareFeature {
AvailableQubits,
ConnectivityGraph,
ErrorRates,
CalibrationQuality,
QueueStatus,
ResourceUtilization,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PerformanceFeature {
ExecutionTime,
Throughput,
ResourceEfficiency,
QualityMetrics,
CostMetrics,
EnergyConsumption,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FeatureNormalization {
None,
MinMax,
ZScore,
Robust,
UnitVector,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadBalancingConfig {
pub algorithm: LoadBalancingAlgorithm,
pub monitoring: LoadMonitoringConfig,
pub rebalancing_triggers: RebalancingTriggers,
pub migration_policies: MigrationPolicies,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum LoadBalancingAlgorithm {
RoundRobin,
WeightedRoundRobin,
LeastConnections,
LeastResponseTime,
ResourceBased,
MachineLearningBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadMonitoringConfig {
pub frequency: Duration,
pub metrics: Vec<LoadMetric>,
pub thresholds: LoadThresholds,
pub retention_period: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum LoadMetric {
CpuUtilization,
MemoryUtilization,
QpuUtilization,
NetworkUtilization,
QueueLength,
ResponseTime,
Throughput,
ErrorRate,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoadThresholds {
pub cpu_threshold: f64,
pub memory_threshold: f64,
pub qpu_threshold: f64,
pub network_threshold: f64,
pub queue_threshold: usize,
pub response_time_threshold: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RebalancingTriggers {
pub cpu_imbalance_threshold: f64,
pub memory_imbalance_threshold: f64,
pub queue_imbalance_threshold: f64,
pub time_interval: Option<Duration>,
pub event_triggers: Vec<RebalancingEvent>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RebalancingEvent {
NodeFailure,
NodeRecovery,
CapacityChange,
LoadSpike,
PerformanceDegradation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MigrationPolicies {
pub cost_threshold: f64,
pub max_migrations_per_period: usize,
pub migration_period: Duration,
pub circuit_migration_strategy: CircuitMigrationStrategy,
pub data_migration_strategy: DataMigrationStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CircuitMigrationStrategy {
None,
CheckpointRestart,
LiveMigration,
Incremental,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DataMigrationStrategy {
None,
Copy,
Move,
DistributedCaching,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceMonitoringConfig {
pub real_time_monitoring: bool,
pub granularity: MonitoringGranularity,
pub metrics_collection: MetricsCollectionConfig,
pub alerting: AlertingConfig,
pub reporting: ReportingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MonitoringGranularity {
System,
Device,
Circuit,
Gate,
Operation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetricsCollectionConfig {
pub frequency: Duration,
pub metrics: Vec<MonitoringMetric>,
pub retention_policy: RetentionPolicy,
pub storage_config: StorageConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MonitoringMetric {
ResourceUtilization,
Performance,
Quality,
Cost,
Energy,
Availability,
Security,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetentionPolicy {
pub raw_data_retention: Duration,
pub aggregated_data_retention: Duration,
pub archive_policy: ArchivePolicy,
pub compression: CompressionConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ArchivePolicy {
None,
TimeBased(Duration),
SizeBased(usize),
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StorageConfig {
pub backend: StorageBackend,
pub location: String,
pub encryption: EncryptionConfig,
pub replication: ReplicationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum StorageBackend {
LocalFilesystem,
DistributedFilesystem,
CloudStorage,
Database,
TimeSeriesDatabase,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionConfig {
pub enabled: bool,
pub algorithm: EncryptionAlgorithm,
pub key_management: KeyManagementConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum EncryptionAlgorithm {
AES256,
ChaCha20Poly1305,
XChaCha20Poly1305,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyManagementConfig {
pub rotation_frequency: Duration,
pub key_derivation: KeyDerivationFunction,
pub storage_backend: KeyStorageBackend,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum KeyDerivationFunction {
PBKDF2,
Scrypt,
Argon2,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum KeyStorageBackend {
Local,
HSM,
CloudKMS,
Distributed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReplicationConfig {
pub replication_factor: usize,
pub strategy: ReplicationStrategy,
pub consistency_level: ConsistencyLevel,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReplicationStrategy {
Synchronous,
Asynchronous,
SemiSynchronous,
MultiMaster,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ConsistencyLevel {
Strong,
Eventual,
Causal,
Session,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertingConfig {
pub enabled: bool,
pub rules: Vec<AlertRule>,
pub channels: Vec<NotificationChannel>,
pub aggregation: AlertAggregationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertRule {
pub name: String,
pub metric: MonitoringMetric,
pub condition: ThresholdCondition,
pub severity: AlertSeverity,
pub frequency: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ThresholdCondition {
GreaterThan(f64),
LessThan(f64),
EqualTo(f64),
WithinRange(f64, f64),
OutsideRange(f64, f64),
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
pub enum AlertSeverity {
Info,
Warning,
Error,
Critical,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum NotificationChannel {
Email {
recipients: Vec<String>,
smtp_config: SmtpConfig,
},
Slack {
webhook_url: String,
channel: String,
},
Webhook {
url: String,
headers: HashMap<String, String>,
},
SMS {
phone_numbers: Vec<String>,
provider_config: SmsProviderConfig,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SmtpConfig {
pub server: String,
pub port: u16,
pub username: String,
pub use_tls: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SmsProviderConfig {
pub provider: String,
pub api_key: String,
pub endpoint: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertAggregationConfig {
pub enabled: bool,
pub window: Duration,
pub strategy: AlertAggregationStrategy,
pub max_alerts_per_window: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AlertAggregationStrategy {
Count,
SeverityBased,
MetricBased,
TimeBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReportingConfig {
pub enabled: bool,
pub report_types: Vec<ReportType>,
pub frequency: Duration,
pub format: ReportFormat,
pub distribution: ReportDistribution,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportType {
Performance,
ResourceUtilization,
QualityMetrics,
CostAnalysis,
CapacityPlanning,
SLACompliance,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportFormat {
PDF,
HTML,
JSON,
CSV,
Excel,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReportDistribution {
pub email_recipients: Vec<String>,
pub file_location: Option<String>,
pub cloud_location: Option<String>,
pub api_endpoints: Vec<String>,
}