1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::time::Duration;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct ResourceAllocationConfig {
10 pub allocation_algorithms: Vec<AllocationAlgorithm>,
12 pub optimization_objectives: Vec<ResourceOptimizationObjective>,
14 pub allocation_constraints: AllocationConstraints,
16 pub dynamic_reallocation: DynamicReallocationConfig,
18 pub predictive_allocation: PredictiveAllocationConfig,
20 pub multi_objective_config: MultiObjectiveAllocationConfig,
22}
23
24#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
26pub enum AllocationAlgorithm {
27 FirstFit,
28 BestFit,
29 WorstFit,
30 NextFit,
31 RoundRobin,
32 LoadBalanced,
33 CostOptimized,
34 PerformanceOptimized,
35 HybridOptimized,
36 MachineLearningBased,
37 GeneticAlgorithm,
38 SimulatedAnnealing,
39}
40
41#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
43pub enum ResourceOptimizationObjective {
44 MinimizeCost,
45 MaximizePerformance,
46 MinimizeLatency,
47 MaximizeUtilization,
48 MinimizeEnergyConsumption,
49 BalanceLoadDistribution,
50 OptimizeQueueTime,
51 CustomObjective(String),
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, Default)]
56pub struct AllocationConstraints {
57 pub max_memory: Option<usize>,
58 pub max_cpu: Option<usize>,
59 pub max_gpus: Option<usize>,
60 pub required_features: Vec<String>,
61 pub geographic: GeographicConstraints,
63 pub security: SecurityConstraints,
65 pub performance: PerformanceConstraints,
67 pub cost: CostConstraints,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize, Default)]
73pub struct GeographicConstraints {
74 pub allowed_regions: Vec<String>,
76 pub prohibited_regions: Vec<String>,
78 pub data_residency: DataResidencyRequirements,
80 pub latency_constraints: LatencyConstraints,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize, Default)]
86pub struct DataResidencyRequirements {
87 pub required_countries: Vec<String>,
89 pub prohibited_countries: Vec<String>,
91 pub compliance_frameworks: Vec<ComplianceFramework>,
93}
94
95#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
97pub enum ComplianceFramework {
98 GDPR,
99 HIPAA,
100 SOC2,
101 ISO27001,
102 FedRAMP,
103 Custom(String),
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct LatencyConstraints {
109 pub max_latency: Duration,
111 pub target_latency: Duration,
113 pub percentile_requirements: HashMap<String, Duration>,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
119pub struct SecurityConstraints {
120 pub required_features: Vec<SecurityFeature>,
122 pub encryption: EncryptionRequirements,
124 pub access_control: AccessControlRequirements,
126 pub audit: AuditRequirements,
128}
129
130#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
132pub enum SecurityFeature {
133 EncryptionAtRest,
134 EncryptionInTransit,
135 MultiFactorAuthentication,
136 RoleBasedAccess,
137 NetworkIsolation,
138 VPN,
139 PrivateNetworking,
140 Custom(String),
141}
142
143#[derive(Debug, Clone, Serialize, Deserialize)]
145pub struct EncryptionRequirements {
146 pub min_key_length: usize,
148 pub allowed_algorithms: Vec<String>,
150 pub key_management: KeyManagementRequirements,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize)]
156pub struct KeyManagementRequirements {
157 pub hsm_required: bool,
159 pub rotation_period: Duration,
161 pub backup_requirements: BackupRequirements,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize)]
167pub struct BackupRequirements {
168 pub frequency: Duration,
170 pub retention_period: Duration,
172 pub geo_distribution: bool,
174}
175
176#[derive(Debug, Clone, Serialize, Deserialize)]
178pub struct AccessControlRequirements {
179 pub auth_methods: Vec<AuthenticationMethod>,
181 pub authz_model: AuthorizationModel,
183 pub session_management: SessionManagement,
185}
186
187#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
189pub enum AuthenticationMethod {
190 Password,
191 TwoFactor,
192 Biometric,
193 Certificate,
194 SAML,
195 OAuth,
196 Custom(String),
197}
198
199#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
201pub enum AuthorizationModel {
202 RBAC,
203 ABAC,
204 DAC,
205 MAC,
206 Custom(String),
207}
208
209#[derive(Debug, Clone, Serialize, Deserialize)]
211pub struct SessionManagement {
212 pub timeout: Duration,
214 pub concurrent_limit: usize,
216 pub idle_timeout: Duration,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct AuditRequirements {
223 pub events: Vec<AuditEvent>,
225 pub retention_period: Duration,
227 pub integrity_protection: bool,
229}
230
231#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
233pub enum AuditEvent {
234 Login,
235 Logout,
236 DataAccess,
237 DataModification,
238 ConfigurationChange,
239 PrivilegeEscalation,
240 Custom(String),
241}
242
243#[derive(Debug, Clone, Serialize, Deserialize)]
245pub struct PerformanceConstraints {
246 pub min_performance: PerformanceRequirements,
248 pub max_degradation: f64,
250 pub sla_requirements: SLARequirements,
252}
253
254#[derive(Debug, Clone, Serialize, Deserialize)]
256pub struct PerformanceRequirements {
257 pub min_throughput: f64,
259 pub max_latency: Duration,
261 pub min_availability: f64,
263 pub custom_metrics: HashMap<String, f64>,
265}
266
267#[derive(Debug, Clone, Serialize, Deserialize)]
269pub struct SLARequirements {
270 pub uptime_sla: f64,
272 pub performance_sla: HashMap<String, f64>,
274 pub support_response_time: Duration,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize)]
280pub struct CostConstraints {
281 pub max_hourly_cost: Option<f64>,
283 pub max_daily_cost: Option<f64>,
285 pub max_monthly_cost: Option<f64>,
287 pub optimization_strategy: CostOptimizationStrategy,
289}
290
291#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
293pub enum CostOptimizationStrategy {
294 MinimizeTotal,
295 OptimizePerformancePerDollar,
296 BalanceCostPerformance,
297 PreferSpotInstances,
298 PreferReservedInstances,
299 Custom(String),
300}
301
302#[derive(Debug, Clone, Serialize, Deserialize)]
304pub struct DynamicReallocationConfig {
305 pub enable_dynamic_reallocation: bool,
306 pub reallocation_threshold: f64,
307 pub reallocation_strategies: Vec<String>,
308 pub triggers: Vec<ReallocationTrigger>,
310 pub policies: Vec<ReallocationPolicy>,
312 pub migration: MigrationSettings,
314}
315
316#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
318pub enum ReallocationTrigger {
319 ResourceUtilization,
320 PerformanceDegradation,
321 CostThreshold,
322 LoadImbalance,
323 MaintenanceWindow,
324 Custom(String),
325}
326
327#[derive(Debug, Clone, Serialize, Deserialize)]
329pub struct ReallocationPolicy {
330 pub name: String,
332 pub conditions: Vec<PolicyCondition>,
334 pub actions: Vec<PolicyAction>,
336 pub priority: u8,
338}
339
340#[derive(Debug, Clone, Serialize, Deserialize)]
342pub struct PolicyCondition {
343 pub metric: String,
345 pub operator: ComparisonOperator,
347 pub threshold: f64,
349 pub duration: Duration,
351}
352
353#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
355pub enum ComparisonOperator {
356 GreaterThan,
357 LessThan,
358 Equal,
359 GreaterThanOrEqual,
360 LessThanOrEqual,
361 NotEqual,
362}
363
364#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
366pub enum PolicyAction {
367 ScaleUp,
368 ScaleDown,
369 Migrate,
370 Rebalance,
371 Alert,
372 Custom(String),
373}
374
375#[derive(Debug, Clone, Serialize, Deserialize)]
377pub struct MigrationSettings {
378 pub strategy: MigrationStrategy,
380 pub downtime_tolerance: Duration,
382 pub data_transfer: DataTransferSettings,
384 pub rollback: RollbackSettings,
386}
387
388#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
390pub enum MigrationStrategy {
391 LiveMigration,
392 ColdMigration,
393 HybridMigration,
394 IncrementalMigration,
395}
396
397#[derive(Debug, Clone, Serialize, Deserialize)]
399pub struct DataTransferSettings {
400 pub method: DataTransferMethod,
402 pub bandwidth_limit: Option<u64>,
404 pub compression: bool,
406 pub encryption: bool,
408}
409
410#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
412pub enum DataTransferMethod {
413 NetworkCopy,
414 PhysicalTransfer,
415 SnapshotReplication,
416 IncrementalSync,
417}
418
419#[derive(Debug, Clone, Serialize, Deserialize)]
421pub struct RollbackSettings {
422 pub auto_rollback: bool,
424 pub conditions: Vec<RollbackCondition>,
426 pub timeout: Duration,
428}
429
430#[derive(Debug, Clone, Serialize, Deserialize)]
432pub struct RollbackCondition {
433 pub condition_type: RollbackConditionType,
435 pub threshold: f64,
437 pub duration: Duration,
439}
440
441#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
443pub enum RollbackConditionType {
444 PerformanceDegradation,
445 ErrorRateIncrease,
446 ServiceFailure,
447 UserDefined(String),
448}
449
450#[derive(Debug, Clone, Serialize, Deserialize)]
452pub struct PredictiveAllocationConfig {
453 pub enable_prediction: bool,
454 pub prediction_models: Vec<String>,
455 pub prediction_window: u64,
456 pub algorithms: Vec<PredictionAlgorithm>,
458 pub training: PredictionTrainingConfig,
460 pub validation: PredictionValidationConfig,
462}
463
464#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
466pub enum PredictionAlgorithm {
467 LinearRegression,
468 ARIMA,
469 LSTM,
470 RandomForest,
471 SVM,
472 EnsembleMethod,
473 Custom(String),
474}
475
476#[derive(Debug, Clone, Serialize, Deserialize)]
478pub struct PredictionTrainingConfig {
479 pub data_size: usize,
481 pub update_frequency: Duration,
483 pub feature_selection: FeatureSelectionConfig,
485 pub validation: ModelValidationConfig,
487}
488
489#[derive(Debug, Clone, Serialize, Deserialize)]
491pub struct FeatureSelectionConfig {
492 pub method: FeatureSelectionMethod,
494 pub num_features: Option<usize>,
496 pub importance_threshold: Option<f64>,
498}
499
500#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
502pub enum FeatureSelectionMethod {
503 VarianceThreshold,
504 UnivariateSelection,
505 RecursiveElimination,
506 FeatureImportance,
507 Custom(String),
508}
509
510#[derive(Debug, Clone, Serialize, Deserialize)]
512pub struct ModelValidationConfig {
513 pub method: ValidationMethod,
515 pub test_size: f64,
517 pub cv_folds: usize,
519}
520
521#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
523pub enum ValidationMethod {
524 HoldOut,
525 CrossValidation,
526 TimeSeriesSplit,
527 Custom(String),
528}
529
530#[derive(Debug, Clone, Serialize, Deserialize)]
532pub struct PredictionValidationConfig {
533 pub accuracy_threshold: f64,
535 pub confidence_interval: f64,
537 pub validation_frequency: Duration,
539}
540
541#[derive(Debug, Clone, Serialize, Deserialize)]
543pub struct MultiObjectiveAllocationConfig {
544 pub objectives: Vec<String>,
545 pub objective_weights: Vec<f64>,
546 pub optimization_method: String,
547 pub pareto_optimization: ParetoOptimizationConfig,
549 pub constraint_handling: ConstraintHandlingConfig,
551 pub solution_selection: SolutionSelectionConfig,
553}
554
555#[derive(Debug, Clone, Serialize, Deserialize)]
557pub struct ParetoOptimizationConfig {
558 pub population_size: usize,
560 pub generations: usize,
562 pub crossover_prob: f64,
564 pub mutation_prob: f64,
566}
567
568#[derive(Debug, Clone, Serialize, Deserialize)]
570pub struct ConstraintHandlingConfig {
571 pub method: ConstraintHandlingMethod,
573 pub penalty_params: HashMap<String, f64>,
575 pub repair_mechanisms: Vec<RepairMechanism>,
577}
578
579#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
581pub enum ConstraintHandlingMethod {
582 PenaltyMethod,
583 BarrierMethod,
584 AugmentedLagrangian,
585 DeathPenalty,
586 RepairMethod,
587}
588
589#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
591pub enum RepairMechanism {
592 RandomRepair,
593 GreedyRepair,
594 LocalSearchRepair,
595 Custom(String),
596}
597
598#[derive(Debug, Clone, Serialize, Deserialize)]
600pub struct SolutionSelectionConfig {
601 pub method: SolutionSelectionMethod,
603 pub criteria: Vec<SelectionCriterion>,
605 pub preferences: UserPreferences,
607}
608
609#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
611pub enum SolutionSelectionMethod {
612 WeightedSum,
613 TOPSIS,
614 ELECTRE,
615 PROMETHEE,
616 UserInteractive,
617}
618
619#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
621pub enum SelectionCriterion {
622 MinDistance,
623 MaxUtility,
624 UserPreference,
625 Custom(String),
626}
627
628#[derive(Debug, Clone, Serialize, Deserialize, Default)]
630pub struct UserPreferences {
631 pub weights: HashMap<String, f64>,
633 pub constraints: Vec<PreferenceConstraint>,
635 pub interactive_feedback: bool,
637}
638
639#[derive(Debug, Clone, Serialize, Deserialize)]
641pub struct PreferenceConstraint {
642 pub objective: String,
644 pub min_value: Option<f64>,
646 pub max_value: Option<f64>,
648 pub target_value: Option<f64>,
650}
651
652impl Default for ResourceAllocationConfig {
653 fn default() -> Self {
654 Self {
655 allocation_algorithms: vec![
656 AllocationAlgorithm::BestFit,
657 AllocationAlgorithm::LoadBalanced,
658 ],
659 optimization_objectives: vec![
660 ResourceOptimizationObjective::BalanceLoadDistribution,
661 ResourceOptimizationObjective::MinimizeCost,
662 ],
663 allocation_constraints: AllocationConstraints::default(),
664 dynamic_reallocation: DynamicReallocationConfig::default(),
665 predictive_allocation: PredictiveAllocationConfig::default(),
666 multi_objective_config: MultiObjectiveAllocationConfig::default(),
667 }
668 }
669}
670
671impl Default for LatencyConstraints {
672 fn default() -> Self {
673 Self {
674 max_latency: Duration::from_secs(5),
675 target_latency: Duration::from_secs(1),
676 percentile_requirements: HashMap::new(),
677 }
678 }
679}
680
681impl Default for SecurityConstraints {
682 fn default() -> Self {
683 Self {
684 required_features: vec![
685 SecurityFeature::EncryptionAtRest,
686 SecurityFeature::EncryptionInTransit,
687 ],
688 encryption: EncryptionRequirements::default(),
689 access_control: AccessControlRequirements::default(),
690 audit: AuditRequirements::default(),
691 }
692 }
693}
694
695impl Default for EncryptionRequirements {
696 fn default() -> Self {
697 Self {
698 min_key_length: 256,
699 allowed_algorithms: vec!["AES-256".to_string()],
700 key_management: KeyManagementRequirements::default(),
701 }
702 }
703}
704
705impl Default for KeyManagementRequirements {
706 fn default() -> Self {
707 Self {
708 hsm_required: false,
709 rotation_period: Duration::from_secs(86400 * 90), backup_requirements: BackupRequirements::default(),
711 }
712 }
713}
714
715impl Default for BackupRequirements {
716 fn default() -> Self {
717 Self {
718 frequency: Duration::from_secs(86400), retention_period: Duration::from_secs(86400 * 365), geo_distribution: false,
721 }
722 }
723}
724
725impl Default for AccessControlRequirements {
726 fn default() -> Self {
727 Self {
728 auth_methods: vec![AuthenticationMethod::Password],
729 authz_model: AuthorizationModel::RBAC,
730 session_management: SessionManagement::default(),
731 }
732 }
733}
734
735impl Default for SessionManagement {
736 fn default() -> Self {
737 Self {
738 timeout: Duration::from_secs(3600), concurrent_limit: 5,
740 idle_timeout: Duration::from_secs(900), }
742 }
743}
744
745impl Default for AuditRequirements {
746 fn default() -> Self {
747 Self {
748 events: vec![
749 AuditEvent::Login,
750 AuditEvent::DataAccess,
751 AuditEvent::ConfigurationChange,
752 ],
753 retention_period: Duration::from_secs(86400 * 365), integrity_protection: true,
755 }
756 }
757}
758
759impl Default for PerformanceConstraints {
760 fn default() -> Self {
761 Self {
762 min_performance: PerformanceRequirements::default(),
763 max_degradation: 0.1, sla_requirements: SLARequirements::default(),
765 }
766 }
767}
768
769impl Default for PerformanceRequirements {
770 fn default() -> Self {
771 Self {
772 min_throughput: 1.0,
773 max_latency: Duration::from_secs(5),
774 min_availability: 0.99,
775 custom_metrics: HashMap::new(),
776 }
777 }
778}
779
780impl Default for SLARequirements {
781 fn default() -> Self {
782 Self {
783 uptime_sla: 0.99,
784 performance_sla: HashMap::new(),
785 support_response_time: Duration::from_secs(3600), }
787 }
788}
789
790impl Default for CostConstraints {
791 fn default() -> Self {
792 Self {
793 max_hourly_cost: None,
794 max_daily_cost: None,
795 max_monthly_cost: None,
796 optimization_strategy: CostOptimizationStrategy::BalanceCostPerformance,
797 }
798 }
799}
800
801impl Default for DynamicReallocationConfig {
802 fn default() -> Self {
803 Self {
804 enable_dynamic_reallocation: true,
805 reallocation_threshold: 0.8,
806 reallocation_strategies: vec![],
807 triggers: vec![
808 ReallocationTrigger::ResourceUtilization,
809 ReallocationTrigger::PerformanceDegradation,
810 ],
811 policies: vec![],
812 migration: MigrationSettings::default(),
813 }
814 }
815}
816
817impl Default for MigrationSettings {
818 fn default() -> Self {
819 Self {
820 strategy: MigrationStrategy::LiveMigration,
821 downtime_tolerance: Duration::from_secs(30),
822 data_transfer: DataTransferSettings::default(),
823 rollback: RollbackSettings::default(),
824 }
825 }
826}
827
828impl Default for DataTransferSettings {
829 fn default() -> Self {
830 Self {
831 method: DataTransferMethod::NetworkCopy,
832 bandwidth_limit: None,
833 compression: true,
834 encryption: true,
835 }
836 }
837}
838
839impl Default for RollbackSettings {
840 fn default() -> Self {
841 Self {
842 auto_rollback: true,
843 conditions: vec![],
844 timeout: Duration::from_secs(600), }
846 }
847}
848
849impl Default for PredictiveAllocationConfig {
850 fn default() -> Self {
851 Self {
852 enable_prediction: false,
853 prediction_models: vec![],
854 prediction_window: 3600, algorithms: vec![PredictionAlgorithm::LinearRegression],
856 training: PredictionTrainingConfig::default(),
857 validation: PredictionValidationConfig::default(),
858 }
859 }
860}
861
862impl Default for PredictionTrainingConfig {
863 fn default() -> Self {
864 Self {
865 data_size: 1000,
866 update_frequency: Duration::from_secs(3600), feature_selection: FeatureSelectionConfig::default(),
868 validation: ModelValidationConfig::default(),
869 }
870 }
871}
872
873impl Default for FeatureSelectionConfig {
874 fn default() -> Self {
875 Self {
876 method: FeatureSelectionMethod::VarianceThreshold,
877 num_features: None,
878 importance_threshold: None,
879 }
880 }
881}
882
883impl Default for ModelValidationConfig {
884 fn default() -> Self {
885 Self {
886 method: ValidationMethod::CrossValidation,
887 test_size: 0.2,
888 cv_folds: 5,
889 }
890 }
891}
892
893impl Default for PredictionValidationConfig {
894 fn default() -> Self {
895 Self {
896 accuracy_threshold: 0.8,
897 confidence_interval: 0.95,
898 validation_frequency: Duration::from_secs(86400), }
900 }
901}
902
903impl Default for MultiObjectiveAllocationConfig {
904 fn default() -> Self {
905 Self {
906 objectives: vec!["cost".to_string(), "performance".to_string()],
907 objective_weights: vec![0.5, 0.5],
908 optimization_method: "NSGA-II".to_string(),
909 pareto_optimization: ParetoOptimizationConfig::default(),
910 constraint_handling: ConstraintHandlingConfig::default(),
911 solution_selection: SolutionSelectionConfig::default(),
912 }
913 }
914}
915
916impl Default for ParetoOptimizationConfig {
917 fn default() -> Self {
918 Self {
919 population_size: 100,
920 generations: 50,
921 crossover_prob: 0.9,
922 mutation_prob: 0.1,
923 }
924 }
925}
926
927impl Default for ConstraintHandlingConfig {
928 fn default() -> Self {
929 Self {
930 method: ConstraintHandlingMethod::PenaltyMethod,
931 penalty_params: HashMap::new(),
932 repair_mechanisms: vec![],
933 }
934 }
935}
936
937impl Default for SolutionSelectionConfig {
938 fn default() -> Self {
939 Self {
940 method: SolutionSelectionMethod::TOPSIS,
941 criteria: vec![SelectionCriterion::MinDistance],
942 preferences: UserPreferences::default(),
943 }
944 }
945}