1use std::collections::{BTreeMap, HashMap, HashSet, VecDeque};
8use std::sync::{Arc, Mutex, RwLock};
9use std::time::{Duration, Instant, SystemTime};
10
11use quantrs2_circuit::prelude::*;
12use quantrs2_core::{
13 error::{QuantRS2Error, QuantRS2Result},
14 gate::GateOp,
15 platform::PlatformCapabilities,
16 qubit::QubitId,
17};
18
19#[cfg(feature = "scirs2")]
21use scirs2_graph::{
22 betweenness_centrality, closeness_centrality, dijkstra_path, minimum_spanning_tree,
23 strongly_connected_components, topological_sort, Graph,
24};
25#[cfg(feature = "scirs2")]
26use scirs2_optimize::{differential_evolution, minimize, OptimizeResult};
27#[cfg(feature = "scirs2")]
28use scirs2_stats::{corrcoef, mean, pearsonr, std};
29
30use scirs2_core::ndarray::{Array1, Array2, ArrayView1, ArrayView2};
31use serde::{Deserialize, Serialize};
32use tokio::sync::{Mutex as AsyncMutex, RwLock as AsyncRwLock, Semaphore};
33
34use crate::{
35 backend_traits::{query_backend_capabilities, BackendCapabilities},
36 calibration::{CalibrationManager, DeviceCalibration},
37 integrated_device_manager::{DeviceInfo, IntegratedQuantumDeviceManager},
38 routing_advanced::{AdvancedQubitRouter, AdvancedRoutingResult},
39 topology::HardwareTopology,
40 translation::HardwareBackend,
41 DeviceError, DeviceResult,
42};
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct ParallelizationConfig {
47 pub strategy: ParallelizationStrategy,
49 pub resource_allocation: ResourceAllocationConfig,
51 pub scheduling_config: ParallelSchedulingConfig,
53 pub hardware_awareness: HardwareAwarenessConfig,
55 pub performance_config: PerformanceOptimizationConfig,
57 pub load_balancing: LoadBalancingConfig,
59 pub monitoring_config: ResourceMonitoringConfig,
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
65pub enum ParallelizationStrategy {
66 CircuitLevel,
68 GateLevel,
70 Hybrid,
72 TopologyAware,
74 ResourceConstrained,
76 SciRS2Optimized,
78 Custom {
80 circuit_concurrency: usize,
81 gate_concurrency: usize,
82 resource_weights: HashMap<String, f64>,
83 },
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct ResourceAllocationConfig {
89 pub max_concurrent_circuits: usize,
91 pub max_concurrent_gates: usize,
93 pub cpu_allocation: CpuAllocationStrategy,
95 pub memory_limits: MemoryLimits,
97 pub qpu_allocation: QpuAllocationConfig,
99 pub network_allocation: NetworkAllocationConfig,
101}
102
103#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
105pub enum CpuAllocationStrategy {
106 AllCores,
108 FixedCores(usize),
110 PercentageCores(f64),
112 Adaptive,
114 NumaAware,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct MemoryLimits {
121 pub max_total_memory_mb: f64,
123 pub max_per_circuit_mb: f64,
125 pub allocation_strategy: MemoryAllocationStrategy,
127 pub enable_pooling: bool,
129 pub gc_threshold: f64,
131}
132
133#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
135pub enum MemoryAllocationStrategy {
136 Static,
138 Dynamic,
140 Pooled,
142 Adaptive,
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize)]
148pub struct QpuAllocationConfig {
149 pub max_qpu_time_per_circuit: Duration,
151 pub sharing_strategy: QpuSharingStrategy,
153 pub queue_management: QueueManagementConfig,
155 pub fairness_config: FairnessConfig,
157}
158
159#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
161pub enum QpuSharingStrategy {
162 TimeSlicing,
164 SpaceSlicing,
166 HybridSlicing,
168 Exclusive,
170 BestEffort,
172}
173
174#[derive(Debug, Clone, Serialize, Deserialize)]
176pub struct QueueManagementConfig {
177 pub algorithm: QueueSchedulingAlgorithm,
179 pub max_queue_size: usize,
181 pub priority_levels: usize,
183 pub enable_preemption: bool,
185 pub timeout_config: TimeoutConfig,
187}
188
189#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
191pub enum QueueSchedulingAlgorithm {
192 FCFS,
194 SJF,
196 Priority,
198 RoundRobin,
200 MLFQ,
202 SciRS2Optimized,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
208pub struct TimeoutConfig {
209 pub execution_timeout: Duration,
211 pub queue_timeout: Duration,
213 pub resource_timeout: Duration,
215 pub adaptive_timeouts: bool,
217}
218
219#[derive(Debug, Clone, Serialize, Deserialize)]
221pub struct FairnessConfig {
222 pub algorithm: FairnessAlgorithm,
224 pub resource_quotas: ResourceQuotas,
226 pub aging_factor: f64,
228 pub enable_burst_allowances: bool,
230}
231
232#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
234pub enum FairnessAlgorithm {
235 ProportionalFair,
237 MaxMinFair,
239 WeightedFairQueuing,
241 LotteryScheduling,
243 GameTheoretic,
245}
246
247#[derive(Debug, Clone, Serialize, Deserialize)]
249pub struct ResourceQuotas {
250 pub cpu_quota: Option<Duration>,
252 pub qpu_quota: Option<Duration>,
254 pub memory_quota: Option<f64>,
256 pub circuit_quota: Option<usize>,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
262pub struct NetworkAllocationConfig {
263 pub max_bandwidth_per_circuit: f64,
265 pub qos_class: NetworkQoSClass,
267 pub compression_config: CompressionConfig,
269 pub latency_optimization: bool,
271}
272
273#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
275pub enum NetworkQoSClass {
276 BestEffort,
278 AssuredForwarding,
280 ExpeditedForwarding,
282 RealTime,
284}
285
286#[derive(Debug, Clone, Serialize, Deserialize)]
288pub struct CompressionConfig {
289 pub enabled: bool,
291 pub algorithm: CompressionAlgorithm,
293 pub level: u8,
295 pub size_threshold: usize,
297}
298
299#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
301pub enum CompressionAlgorithm {
302 Gzip,
304 Zstd,
306 LZ4,
308 Brotli,
310}
311
312#[derive(Debug, Clone, Serialize, Deserialize)]
314pub struct ParallelSchedulingConfig {
315 pub algorithm: ParallelSchedulingAlgorithm,
317 pub work_stealing: WorkStealingConfig,
319 pub load_balancing_params: LoadBalancingParams,
321 pub thread_pool_config: ThreadPoolConfig,
323}
324
325#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
327pub enum ParallelSchedulingAlgorithm {
328 WorkStealing,
330 WorkSharing,
332 ForkJoin,
334 ActorModel,
336 Pipeline,
338 DataParallel,
340 TaskParallel,
342}
343
344#[derive(Debug, Clone, Serialize, Deserialize)]
346pub struct WorkStealingConfig {
347 pub enabled: bool,
349 pub strategy: WorkStealingStrategy,
351 pub queue_size: usize,
353 pub stealing_threshold: f64,
355}
356
357#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
359pub enum WorkStealingStrategy {
360 Random,
362 RoundRobin,
364 LoadBased,
366 LocalityAware,
368}
369
370#[derive(Debug, Clone, Serialize, Deserialize)]
372pub struct LoadBalancingParams {
373 pub rebalancing_frequency: Duration,
375 pub load_threshold: f64,
377 pub migration_cost_factor: f64,
379 pub adaptive_balancing: bool,
381}
382
383#[derive(Debug, Clone, Serialize, Deserialize)]
385pub struct ThreadPoolConfig {
386 pub core_threads: usize,
388 pub max_threads: usize,
390 pub keep_alive_time: Duration,
392 pub thread_priority: ThreadPriority,
394 pub affinity_config: ThreadAffinityConfig,
396}
397
398#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
400pub enum ThreadPriority {
401 Low,
403 Normal,
405 High,
407 RealTime,
409}
410
411#[derive(Debug, Clone, Serialize, Deserialize)]
413pub struct ThreadAffinityConfig {
414 pub enabled: bool,
416 pub assignment_strategy: CoreAssignmentStrategy,
418 pub numa_preference: NumaPreference,
420}
421
422#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
424pub enum CoreAssignmentStrategy {
425 Automatic,
427 Fixed(Vec<usize>),
429 RoundRobin,
431 LoadBased,
433}
434
435#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
437pub enum NumaPreference {
438 None,
440 LocalNode,
442 SpecificNode(usize),
444 Interleaved,
446}
447
448#[derive(Debug, Clone, Serialize, Deserialize)]
450pub struct HardwareAwarenessConfig {
451 pub topology_awareness: TopologyAwarenessLevel,
453 pub calibration_integration: CalibrationIntegrationConfig,
455 pub error_rate_config: ErrorRateConfig,
457 pub connectivity_config: ConnectivityConfig,
459 pub resource_tracking: ResourceTrackingConfig,
461}
462
463#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
465pub enum TopologyAwarenessLevel {
466 Basic,
468 Connectivity,
470 Calibration,
472 Full,
474 SciRS2Enhanced,
476}
477
478#[derive(Debug, Clone, Serialize, Deserialize)]
480pub struct CalibrationIntegrationConfig {
481 pub use_realtime_calibration: bool,
483 pub update_frequency: Duration,
485 pub quality_threshold: f64,
487 pub enable_predictive: bool,
489}
490
491#[derive(Debug, Clone, Serialize, Deserialize)]
493pub struct ErrorRateConfig {
494 pub consider_error_rates: bool,
496 pub error_threshold: f64,
498 pub mitigation_strategy: ErrorMitigationStrategy,
500 pub prediction_model: ErrorPredictionModel,
502}
503
504#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
506pub enum ErrorMitigationStrategy {
507 None,
509 Retry,
511 DynamicalDecoupling,
513 ZeroNoiseExtrapolation,
515 Composite,
517}
518
519#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
521pub enum ErrorPredictionModel {
522 Static,
524 TimeDependent,
526 MachineLearning,
528 PhysicsBased,
530}
531
532#[derive(Debug, Clone, Serialize, Deserialize)]
534pub struct ConnectivityConfig {
535 pub enforce_constraints: bool,
537 pub swap_strategy: SwapInsertionStrategy,
539 pub routing_preference: RoutingPreference,
541 pub optimization_config: ConnectivityOptimizationConfig,
543}
544
545#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
547pub enum SwapInsertionStrategy {
548 Minimal,
550 Lookahead,
552 GlobalOptimal,
554 Heuristic,
556}
557
558#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
560pub enum RoutingPreference {
561 ShortestPath,
563 MinimumCongestion,
565 LoadBalancing,
567 QualityAware,
569}
570
571#[derive(Debug, Clone, Serialize, Deserialize)]
573pub struct ConnectivityOptimizationConfig {
574 pub enable_parallel_routing: bool,
576 pub optimization_level: OptimizationLevel,
578 pub use_ml_routing: bool,
580 pub precompute_tables: bool,
582}
583
584#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
586pub enum OptimizationLevel {
587 None,
589 Basic,
591 Moderate,
593 Aggressive,
595 Experimental,
597}
598
599#[derive(Debug, Clone, Serialize, Deserialize)]
601pub struct ResourceTrackingConfig {
602 pub track_cpu_usage: bool,
604 pub track_memory_usage: bool,
606 pub track_qpu_usage: bool,
608 pub track_network_usage: bool,
610 pub tracking_granularity: TrackingGranularity,
612 pub reporting_frequency: Duration,
614}
615
616#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
618pub enum TrackingGranularity {
619 Coarse,
621 Medium,
623 Fine,
625 UltraFine,
627}
628
629#[derive(Debug, Clone, Serialize, Deserialize)]
631pub struct PerformanceOptimizationConfig {
632 pub objectives: Vec<OptimizationObjective>,
634 pub caching_config: CachingConfig,
636 pub prefetching_config: PrefetchingConfig,
638 pub batch_config: BatchProcessingConfig,
640 pub adaptive_config: AdaptiveOptimizationConfig,
642}
643
644#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
646pub enum OptimizationObjective {
647 MinimizeTime,
649 MaximizeThroughput,
651 MinimizeResources,
653 MaximizeQuality,
655 MinimizeCost,
657 MinimizeEnergy,
659 Balanced,
661}
662
663#[derive(Debug, Clone, Serialize, Deserialize)]
665pub struct CachingConfig {
666 pub enable_result_caching: bool,
668 pub enable_compilation_caching: bool,
670 pub size_limits: CacheSizeLimits,
672 pub eviction_policy: CacheEvictionPolicy,
674 pub warming_strategies: Vec<CacheWarmingStrategy>,
676}
677
678#[derive(Debug, Clone, Serialize, Deserialize)]
680pub struct CacheSizeLimits {
681 pub max_entries: usize,
683 pub max_memory_mb: f64,
685 pub max_disk_mb: f64,
687 pub per_user_limits: Option<Box<Self>>,
689}
690
691#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
693pub enum CacheEvictionPolicy {
694 LRU,
696 LFU,
698 FIFO,
700 Random,
702 TimeExpiration,
704 SizeBased,
706}
707
708#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
710pub enum CacheWarmingStrategy {
711 PreloadCommon,
713 Predictive,
715 UserPatternBased,
717 Background,
719}
720
721#[derive(Debug, Clone, Serialize, Deserialize)]
723pub struct PrefetchingConfig {
724 pub enabled: bool,
726 pub strategy: PrefetchingStrategy,
728 pub prefetch_distance: usize,
730 pub confidence_threshold: f64,
732}
733
734#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
736pub enum PrefetchingStrategy {
737 Sequential,
739 PatternBased,
741 MachineLearning,
743 Adaptive,
745}
746
747#[derive(Debug, Clone, Serialize, Deserialize)]
749pub struct BatchProcessingConfig {
750 pub enabled: bool,
752 pub size_limits: BatchSizeLimits,
754 pub strategy: BatchingStrategy,
756 pub timeout: Duration,
758}
759
760#[derive(Debug, Clone, Serialize, Deserialize)]
762pub struct BatchSizeLimits {
763 pub min_size: usize,
765 pub max_size: usize,
767 pub optimal_size: usize,
769 pub dynamic_sizing: bool,
771}
772
773#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
775pub enum BatchingStrategy {
776 FixedSize,
778 TimeBased,
780 Adaptive,
782 SimilarityBased,
784 ResourceAware,
786}
787
788#[derive(Debug, Clone, Serialize, Deserialize)]
790pub struct AdaptiveOptimizationConfig {
791 pub enabled: bool,
793 pub adaptation_frequency: Duration,
795 pub monitoring_window: Duration,
797 pub sensitivity: f64,
799 pub ml_config: AdaptiveMLConfig,
801}
802
803#[derive(Debug, Clone, Serialize, Deserialize)]
805pub struct AdaptiveMLConfig {
806 pub enabled: bool,
808 pub model_type: MLModelType,
810 pub training_frequency: Duration,
812 pub feature_config: FeatureEngineeringConfig,
814}
815
816#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
818pub enum MLModelType {
819 LinearRegression,
821 RandomForest,
823 NeuralNetwork,
825 ReinforcementLearning,
827 Ensemble,
829}
830
831#[derive(Debug, Clone, Serialize, Deserialize)]
833pub struct FeatureEngineeringConfig {
834 pub circuit_features: Vec<CircuitFeature>,
836 pub hardware_features: Vec<HardwareFeature>,
838 pub performance_features: Vec<PerformanceFeature>,
840 pub normalization: FeatureNormalization,
842}
843
844#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
846pub enum CircuitFeature {
847 QubitCount,
849 Depth,
851 GateCount,
853 GateTypeDistribution,
855 ConnectivityRequirements,
857 ParallelismPotential,
859}
860
861#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
863pub enum HardwareFeature {
864 AvailableQubits,
866 ConnectivityGraph,
868 ErrorRates,
870 CalibrationQuality,
872 QueueStatus,
874 ResourceUtilization,
876}
877
878#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
880pub enum PerformanceFeature {
881 ExecutionTime,
883 Throughput,
885 ResourceEfficiency,
887 QualityMetrics,
889 CostMetrics,
891 EnergyConsumption,
893}
894
895#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
897pub enum FeatureNormalization {
898 None,
900 MinMax,
902 ZScore,
904 Robust,
906 UnitVector,
908}
909
910#[derive(Debug, Clone, Serialize, Deserialize)]
912pub struct LoadBalancingConfig {
913 pub algorithm: LoadBalancingAlgorithm,
915 pub monitoring: LoadMonitoringConfig,
917 pub rebalancing_triggers: RebalancingTriggers,
919 pub migration_policies: MigrationPolicies,
921}
922
923#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
925pub enum LoadBalancingAlgorithm {
926 RoundRobin,
928 WeightedRoundRobin,
930 LeastConnections,
932 LeastResponseTime,
934 ResourceBased,
936 MachineLearningBased,
938}
939
940#[derive(Debug, Clone, Serialize, Deserialize)]
942pub struct LoadMonitoringConfig {
943 pub frequency: Duration,
945 pub metrics: Vec<LoadMetric>,
947 pub thresholds: LoadThresholds,
949 pub retention_period: Duration,
951}
952
953#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
955pub enum LoadMetric {
956 CpuUtilization,
958 MemoryUtilization,
960 QpuUtilization,
962 NetworkUtilization,
964 QueueLength,
966 ResponseTime,
968 Throughput,
970 ErrorRate,
972}
973
974#[derive(Debug, Clone, Serialize, Deserialize)]
976pub struct LoadThresholds {
977 pub cpu_threshold: f64,
979 pub memory_threshold: f64,
981 pub qpu_threshold: f64,
983 pub network_threshold: f64,
985 pub queue_threshold: usize,
987 pub response_time_threshold: Duration,
989}
990
991#[derive(Debug, Clone, Serialize, Deserialize)]
993pub struct RebalancingTriggers {
994 pub cpu_imbalance_threshold: f64,
996 pub memory_imbalance_threshold: f64,
998 pub queue_imbalance_threshold: f64,
1000 pub time_interval: Option<Duration>,
1002 pub event_triggers: Vec<RebalancingEvent>,
1004}
1005
1006#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1008pub enum RebalancingEvent {
1009 NodeFailure,
1011 NodeRecovery,
1013 CapacityChange,
1015 LoadSpike,
1017 PerformanceDegradation,
1019}
1020
1021#[derive(Debug, Clone, Serialize, Deserialize)]
1023pub struct MigrationPolicies {
1024 pub cost_threshold: f64,
1026 pub max_migrations_per_period: usize,
1028 pub migration_period: Duration,
1030 pub circuit_migration_strategy: CircuitMigrationStrategy,
1032 pub data_migration_strategy: DataMigrationStrategy,
1034}
1035
1036#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1038pub enum CircuitMigrationStrategy {
1039 None,
1041 CheckpointRestart,
1043 LiveMigration,
1045 Incremental,
1047}
1048
1049#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1051pub enum DataMigrationStrategy {
1052 None,
1054 Copy,
1056 Move,
1058 DistributedCaching,
1060}
1061
1062#[derive(Debug, Clone, Serialize, Deserialize)]
1064pub struct ResourceMonitoringConfig {
1065 pub real_time_monitoring: bool,
1067 pub granularity: MonitoringGranularity,
1069 pub metrics_collection: MetricsCollectionConfig,
1071 pub alerting: AlertingConfig,
1073 pub reporting: ReportingConfig,
1075}
1076
1077#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1079pub enum MonitoringGranularity {
1080 System,
1082 Device,
1084 Circuit,
1086 Gate,
1088 Operation,
1090}
1091
1092#[derive(Debug, Clone, Serialize, Deserialize)]
1094pub struct MetricsCollectionConfig {
1095 pub frequency: Duration,
1097 pub metrics: Vec<MonitoringMetric>,
1099 pub retention_policy: RetentionPolicy,
1101 pub storage_config: StorageConfig,
1103}
1104
1105#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1107pub enum MonitoringMetric {
1108 ResourceUtilization,
1110 Performance,
1112 Quality,
1114 Cost,
1116 Energy,
1118 Availability,
1120 Security,
1122}
1123
1124#[derive(Debug, Clone, Serialize, Deserialize)]
1126pub struct RetentionPolicy {
1127 pub raw_data_retention: Duration,
1129 pub aggregated_data_retention: Duration,
1131 pub archive_policy: ArchivePolicy,
1133 pub compression: CompressionConfig,
1135}
1136
1137#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1139pub enum ArchivePolicy {
1140 None,
1142 TimeBased(Duration),
1144 SizeBased(usize),
1146 Custom(String),
1148}
1149
1150#[derive(Debug, Clone, Serialize, Deserialize)]
1152pub struct StorageConfig {
1153 pub backend: StorageBackend,
1155 pub location: String,
1157 pub encryption: EncryptionConfig,
1159 pub replication: ReplicationConfig,
1161}
1162
1163#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1165pub enum StorageBackend {
1166 LocalFilesystem,
1168 DistributedFilesystem,
1170 CloudStorage,
1172 Database,
1174 TimeSeriesDatabase,
1176}
1177
1178#[derive(Debug, Clone, Serialize, Deserialize)]
1180pub struct EncryptionConfig {
1181 pub enabled: bool,
1183 pub algorithm: EncryptionAlgorithm,
1185 pub key_management: KeyManagementConfig,
1187}
1188
1189#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1191pub enum EncryptionAlgorithm {
1192 AES256,
1194 ChaCha20Poly1305,
1196 XChaCha20Poly1305,
1198}
1199
1200#[derive(Debug, Clone, Serialize, Deserialize)]
1202pub struct KeyManagementConfig {
1203 pub rotation_frequency: Duration,
1205 pub key_derivation: KeyDerivationFunction,
1207 pub storage_backend: KeyStorageBackend,
1209}
1210
1211#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1213pub enum KeyDerivationFunction {
1214 PBKDF2,
1216 Scrypt,
1218 Argon2,
1220}
1221
1222#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1224pub enum KeyStorageBackend {
1225 Local,
1227 HSM,
1229 CloudKMS,
1231 Distributed,
1233}
1234
1235#[derive(Debug, Clone, Serialize, Deserialize)]
1237pub struct ReplicationConfig {
1238 pub replication_factor: usize,
1240 pub strategy: ReplicationStrategy,
1242 pub consistency_level: ConsistencyLevel,
1244}
1245
1246#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1248pub enum ReplicationStrategy {
1249 Synchronous,
1251 Asynchronous,
1253 SemiSynchronous,
1255 MultiMaster,
1257}
1258
1259#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1261pub enum ConsistencyLevel {
1262 Strong,
1264 Eventual,
1266 Causal,
1268 Session,
1270}
1271
1272#[derive(Debug, Clone, Serialize, Deserialize)]
1274pub struct AlertingConfig {
1275 pub enabled: bool,
1277 pub rules: Vec<AlertRule>,
1279 pub channels: Vec<NotificationChannel>,
1281 pub aggregation: AlertAggregationConfig,
1283}
1284
1285#[derive(Debug, Clone, Serialize, Deserialize)]
1287pub struct AlertRule {
1288 pub name: String,
1290 pub metric: MonitoringMetric,
1292 pub condition: ThresholdCondition,
1294 pub severity: AlertSeverity,
1296 pub frequency: Duration,
1298}
1299
1300#[derive(Debug, Clone, Serialize, Deserialize)]
1302pub enum ThresholdCondition {
1303 GreaterThan(f64),
1305 LessThan(f64),
1307 EqualTo(f64),
1309 WithinRange(f64, f64),
1311 OutsideRange(f64, f64),
1313}
1314
1315#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
1317pub enum AlertSeverity {
1318 Info,
1320 Warning,
1322 Error,
1324 Critical,
1326}
1327
1328#[derive(Debug, Clone, Serialize, Deserialize)]
1330pub enum NotificationChannel {
1331 Email {
1333 recipients: Vec<String>,
1334 smtp_config: SmtpConfig,
1335 },
1336 Slack {
1338 webhook_url: String,
1339 channel: String,
1340 },
1341 Webhook {
1343 url: String,
1344 headers: HashMap<String, String>,
1345 },
1346 SMS {
1348 phone_numbers: Vec<String>,
1349 provider_config: SmsProviderConfig,
1350 },
1351}
1352
1353#[derive(Debug, Clone, Serialize, Deserialize)]
1355pub struct SmtpConfig {
1356 pub server: String,
1358 pub port: u16,
1360 pub username: String,
1362 pub use_tls: bool,
1364}
1365
1366#[derive(Debug, Clone, Serialize, Deserialize)]
1368pub struct SmsProviderConfig {
1369 pub provider: String,
1371 pub api_key: String,
1373 pub endpoint: String,
1375}
1376
1377#[derive(Debug, Clone, Serialize, Deserialize)]
1379pub struct AlertAggregationConfig {
1380 pub enabled: bool,
1382 pub window: Duration,
1384 pub strategy: AlertAggregationStrategy,
1386 pub max_alerts_per_window: usize,
1388}
1389
1390#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1392pub enum AlertAggregationStrategy {
1393 Count,
1395 SeverityBased,
1397 MetricBased,
1399 TimeBased,
1401}
1402
1403#[derive(Debug, Clone, Serialize, Deserialize)]
1405pub struct ReportingConfig {
1406 pub enabled: bool,
1408 pub report_types: Vec<ReportType>,
1410 pub frequency: Duration,
1412 pub format: ReportFormat,
1414 pub distribution: ReportDistribution,
1416}
1417
1418#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1420pub enum ReportType {
1421 Performance,
1423 ResourceUtilization,
1425 QualityMetrics,
1427 CostAnalysis,
1429 CapacityPlanning,
1431 SLACompliance,
1433}
1434
1435#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
1437pub enum ReportFormat {
1438 PDF,
1440 HTML,
1442 JSON,
1444 CSV,
1446 Excel,
1448}
1449
1450#[derive(Debug, Clone, Serialize, Deserialize)]
1452pub struct ReportDistribution {
1453 pub email_recipients: Vec<String>,
1455 pub file_location: Option<String>,
1457 pub cloud_location: Option<String>,
1459 pub api_endpoints: Vec<String>,
1461}