use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct HardwareAdaptationConfig {
pub enable_hardware_aware: bool,
pub device_characterization: DeviceCharacterizationConfig,
pub dynamic_calibration: DynamicCalibrationConfig,
pub failure_handling: FailureHandlingConfig,
pub resource_optimization: ResourceOptimizationConfig,
}
#[derive(Debug, Clone)]
pub struct DeviceCharacterizationConfig {
pub enable_characterization: bool,
pub characterization_depth: CharacterizationDepth,
pub characterization_frequency: Duration,
pub calibration_integration: CalibrationIntegrationConfig,
pub performance_modeling: PerformanceModelingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CharacterizationDepth {
Basic,
Standard,
Comprehensive,
ExhaustiveCharacterization,
}
#[derive(Debug, Clone)]
pub struct CalibrationIntegrationConfig {
pub enable_integration: bool,
pub realtime_updates: bool,
pub calibration_sources: Vec<CalibrationSource>,
pub update_strategy: CalibrationUpdateStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CalibrationSource {
DeviceProvider,
LocalMeasurement,
CommunityDatabase,
MachineLearningPrediction,
HybridSources,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CalibrationUpdateStrategy {
Immediate,
Batch,
Scheduled,
EventDriven,
Adaptive,
}
#[derive(Debug, Clone)]
pub struct PerformanceModelingConfig {
pub enable_modeling: bool,
pub modeling_approaches: Vec<ModelingApproach>,
pub model_validation: ModelValidationConfig,
pub accuracy_requirements: ModelAccuracyRequirements,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ModelingApproach {
StatisticalModeling,
MachineLearningBased,
PhysicsInformed,
HybridModeling,
EmpiricalModeling,
}
#[derive(Debug, Clone)]
pub struct ModelValidationConfig {
pub validation_methods: Vec<ValidationMethod>,
pub validation_frequency: Duration,
pub cross_validation: CrossValidationSetup,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ValidationMethod {
HoldoutValidation,
CrossValidation,
BootstrapValidation,
TimeSeriesValidation,
PhysicsBasedValidation,
}
#[derive(Debug, Clone)]
pub struct CrossValidationSetup {
pub folds: usize,
pub stratification: StratificationStrategy,
pub temporal_considerations: TemporalConsiderations,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum StratificationStrategy {
Random,
Temporal,
DeviceBased,
PerformanceBased,
Balanced,
}
#[derive(Debug, Clone)]
pub struct TemporalConsiderations {
pub respect_temporal_order: bool,
pub temporal_gap: Duration,
pub seasonal_adjustments: bool,
}
#[derive(Debug, Clone)]
pub struct ModelAccuracyRequirements {
pub min_r_squared: f64,
pub max_rmse: f64,
pub max_mae: f64,
pub confidence_interval: ConfidenceIntervalRequirements,
}
#[derive(Debug, Clone)]
pub struct ConfidenceIntervalRequirements {
pub confidence_level: f64,
pub max_interval_width: f64,
pub coverage_requirements: f64,
}
#[derive(Debug, Clone)]
pub struct DynamicCalibrationConfig {
pub enable_dynamic_calibration: bool,
pub calibration_triggers: Vec<CalibrationTrigger>,
pub calibration_strategy: CalibrationStrategy,
pub frequency_limits: CalibrationFrequencyLimits,
pub quality_assurance: CalibrationQualityAssurance,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CalibrationTrigger {
TimeInterval,
PerformanceDrift,
ErrorRateIncrease,
TemperatureChange,
ManualRequest,
AutomaticDetection,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CalibrationStrategy {
FullRecalibration,
IncrementalUpdate,
SelectiveCalibration,
PredictiveCalibration,
AdaptiveCalibration,
}
#[derive(Debug, Clone)]
pub struct CalibrationFrequencyLimits {
pub min_interval: Duration,
pub max_per_day: usize,
pub emergency_limits: EmergencyCalibrationLimits,
}
#[derive(Debug, Clone)]
pub struct EmergencyCalibrationLimits {
pub allow_emergency: bool,
pub max_emergency_per_hour: usize,
pub emergency_threshold: f64,
}
#[derive(Debug, Clone)]
pub struct CalibrationQualityAssurance {
pub quality_metrics: Vec<CalibrationQualityMetric>,
pub validation_requirements: CalibrationValidationRequirements,
pub rollback_strategy: CalibrationRollbackStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CalibrationQualityMetric {
Repeatability,
Accuracy,
Stability,
Drift,
Consistency,
}
#[derive(Debug, Clone)]
pub struct CalibrationValidationRequirements {
pub min_validation_samples: usize,
pub accuracy_threshold: f64,
pub significance_level: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CalibrationRollbackStrategy {
PreviousCalibration,
DefaultCalibration,
InterpolatedCalibration,
ManualIntervention,
}
#[derive(Debug, Clone)]
pub struct FailureHandlingConfig {
pub enable_failure_handling: bool,
pub failure_detection: FailureDetectionConfig,
pub recovery_strategies: Vec<RecoveryStrategy>,
pub escalation_procedures: EscalationProcedures,
}
#[derive(Debug, Clone)]
pub struct FailureDetectionConfig {
pub detection_methods: Vec<FailureDetectionMethod>,
pub detection_sensitivity: f64,
pub monitoring_intervals: MonitoringIntervals,
pub alert_thresholds: AlertThresholds,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FailureDetectionMethod {
PerformanceMonitoring,
ErrorRateTracking,
PatternRecognition,
AnomalyDetection,
PhysicalSensorMonitoring,
StatisticalAnalysis,
}
#[derive(Debug, Clone)]
pub struct MonitoringIntervals {
pub performance_interval: Duration,
pub error_rate_interval: Duration,
pub health_check_interval: Duration,
}
#[derive(Debug, Clone)]
pub struct AlertThresholds {
pub performance_threshold: f64,
pub error_rate_threshold: f64,
pub anomaly_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RecoveryStrategy {
Recalibration,
ComponentReset,
AlternativeRouting,
GracefulDegradation,
ServiceReplacement,
ManualIntervention,
}
#[derive(Debug, Clone, Default)]
pub struct EscalationProcedures {
pub escalation_levels: Vec<EscalationLevel>,
pub escalation_timeouts: HashMap<String, Duration>,
pub notification_procedures: NotificationProcedures,
}
#[derive(Debug, Clone)]
pub struct EscalationLevel {
pub level_name: String,
pub severity_threshold: f64,
pub required_actions: Vec<String>,
pub responsible_parties: Vec<String>,
}
#[derive(Debug, Clone)]
pub struct NotificationProcedures {
pub channels: Vec<NotificationChannel>,
pub content_templates: HashMap<String, String>,
pub delivery_preferences: DeliveryPreferences,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NotificationChannel {
Email,
SMS,
Slack,
PagerDuty,
Dashboard,
API,
}
#[derive(Debug, Clone)]
pub struct DeliveryPreferences {
pub priority_routing: bool,
pub confirmation_required: bool,
pub retry_attempts: usize,
pub retry_intervals: Vec<Duration>,
}
#[derive(Debug, Clone)]
pub struct ResourceOptimizationConfig {
pub enable_optimization: bool,
pub optimization_strategies: Vec<ResourceOptimizationStrategy>,
pub resource_allocation: ResourceAllocationConfig,
pub load_balancing: LoadBalancingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ResourceOptimizationStrategy {
MinimizeLatency,
MaximizeThroughput,
MinimizeEnergyConsumption,
BalancedOptimization,
CustomOptimization(String),
}
#[derive(Debug, Clone)]
pub struct ResourceAllocationConfig {
pub allocation_strategy: AllocationStrategy,
pub priority_allocation: PriorityAllocationConfig,
pub dynamic_reallocation: DynamicReallocationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AllocationStrategy {
FirstFit,
BestFit,
WorstFit,
RoundRobin,
PerformanceBased,
PredictiveBased,
}
#[derive(Debug, Clone)]
pub struct PriorityAllocationConfig {
pub enable_priority: bool,
pub priority_levels: Vec<PriorityLevel>,
pub preemption_policy: PreemptionPolicy,
}
#[derive(Debug, Clone)]
pub struct PriorityLevel {
pub name: String,
pub value: i32,
pub resource_guarantees: ResourceGuarantees,
}
#[derive(Debug, Clone)]
pub struct ResourceGuarantees {
pub min_cpu: f64,
pub min_memory: f64,
pub max_latency: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PreemptionPolicy {
NoPreemption,
PriorityBased,
FairShare,
TimeSlicing,
Cooperative,
}
#[derive(Debug, Clone)]
pub struct DynamicReallocationConfig {
pub enable_reallocation: bool,
pub triggers: Vec<ReallocationTrigger>,
pub frequency: ReallocationFrequency,
pub migration_strategy: MigrationStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ReallocationTrigger {
LoadImbalance,
PerformanceDegradation,
ResourceContention,
ScheduledMaintenance,
ManualRequest,
}
#[derive(Debug, Clone)]
pub struct ReallocationFrequency {
pub base_interval: Duration,
pub adaptive_frequency: bool,
pub max_frequency: Duration,
pub min_frequency: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MigrationStrategy {
LiveMigration,
CheckpointRestart,
GracefulShutdown,
ForceTermination,
}
#[derive(Debug, Clone)]
pub struct LoadBalancingConfig {
pub enable_load_balancing: bool,
pub algorithms: Vec<LoadBalancingAlgorithm>,
pub health_checking: HealthCheckingConfig,
pub traffic_distribution: TrafficDistributionConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LoadBalancingAlgorithm {
RoundRobin,
WeightedRoundRobin,
LeastConnections,
PerformanceBased,
HashBased,
AdaptiveBalancing,
}
#[derive(Debug, Clone)]
pub struct HealthCheckingConfig {
pub check_interval: Duration,
pub check_timeout: Duration,
pub failure_threshold: usize,
pub recovery_threshold: usize,
}
#[derive(Debug, Clone)]
pub struct TrafficDistributionConfig {
pub strategy: DistributionStrategy,
pub weight_assignment: WeightAssignmentStrategy,
pub sticky_sessions: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DistributionStrategy {
Uniform,
Weighted,
PerformanceBased,
CapacityBased,
LatencyBased,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum WeightAssignmentStrategy {
Static,
Dynamic,
PerformanceBased,
CapacityBased,
Historical,
}
impl Default for HardwareAdaptationConfig {
fn default() -> Self {
Self {
enable_hardware_aware: true,
device_characterization: DeviceCharacterizationConfig::default(),
dynamic_calibration: DynamicCalibrationConfig::default(),
failure_handling: FailureHandlingConfig::default(),
resource_optimization: ResourceOptimizationConfig::default(),
}
}
}
impl Default for DeviceCharacterizationConfig {
fn default() -> Self {
Self {
enable_characterization: true,
characterization_depth: CharacterizationDepth::Standard,
characterization_frequency: Duration::from_secs(3600), calibration_integration: CalibrationIntegrationConfig::default(),
performance_modeling: PerformanceModelingConfig::default(),
}
}
}
impl Default for CalibrationIntegrationConfig {
fn default() -> Self {
Self {
enable_integration: true,
realtime_updates: true,
calibration_sources: vec![
CalibrationSource::DeviceProvider,
CalibrationSource::LocalMeasurement,
],
update_strategy: CalibrationUpdateStrategy::Adaptive,
}
}
}
impl Default for PerformanceModelingConfig {
fn default() -> Self {
Self {
enable_modeling: true,
modeling_approaches: vec![
ModelingApproach::StatisticalModeling,
ModelingApproach::MachineLearningBased,
],
model_validation: ModelValidationConfig::default(),
accuracy_requirements: ModelAccuracyRequirements::default(),
}
}
}
impl Default for ModelValidationConfig {
fn default() -> Self {
Self {
validation_methods: vec![ValidationMethod::CrossValidation],
validation_frequency: Duration::from_secs(86400), cross_validation: CrossValidationSetup::default(),
}
}
}
impl Default for CrossValidationSetup {
fn default() -> Self {
Self {
folds: 5,
stratification: StratificationStrategy::Random,
temporal_considerations: TemporalConsiderations::default(),
}
}
}
impl Default for TemporalConsiderations {
fn default() -> Self {
Self {
respect_temporal_order: true,
temporal_gap: Duration::from_secs(300), seasonal_adjustments: false,
}
}
}
impl Default for ModelAccuracyRequirements {
fn default() -> Self {
Self {
min_r_squared: 0.8,
max_rmse: 0.1,
max_mae: 0.05,
confidence_interval: ConfidenceIntervalRequirements::default(),
}
}
}
impl Default for ConfidenceIntervalRequirements {
fn default() -> Self {
Self {
confidence_level: 0.95,
max_interval_width: 0.2,
coverage_requirements: 0.95,
}
}
}
impl Default for DynamicCalibrationConfig {
fn default() -> Self {
Self {
enable_dynamic_calibration: true,
calibration_triggers: vec![
CalibrationTrigger::TimeInterval,
CalibrationTrigger::PerformanceDrift,
],
calibration_strategy: CalibrationStrategy::AdaptiveCalibration,
frequency_limits: CalibrationFrequencyLimits::default(),
quality_assurance: CalibrationQualityAssurance::default(),
}
}
}
impl Default for CalibrationFrequencyLimits {
fn default() -> Self {
Self {
min_interval: Duration::from_secs(300), max_per_day: 48,
emergency_limits: EmergencyCalibrationLimits::default(),
}
}
}
impl Default for EmergencyCalibrationLimits {
fn default() -> Self {
Self {
allow_emergency: true,
max_emergency_per_hour: 3,
emergency_threshold: 0.01, }
}
}
impl Default for CalibrationQualityAssurance {
fn default() -> Self {
Self {
quality_metrics: vec![
CalibrationQualityMetric::Accuracy,
CalibrationQualityMetric::Repeatability,
],
validation_requirements: CalibrationValidationRequirements::default(),
rollback_strategy: CalibrationRollbackStrategy::PreviousCalibration,
}
}
}
impl Default for CalibrationValidationRequirements {
fn default() -> Self {
Self {
min_validation_samples: 10,
accuracy_threshold: 0.95,
significance_level: 0.05,
}
}
}
impl Default for FailureHandlingConfig {
fn default() -> Self {
Self {
enable_failure_handling: true,
failure_detection: FailureDetectionConfig::default(),
recovery_strategies: vec![
RecoveryStrategy::Recalibration,
RecoveryStrategy::GracefulDegradation,
],
escalation_procedures: EscalationProcedures::default(),
}
}
}
impl Default for FailureDetectionConfig {
fn default() -> Self {
Self {
detection_methods: vec![
FailureDetectionMethod::PerformanceMonitoring,
FailureDetectionMethod::ErrorRateTracking,
],
detection_sensitivity: 0.95,
monitoring_intervals: MonitoringIntervals::default(),
alert_thresholds: AlertThresholds::default(),
}
}
}
impl Default for MonitoringIntervals {
fn default() -> Self {
Self {
performance_interval: Duration::from_secs(60),
error_rate_interval: Duration::from_secs(30),
health_check_interval: Duration::from_secs(300),
}
}
}
impl Default for AlertThresholds {
fn default() -> Self {
Self {
performance_threshold: 0.1, error_rate_threshold: 0.05, anomaly_threshold: 2.0, }
}
}
impl Default for NotificationProcedures {
fn default() -> Self {
Self {
channels: vec![NotificationChannel::Dashboard],
content_templates: HashMap::new(),
delivery_preferences: DeliveryPreferences::default(),
}
}
}
impl Default for DeliveryPreferences {
fn default() -> Self {
Self {
priority_routing: true,
confirmation_required: false,
retry_attempts: 3,
retry_intervals: vec![
Duration::from_secs(60),
Duration::from_secs(300),
Duration::from_secs(900),
],
}
}
}
impl Default for ResourceOptimizationConfig {
fn default() -> Self {
Self {
enable_optimization: true,
optimization_strategies: vec![ResourceOptimizationStrategy::BalancedOptimization],
resource_allocation: ResourceAllocationConfig::default(),
load_balancing: LoadBalancingConfig::default(),
}
}
}
impl Default for ResourceAllocationConfig {
fn default() -> Self {
Self {
allocation_strategy: AllocationStrategy::PerformanceBased,
priority_allocation: PriorityAllocationConfig::default(),
dynamic_reallocation: DynamicReallocationConfig::default(),
}
}
}
impl Default for PriorityAllocationConfig {
fn default() -> Self {
Self {
enable_priority: true,
priority_levels: vec![],
preemption_policy: PreemptionPolicy::PriorityBased,
}
}
}
impl Default for DynamicReallocationConfig {
fn default() -> Self {
Self {
enable_reallocation: true,
triggers: vec![
ReallocationTrigger::LoadImbalance,
ReallocationTrigger::PerformanceDegradation,
],
frequency: ReallocationFrequency::default(),
migration_strategy: MigrationStrategy::LiveMigration,
}
}
}
impl Default for ReallocationFrequency {
fn default() -> Self {
Self {
base_interval: Duration::from_secs(300),
adaptive_frequency: true,
max_frequency: Duration::from_secs(60),
min_frequency: Duration::from_secs(3600),
}
}
}
impl Default for LoadBalancingConfig {
fn default() -> Self {
Self {
enable_load_balancing: true,
algorithms: vec![LoadBalancingAlgorithm::PerformanceBased],
health_checking: HealthCheckingConfig::default(),
traffic_distribution: TrafficDistributionConfig::default(),
}
}
}
impl Default for HealthCheckingConfig {
fn default() -> Self {
Self {
check_interval: Duration::from_secs(30),
check_timeout: Duration::from_secs(5),
failure_threshold: 3,
recovery_threshold: 2,
}
}
}
impl Default for TrafficDistributionConfig {
fn default() -> Self {
Self {
strategy: DistributionStrategy::PerformanceBased,
weight_assignment: WeightAssignmentStrategy::Dynamic,
sticky_sessions: false,
}
}
}