1use std::collections::HashMap;
4use std::time::Duration;
5
6#[derive(Debug, Clone)]
8pub struct HardwareAdaptationConfig {
9 pub enable_hardware_aware: bool,
11 pub device_characterization: DeviceCharacterizationConfig,
13 pub dynamic_calibration: DynamicCalibrationConfig,
15 pub failure_handling: FailureHandlingConfig,
17 pub resource_optimization: ResourceOptimizationConfig,
19}
20
21#[derive(Debug, Clone)]
23pub struct DeviceCharacterizationConfig {
24 pub enable_characterization: bool,
26 pub characterization_depth: CharacterizationDepth,
28 pub characterization_frequency: Duration,
30 pub calibration_integration: CalibrationIntegrationConfig,
32 pub performance_modeling: PerformanceModelingConfig,
34}
35
36#[derive(Debug, Clone, PartialEq)]
38pub enum CharacterizationDepth {
39 Basic,
40 Standard,
41 Comprehensive,
42 ExhaustiveCharacterization,
43}
44
45#[derive(Debug, Clone)]
47pub struct CalibrationIntegrationConfig {
48 pub enable_integration: bool,
50 pub realtime_updates: bool,
52 pub calibration_sources: Vec<CalibrationSource>,
54 pub update_strategy: CalibrationUpdateStrategy,
56}
57
58#[derive(Debug, Clone, PartialEq)]
60pub enum CalibrationSource {
61 DeviceProvider,
62 LocalMeasurement,
63 CommunityDatabase,
64 MachineLearningPrediction,
65 HybridSources,
66}
67
68#[derive(Debug, Clone, PartialEq)]
70pub enum CalibrationUpdateStrategy {
71 Immediate,
72 Batch,
73 Scheduled,
74 EventDriven,
75 Adaptive,
76}
77
78#[derive(Debug, Clone)]
80pub struct PerformanceModelingConfig {
81 pub enable_modeling: bool,
83 pub modeling_approaches: Vec<ModelingApproach>,
85 pub model_validation: ModelValidationConfig,
87 pub accuracy_requirements: ModelAccuracyRequirements,
89}
90
91#[derive(Debug, Clone, PartialEq)]
93pub enum ModelingApproach {
94 StatisticalModeling,
95 MachineLearningBased,
96 PhysicsInformed,
97 HybridModeling,
98 EmpiricalModeling,
99}
100
101#[derive(Debug, Clone)]
103pub struct ModelValidationConfig {
104 pub validation_methods: Vec<ValidationMethod>,
106 pub validation_frequency: Duration,
108 pub cross_validation: CrossValidationSetup,
110}
111
112#[derive(Debug, Clone, PartialEq)]
114pub enum ValidationMethod {
115 HoldoutValidation,
116 CrossValidation,
117 BootstrapValidation,
118 TimeSeriesValidation,
119 PhysicsBasedValidation,
120}
121
122#[derive(Debug, Clone)]
124pub struct CrossValidationSetup {
125 pub folds: usize,
127 pub stratification: StratificationStrategy,
129 pub temporal_considerations: TemporalConsiderations,
131}
132
133#[derive(Debug, Clone, PartialEq)]
135pub enum StratificationStrategy {
136 Random,
137 Temporal,
138 DeviceBased,
139 PerformanceBased,
140 Balanced,
141}
142
143#[derive(Debug, Clone)]
145pub struct TemporalConsiderations {
146 pub respect_temporal_order: bool,
148 pub temporal_gap: Duration,
150 pub seasonal_adjustments: bool,
152}
153
154#[derive(Debug, Clone)]
156pub struct ModelAccuracyRequirements {
157 pub min_r_squared: f64,
159 pub max_rmse: f64,
161 pub max_mae: f64,
163 pub confidence_interval: ConfidenceIntervalRequirements,
165}
166
167#[derive(Debug, Clone)]
169pub struct ConfidenceIntervalRequirements {
170 pub confidence_level: f64,
172 pub max_interval_width: f64,
174 pub coverage_requirements: f64,
176}
177
178#[derive(Debug, Clone)]
180pub struct DynamicCalibrationConfig {
181 pub enable_dynamic_calibration: bool,
183 pub calibration_triggers: Vec<CalibrationTrigger>,
185 pub calibration_strategy: CalibrationStrategy,
187 pub frequency_limits: CalibrationFrequencyLimits,
189 pub quality_assurance: CalibrationQualityAssurance,
191}
192
193#[derive(Debug, Clone, PartialEq)]
195pub enum CalibrationTrigger {
196 TimeInterval,
197 PerformanceDrift,
198 ErrorRateIncrease,
199 TemperatureChange,
200 ManualRequest,
201 AutomaticDetection,
202}
203
204#[derive(Debug, Clone, PartialEq)]
206pub enum CalibrationStrategy {
207 FullRecalibration,
208 IncrementalUpdate,
209 SelectiveCalibration,
210 PredictiveCalibration,
211 AdaptiveCalibration,
212}
213
214#[derive(Debug, Clone)]
216pub struct CalibrationFrequencyLimits {
217 pub min_interval: Duration,
219 pub max_per_day: usize,
221 pub emergency_limits: EmergencyCalibrationLimits,
223}
224
225#[derive(Debug, Clone)]
227pub struct EmergencyCalibrationLimits {
228 pub allow_emergency: bool,
230 pub max_emergency_per_hour: usize,
232 pub emergency_threshold: f64,
234}
235
236#[derive(Debug, Clone)]
238pub struct CalibrationQualityAssurance {
239 pub quality_metrics: Vec<CalibrationQualityMetric>,
241 pub validation_requirements: CalibrationValidationRequirements,
243 pub rollback_strategy: CalibrationRollbackStrategy,
245}
246
247#[derive(Debug, Clone, PartialEq)]
249pub enum CalibrationQualityMetric {
250 Repeatability,
251 Accuracy,
252 Stability,
253 Drift,
254 Consistency,
255}
256
257#[derive(Debug, Clone)]
259pub struct CalibrationValidationRequirements {
260 pub min_validation_samples: usize,
262 pub accuracy_threshold: f64,
264 pub significance_level: f64,
266}
267
268#[derive(Debug, Clone, PartialEq)]
270pub enum CalibrationRollbackStrategy {
271 PreviousCalibration,
272 DefaultCalibration,
273 InterpolatedCalibration,
274 ManualIntervention,
275}
276
277#[derive(Debug, Clone)]
279pub struct FailureHandlingConfig {
280 pub enable_failure_handling: bool,
282 pub failure_detection: FailureDetectionConfig,
284 pub recovery_strategies: Vec<RecoveryStrategy>,
286 pub escalation_procedures: EscalationProcedures,
288}
289
290#[derive(Debug, Clone)]
292pub struct FailureDetectionConfig {
293 pub detection_methods: Vec<FailureDetectionMethod>,
295 pub detection_sensitivity: f64,
297 pub monitoring_intervals: MonitoringIntervals,
299 pub alert_thresholds: AlertThresholds,
301}
302
303#[derive(Debug, Clone, PartialEq)]
305pub enum FailureDetectionMethod {
306 PerformanceMonitoring,
307 ErrorRateTracking,
308 PatternRecognition,
309 AnomalyDetection,
310 PhysicalSensorMonitoring,
311 StatisticalAnalysis,
312}
313
314#[derive(Debug, Clone)]
316pub struct MonitoringIntervals {
317 pub performance_interval: Duration,
319 pub error_rate_interval: Duration,
321 pub health_check_interval: Duration,
323}
324
325#[derive(Debug, Clone)]
327pub struct AlertThresholds {
328 pub performance_threshold: f64,
330 pub error_rate_threshold: f64,
332 pub anomaly_threshold: f64,
334}
335
336#[derive(Debug, Clone, PartialEq)]
338pub enum RecoveryStrategy {
339 Recalibration,
340 ComponentReset,
341 AlternativeRouting,
342 GracefulDegradation,
343 ServiceReplacement,
344 ManualIntervention,
345}
346
347#[derive(Debug, Clone)]
349pub struct EscalationProcedures {
350 pub escalation_levels: Vec<EscalationLevel>,
352 pub escalation_timeouts: HashMap<String, Duration>,
354 pub notification_procedures: NotificationProcedures,
356}
357
358#[derive(Debug, Clone)]
360pub struct EscalationLevel {
361 pub level_name: String,
363 pub severity_threshold: f64,
365 pub required_actions: Vec<String>,
367 pub responsible_parties: Vec<String>,
369}
370
371#[derive(Debug, Clone)]
373pub struct NotificationProcedures {
374 pub channels: Vec<NotificationChannel>,
376 pub content_templates: HashMap<String, String>,
378 pub delivery_preferences: DeliveryPreferences,
380}
381
382#[derive(Debug, Clone, PartialEq)]
384pub enum NotificationChannel {
385 Email,
386 SMS,
387 Slack,
388 PagerDuty,
389 Dashboard,
390 API,
391}
392
393#[derive(Debug, Clone)]
395pub struct DeliveryPreferences {
396 pub priority_routing: bool,
398 pub confirmation_required: bool,
400 pub retry_attempts: usize,
402 pub retry_intervals: Vec<Duration>,
404}
405
406#[derive(Debug, Clone)]
408pub struct ResourceOptimizationConfig {
409 pub enable_optimization: bool,
411 pub optimization_strategies: Vec<ResourceOptimizationStrategy>,
413 pub resource_allocation: ResourceAllocationConfig,
415 pub load_balancing: LoadBalancingConfig,
417}
418
419#[derive(Debug, Clone, PartialEq)]
421pub enum ResourceOptimizationStrategy {
422 MinimizeLatency,
423 MaximizeThroughput,
424 MinimizeEnergyConsumption,
425 BalancedOptimization,
426 CustomOptimization(String),
427}
428
429#[derive(Debug, Clone)]
431pub struct ResourceAllocationConfig {
432 pub allocation_strategy: AllocationStrategy,
434 pub priority_allocation: PriorityAllocationConfig,
436 pub dynamic_reallocation: DynamicReallocationConfig,
438}
439
440#[derive(Debug, Clone, PartialEq)]
442pub enum AllocationStrategy {
443 FirstFit,
444 BestFit,
445 WorstFit,
446 RoundRobin,
447 PerformanceBased,
448 PredictiveBased,
449}
450
451#[derive(Debug, Clone)]
453pub struct PriorityAllocationConfig {
454 pub enable_priority: bool,
456 pub priority_levels: Vec<PriorityLevel>,
458 pub preemption_policy: PreemptionPolicy,
460}
461
462#[derive(Debug, Clone)]
464pub struct PriorityLevel {
465 pub name: String,
467 pub value: i32,
469 pub resource_guarantees: ResourceGuarantees,
471}
472
473#[derive(Debug, Clone)]
475pub struct ResourceGuarantees {
476 pub min_cpu: f64,
478 pub min_memory: f64,
480 pub max_latency: Duration,
482}
483
484#[derive(Debug, Clone, PartialEq)]
486pub enum PreemptionPolicy {
487 NoPreemption,
488 PriorityBased,
489 FairShare,
490 TimeSlicing,
491 Cooperative,
492}
493
494#[derive(Debug, Clone)]
496pub struct DynamicReallocationConfig {
497 pub enable_reallocation: bool,
499 pub triggers: Vec<ReallocationTrigger>,
501 pub frequency: ReallocationFrequency,
503 pub migration_strategy: MigrationStrategy,
505}
506
507#[derive(Debug, Clone, PartialEq)]
509pub enum ReallocationTrigger {
510 LoadImbalance,
511 PerformanceDegradation,
512 ResourceContention,
513 ScheduledMaintenance,
514 ManualRequest,
515}
516
517#[derive(Debug, Clone)]
519pub struct ReallocationFrequency {
520 pub base_interval: Duration,
522 pub adaptive_frequency: bool,
524 pub max_frequency: Duration,
526 pub min_frequency: Duration,
528}
529
530#[derive(Debug, Clone, PartialEq)]
532pub enum MigrationStrategy {
533 LiveMigration,
534 CheckpointRestart,
535 GracefulShutdown,
536 ForceTermination,
537}
538
539#[derive(Debug, Clone)]
541pub struct LoadBalancingConfig {
542 pub enable_load_balancing: bool,
544 pub algorithms: Vec<LoadBalancingAlgorithm>,
546 pub health_checking: HealthCheckingConfig,
548 pub traffic_distribution: TrafficDistributionConfig,
550}
551
552#[derive(Debug, Clone, PartialEq)]
554pub enum LoadBalancingAlgorithm {
555 RoundRobin,
556 WeightedRoundRobin,
557 LeastConnections,
558 PerformanceBased,
559 HashBased,
560 AdaptiveBalancing,
561}
562
563#[derive(Debug, Clone)]
565pub struct HealthCheckingConfig {
566 pub check_interval: Duration,
568 pub check_timeout: Duration,
570 pub failure_threshold: usize,
572 pub recovery_threshold: usize,
574}
575
576#[derive(Debug, Clone)]
578pub struct TrafficDistributionConfig {
579 pub strategy: DistributionStrategy,
581 pub weight_assignment: WeightAssignmentStrategy,
583 pub sticky_sessions: bool,
585}
586
587#[derive(Debug, Clone, PartialEq)]
589pub enum DistributionStrategy {
590 Uniform,
591 Weighted,
592 PerformanceBased,
593 CapacityBased,
594 LatencyBased,
595}
596
597#[derive(Debug, Clone, PartialEq)]
599pub enum WeightAssignmentStrategy {
600 Static,
601 Dynamic,
602 PerformanceBased,
603 CapacityBased,
604 Historical,
605}
606
607impl Default for HardwareAdaptationConfig {
610 fn default() -> Self {
611 Self {
612 enable_hardware_aware: true,
613 device_characterization: DeviceCharacterizationConfig::default(),
614 dynamic_calibration: DynamicCalibrationConfig::default(),
615 failure_handling: FailureHandlingConfig::default(),
616 resource_optimization: ResourceOptimizationConfig::default(),
617 }
618 }
619}
620
621impl Default for DeviceCharacterizationConfig {
622 fn default() -> Self {
623 Self {
624 enable_characterization: true,
625 characterization_depth: CharacterizationDepth::Standard,
626 characterization_frequency: Duration::from_secs(3600), calibration_integration: CalibrationIntegrationConfig::default(),
628 performance_modeling: PerformanceModelingConfig::default(),
629 }
630 }
631}
632
633impl Default for CalibrationIntegrationConfig {
634 fn default() -> Self {
635 Self {
636 enable_integration: true,
637 realtime_updates: true,
638 calibration_sources: vec![
639 CalibrationSource::DeviceProvider,
640 CalibrationSource::LocalMeasurement,
641 ],
642 update_strategy: CalibrationUpdateStrategy::Adaptive,
643 }
644 }
645}
646
647impl Default for PerformanceModelingConfig {
648 fn default() -> Self {
649 Self {
650 enable_modeling: true,
651 modeling_approaches: vec![
652 ModelingApproach::StatisticalModeling,
653 ModelingApproach::MachineLearningBased,
654 ],
655 model_validation: ModelValidationConfig::default(),
656 accuracy_requirements: ModelAccuracyRequirements::default(),
657 }
658 }
659}
660
661impl Default for ModelValidationConfig {
662 fn default() -> Self {
663 Self {
664 validation_methods: vec![ValidationMethod::CrossValidation],
665 validation_frequency: Duration::from_secs(86400), cross_validation: CrossValidationSetup::default(),
667 }
668 }
669}
670
671impl Default for CrossValidationSetup {
672 fn default() -> Self {
673 Self {
674 folds: 5,
675 stratification: StratificationStrategy::Random,
676 temporal_considerations: TemporalConsiderations::default(),
677 }
678 }
679}
680
681impl Default for TemporalConsiderations {
682 fn default() -> Self {
683 Self {
684 respect_temporal_order: true,
685 temporal_gap: Duration::from_secs(300), seasonal_adjustments: false,
687 }
688 }
689}
690
691impl Default for ModelAccuracyRequirements {
692 fn default() -> Self {
693 Self {
694 min_r_squared: 0.8,
695 max_rmse: 0.1,
696 max_mae: 0.05,
697 confidence_interval: ConfidenceIntervalRequirements::default(),
698 }
699 }
700}
701
702impl Default for ConfidenceIntervalRequirements {
703 fn default() -> Self {
704 Self {
705 confidence_level: 0.95,
706 max_interval_width: 0.2,
707 coverage_requirements: 0.95,
708 }
709 }
710}
711
712impl Default for DynamicCalibrationConfig {
713 fn default() -> Self {
714 Self {
715 enable_dynamic_calibration: true,
716 calibration_triggers: vec![
717 CalibrationTrigger::TimeInterval,
718 CalibrationTrigger::PerformanceDrift,
719 ],
720 calibration_strategy: CalibrationStrategy::AdaptiveCalibration,
721 frequency_limits: CalibrationFrequencyLimits::default(),
722 quality_assurance: CalibrationQualityAssurance::default(),
723 }
724 }
725}
726
727impl Default for CalibrationFrequencyLimits {
728 fn default() -> Self {
729 Self {
730 min_interval: Duration::from_secs(300), max_per_day: 48,
732 emergency_limits: EmergencyCalibrationLimits::default(),
733 }
734 }
735}
736
737impl Default for EmergencyCalibrationLimits {
738 fn default() -> Self {
739 Self {
740 allow_emergency: true,
741 max_emergency_per_hour: 3,
742 emergency_threshold: 0.01, }
744 }
745}
746
747impl Default for CalibrationQualityAssurance {
748 fn default() -> Self {
749 Self {
750 quality_metrics: vec![
751 CalibrationQualityMetric::Accuracy,
752 CalibrationQualityMetric::Repeatability,
753 ],
754 validation_requirements: CalibrationValidationRequirements::default(),
755 rollback_strategy: CalibrationRollbackStrategy::PreviousCalibration,
756 }
757 }
758}
759
760impl Default for CalibrationValidationRequirements {
761 fn default() -> Self {
762 Self {
763 min_validation_samples: 10,
764 accuracy_threshold: 0.95,
765 significance_level: 0.05,
766 }
767 }
768}
769
770impl Default for FailureHandlingConfig {
771 fn default() -> Self {
772 Self {
773 enable_failure_handling: true,
774 failure_detection: FailureDetectionConfig::default(),
775 recovery_strategies: vec![
776 RecoveryStrategy::Recalibration,
777 RecoveryStrategy::GracefulDegradation,
778 ],
779 escalation_procedures: EscalationProcedures::default(),
780 }
781 }
782}
783
784impl Default for FailureDetectionConfig {
785 fn default() -> Self {
786 Self {
787 detection_methods: vec![
788 FailureDetectionMethod::PerformanceMonitoring,
789 FailureDetectionMethod::ErrorRateTracking,
790 ],
791 detection_sensitivity: 0.95,
792 monitoring_intervals: MonitoringIntervals::default(),
793 alert_thresholds: AlertThresholds::default(),
794 }
795 }
796}
797
798impl Default for MonitoringIntervals {
799 fn default() -> Self {
800 Self {
801 performance_interval: Duration::from_secs(60),
802 error_rate_interval: Duration::from_secs(30),
803 health_check_interval: Duration::from_secs(300),
804 }
805 }
806}
807
808impl Default for AlertThresholds {
809 fn default() -> Self {
810 Self {
811 performance_threshold: 0.1, error_rate_threshold: 0.05, anomaly_threshold: 2.0, }
815 }
816}
817
818impl Default for EscalationProcedures {
819 fn default() -> Self {
820 Self {
821 escalation_levels: vec![],
822 escalation_timeouts: HashMap::new(),
823 notification_procedures: NotificationProcedures::default(),
824 }
825 }
826}
827
828impl Default for NotificationProcedures {
829 fn default() -> Self {
830 Self {
831 channels: vec![NotificationChannel::Dashboard],
832 content_templates: HashMap::new(),
833 delivery_preferences: DeliveryPreferences::default(),
834 }
835 }
836}
837
838impl Default for DeliveryPreferences {
839 fn default() -> Self {
840 Self {
841 priority_routing: true,
842 confirmation_required: false,
843 retry_attempts: 3,
844 retry_intervals: vec![
845 Duration::from_secs(60),
846 Duration::from_secs(300),
847 Duration::from_secs(900),
848 ],
849 }
850 }
851}
852
853impl Default for ResourceOptimizationConfig {
854 fn default() -> Self {
855 Self {
856 enable_optimization: true,
857 optimization_strategies: vec![ResourceOptimizationStrategy::BalancedOptimization],
858 resource_allocation: ResourceAllocationConfig::default(),
859 load_balancing: LoadBalancingConfig::default(),
860 }
861 }
862}
863
864impl Default for ResourceAllocationConfig {
865 fn default() -> Self {
866 Self {
867 allocation_strategy: AllocationStrategy::PerformanceBased,
868 priority_allocation: PriorityAllocationConfig::default(),
869 dynamic_reallocation: DynamicReallocationConfig::default(),
870 }
871 }
872}
873
874impl Default for PriorityAllocationConfig {
875 fn default() -> Self {
876 Self {
877 enable_priority: true,
878 priority_levels: vec![],
879 preemption_policy: PreemptionPolicy::PriorityBased,
880 }
881 }
882}
883
884impl Default for DynamicReallocationConfig {
885 fn default() -> Self {
886 Self {
887 enable_reallocation: true,
888 triggers: vec![
889 ReallocationTrigger::LoadImbalance,
890 ReallocationTrigger::PerformanceDegradation,
891 ],
892 frequency: ReallocationFrequency::default(),
893 migration_strategy: MigrationStrategy::LiveMigration,
894 }
895 }
896}
897
898impl Default for ReallocationFrequency {
899 fn default() -> Self {
900 Self {
901 base_interval: Duration::from_secs(300),
902 adaptive_frequency: true,
903 max_frequency: Duration::from_secs(60),
904 min_frequency: Duration::from_secs(3600),
905 }
906 }
907}
908
909impl Default for LoadBalancingConfig {
910 fn default() -> Self {
911 Self {
912 enable_load_balancing: true,
913 algorithms: vec![LoadBalancingAlgorithm::PerformanceBased],
914 health_checking: HealthCheckingConfig::default(),
915 traffic_distribution: TrafficDistributionConfig::default(),
916 }
917 }
918}
919
920impl Default for HealthCheckingConfig {
921 fn default() -> Self {
922 Self {
923 check_interval: Duration::from_secs(30),
924 check_timeout: Duration::from_secs(5),
925 failure_threshold: 3,
926 recovery_threshold: 2,
927 }
928 }
929}
930
931impl Default for TrafficDistributionConfig {
932 fn default() -> Self {
933 Self {
934 strategy: DistributionStrategy::PerformanceBased,
935 weight_assignment: WeightAssignmentStrategy::Dynamic,
936 sticky_sessions: false,
937 }
938 }
939}