use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceAllocationConfig {
pub allocation_algorithms: Vec<AllocationAlgorithm>,
pub optimization_objectives: Vec<ResourceOptimizationObjective>,
pub allocation_constraints: AllocationConstraints,
pub dynamic_reallocation: DynamicReallocationConfig,
pub predictive_allocation: PredictiveAllocationConfig,
pub multi_objective_config: MultiObjectiveAllocationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AllocationAlgorithm {
FirstFit,
BestFit,
WorstFit,
NextFit,
RoundRobin,
LoadBalanced,
CostOptimized,
PerformanceOptimized,
HybridOptimized,
MachineLearningBased,
GeneticAlgorithm,
SimulatedAnnealing,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ResourceOptimizationObjective {
MinimizeCost,
MaximizePerformance,
MinimizeLatency,
MaximizeUtilization,
MinimizeEnergyConsumption,
BalanceLoadDistribution,
OptimizeQueueTime,
CustomObjective(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AllocationConstraints {
pub max_memory: Option<usize>,
pub max_cpu: Option<usize>,
pub max_gpus: Option<usize>,
pub required_features: Vec<String>,
pub geographic: GeographicConstraints,
pub security: SecurityConstraints,
pub performance: PerformanceConstraints,
pub cost: CostConstraints,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct GeographicConstraints {
pub allowed_regions: Vec<String>,
pub prohibited_regions: Vec<String>,
pub data_residency: DataResidencyRequirements,
pub latency_constraints: LatencyConstraints,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DataResidencyRequirements {
pub required_countries: Vec<String>,
pub prohibited_countries: Vec<String>,
pub compliance_frameworks: Vec<ComplianceFramework>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComplianceFramework {
GDPR,
HIPAA,
SOC2,
ISO27001,
FedRAMP,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LatencyConstraints {
pub max_latency: Duration,
pub target_latency: Duration,
pub percentile_requirements: HashMap<String, Duration>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecurityConstraints {
pub required_features: Vec<SecurityFeature>,
pub encryption: EncryptionRequirements,
pub access_control: AccessControlRequirements,
pub audit: AuditRequirements,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SecurityFeature {
EncryptionAtRest,
EncryptionInTransit,
MultiFactorAuthentication,
RoleBasedAccess,
NetworkIsolation,
VPN,
PrivateNetworking,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionRequirements {
pub min_key_length: usize,
pub allowed_algorithms: Vec<String>,
pub key_management: KeyManagementRequirements,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyManagementRequirements {
pub hsm_required: bool,
pub rotation_period: Duration,
pub backup_requirements: BackupRequirements,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BackupRequirements {
pub frequency: Duration,
pub retention_period: Duration,
pub geo_distribution: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccessControlRequirements {
pub auth_methods: Vec<AuthenticationMethod>,
pub authz_model: AuthorizationModel,
pub session_management: SessionManagement,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuthenticationMethod {
Password,
TwoFactor,
Biometric,
Certificate,
SAML,
OAuth,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuthorizationModel {
RBAC,
ABAC,
DAC,
MAC,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionManagement {
pub timeout: Duration,
pub concurrent_limit: usize,
pub idle_timeout: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditRequirements {
pub events: Vec<AuditEvent>,
pub retention_period: Duration,
pub integrity_protection: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuditEvent {
Login,
Logout,
DataAccess,
DataModification,
ConfigurationChange,
PrivilegeEscalation,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceConstraints {
pub min_performance: PerformanceRequirements,
pub max_degradation: f64,
pub sla_requirements: SLARequirements,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceRequirements {
pub min_throughput: f64,
pub max_latency: Duration,
pub min_availability: f64,
pub custom_metrics: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SLARequirements {
pub uptime_sla: f64,
pub performance_sla: HashMap<String, f64>,
pub support_response_time: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostConstraints {
pub max_hourly_cost: Option<f64>,
pub max_daily_cost: Option<f64>,
pub max_monthly_cost: Option<f64>,
pub optimization_strategy: CostOptimizationStrategy,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CostOptimizationStrategy {
MinimizeTotal,
OptimizePerformancePerDollar,
BalanceCostPerformance,
PreferSpotInstances,
PreferReservedInstances,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DynamicReallocationConfig {
pub enable_dynamic_reallocation: bool,
pub reallocation_threshold: f64,
pub reallocation_strategies: Vec<String>,
pub triggers: Vec<ReallocationTrigger>,
pub policies: Vec<ReallocationPolicy>,
pub migration: MigrationSettings,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReallocationTrigger {
ResourceUtilization,
PerformanceDegradation,
CostThreshold,
LoadImbalance,
MaintenanceWindow,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReallocationPolicy {
pub name: String,
pub conditions: Vec<PolicyCondition>,
pub actions: Vec<PolicyAction>,
pub priority: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PolicyCondition {
pub metric: String,
pub operator: ComparisonOperator,
pub threshold: f64,
pub duration: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComparisonOperator {
GreaterThan,
LessThan,
Equal,
GreaterThanOrEqual,
LessThanOrEqual,
NotEqual,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PolicyAction {
ScaleUp,
ScaleDown,
Migrate,
Rebalance,
Alert,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MigrationSettings {
pub strategy: MigrationStrategy,
pub downtime_tolerance: Duration,
pub data_transfer: DataTransferSettings,
pub rollback: RollbackSettings,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MigrationStrategy {
LiveMigration,
ColdMigration,
HybridMigration,
IncrementalMigration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataTransferSettings {
pub method: DataTransferMethod,
pub bandwidth_limit: Option<u64>,
pub compression: bool,
pub encryption: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DataTransferMethod {
NetworkCopy,
PhysicalTransfer,
SnapshotReplication,
IncrementalSync,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RollbackSettings {
pub auto_rollback: bool,
pub conditions: Vec<RollbackCondition>,
pub timeout: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RollbackCondition {
pub condition_type: RollbackConditionType,
pub threshold: f64,
pub duration: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RollbackConditionType {
PerformanceDegradation,
ErrorRateIncrease,
ServiceFailure,
UserDefined(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PredictiveAllocationConfig {
pub enable_prediction: bool,
pub prediction_models: Vec<String>,
pub prediction_window: u64,
pub algorithms: Vec<PredictionAlgorithm>,
pub training: PredictionTrainingConfig,
pub validation: PredictionValidationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PredictionAlgorithm {
LinearRegression,
ARIMA,
LSTM,
RandomForest,
SVM,
EnsembleMethod,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PredictionTrainingConfig {
pub data_size: usize,
pub update_frequency: Duration,
pub feature_selection: FeatureSelectionConfig,
pub validation: ModelValidationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeatureSelectionConfig {
pub method: FeatureSelectionMethod,
pub num_features: Option<usize>,
pub importance_threshold: Option<f64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FeatureSelectionMethod {
VarianceThreshold,
UnivariateSelection,
RecursiveElimination,
FeatureImportance,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelValidationConfig {
pub method: ValidationMethod,
pub test_size: f64,
pub cv_folds: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ValidationMethod {
HoldOut,
CrossValidation,
TimeSeriesSplit,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PredictionValidationConfig {
pub accuracy_threshold: f64,
pub confidence_interval: f64,
pub validation_frequency: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MultiObjectiveAllocationConfig {
pub objectives: Vec<String>,
pub objective_weights: Vec<f64>,
pub optimization_method: String,
pub pareto_optimization: ParetoOptimizationConfig,
pub constraint_handling: ConstraintHandlingConfig,
pub solution_selection: SolutionSelectionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParetoOptimizationConfig {
pub population_size: usize,
pub generations: usize,
pub crossover_prob: f64,
pub mutation_prob: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConstraintHandlingConfig {
pub method: ConstraintHandlingMethod,
pub penalty_params: HashMap<String, f64>,
pub repair_mechanisms: Vec<RepairMechanism>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ConstraintHandlingMethod {
PenaltyMethod,
BarrierMethod,
AugmentedLagrangian,
DeathPenalty,
RepairMethod,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RepairMechanism {
RandomRepair,
GreedyRepair,
LocalSearchRepair,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SolutionSelectionConfig {
pub method: SolutionSelectionMethod,
pub criteria: Vec<SelectionCriterion>,
pub preferences: UserPreferences,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SolutionSelectionMethod {
WeightedSum,
TOPSIS,
ELECTRE,
PROMETHEE,
UserInteractive,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SelectionCriterion {
MinDistance,
MaxUtility,
UserPreference,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UserPreferences {
pub weights: HashMap<String, f64>,
pub constraints: Vec<PreferenceConstraint>,
pub interactive_feedback: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PreferenceConstraint {
pub objective: String,
pub min_value: Option<f64>,
pub max_value: Option<f64>,
pub target_value: Option<f64>,
}
impl Default for ResourceAllocationConfig {
fn default() -> Self {
Self {
allocation_algorithms: vec![
AllocationAlgorithm::BestFit,
AllocationAlgorithm::LoadBalanced,
],
optimization_objectives: vec![
ResourceOptimizationObjective::BalanceLoadDistribution,
ResourceOptimizationObjective::MinimizeCost,
],
allocation_constraints: AllocationConstraints::default(),
dynamic_reallocation: DynamicReallocationConfig::default(),
predictive_allocation: PredictiveAllocationConfig::default(),
multi_objective_config: MultiObjectiveAllocationConfig::default(),
}
}
}
impl Default for LatencyConstraints {
fn default() -> Self {
Self {
max_latency: Duration::from_secs(5),
target_latency: Duration::from_secs(1),
percentile_requirements: HashMap::new(),
}
}
}
impl Default for SecurityConstraints {
fn default() -> Self {
Self {
required_features: vec![
SecurityFeature::EncryptionAtRest,
SecurityFeature::EncryptionInTransit,
],
encryption: EncryptionRequirements::default(),
access_control: AccessControlRequirements::default(),
audit: AuditRequirements::default(),
}
}
}
impl Default for EncryptionRequirements {
fn default() -> Self {
Self {
min_key_length: 256,
allowed_algorithms: vec!["AES-256".to_string()],
key_management: KeyManagementRequirements::default(),
}
}
}
impl Default for KeyManagementRequirements {
fn default() -> Self {
Self {
hsm_required: false,
rotation_period: Duration::from_secs(86400 * 90), backup_requirements: BackupRequirements::default(),
}
}
}
impl Default for BackupRequirements {
fn default() -> Self {
Self {
frequency: Duration::from_secs(86400), retention_period: Duration::from_secs(86400 * 365), geo_distribution: false,
}
}
}
impl Default for AccessControlRequirements {
fn default() -> Self {
Self {
auth_methods: vec![AuthenticationMethod::Password],
authz_model: AuthorizationModel::RBAC,
session_management: SessionManagement::default(),
}
}
}
impl Default for SessionManagement {
fn default() -> Self {
Self {
timeout: Duration::from_secs(3600), concurrent_limit: 5,
idle_timeout: Duration::from_secs(900), }
}
}
impl Default for AuditRequirements {
fn default() -> Self {
Self {
events: vec![
AuditEvent::Login,
AuditEvent::DataAccess,
AuditEvent::ConfigurationChange,
],
retention_period: Duration::from_secs(86400 * 365), integrity_protection: true,
}
}
}
impl Default for PerformanceConstraints {
fn default() -> Self {
Self {
min_performance: PerformanceRequirements::default(),
max_degradation: 0.1, sla_requirements: SLARequirements::default(),
}
}
}
impl Default for PerformanceRequirements {
fn default() -> Self {
Self {
min_throughput: 1.0,
max_latency: Duration::from_secs(5),
min_availability: 0.99,
custom_metrics: HashMap::new(),
}
}
}
impl Default for SLARequirements {
fn default() -> Self {
Self {
uptime_sla: 0.99,
performance_sla: HashMap::new(),
support_response_time: Duration::from_secs(3600), }
}
}
impl Default for CostConstraints {
fn default() -> Self {
Self {
max_hourly_cost: None,
max_daily_cost: None,
max_monthly_cost: None,
optimization_strategy: CostOptimizationStrategy::BalanceCostPerformance,
}
}
}
impl Default for DynamicReallocationConfig {
fn default() -> Self {
Self {
enable_dynamic_reallocation: true,
reallocation_threshold: 0.8,
reallocation_strategies: vec![],
triggers: vec![
ReallocationTrigger::ResourceUtilization,
ReallocationTrigger::PerformanceDegradation,
],
policies: vec![],
migration: MigrationSettings::default(),
}
}
}
impl Default for MigrationSettings {
fn default() -> Self {
Self {
strategy: MigrationStrategy::LiveMigration,
downtime_tolerance: Duration::from_secs(30),
data_transfer: DataTransferSettings::default(),
rollback: RollbackSettings::default(),
}
}
}
impl Default for DataTransferSettings {
fn default() -> Self {
Self {
method: DataTransferMethod::NetworkCopy,
bandwidth_limit: None,
compression: true,
encryption: true,
}
}
}
impl Default for RollbackSettings {
fn default() -> Self {
Self {
auto_rollback: true,
conditions: vec![],
timeout: Duration::from_secs(600), }
}
}
impl Default for PredictiveAllocationConfig {
fn default() -> Self {
Self {
enable_prediction: false,
prediction_models: vec![],
prediction_window: 3600, algorithms: vec![PredictionAlgorithm::LinearRegression],
training: PredictionTrainingConfig::default(),
validation: PredictionValidationConfig::default(),
}
}
}
impl Default for PredictionTrainingConfig {
fn default() -> Self {
Self {
data_size: 1000,
update_frequency: Duration::from_secs(3600), feature_selection: FeatureSelectionConfig::default(),
validation: ModelValidationConfig::default(),
}
}
}
impl Default for FeatureSelectionConfig {
fn default() -> Self {
Self {
method: FeatureSelectionMethod::VarianceThreshold,
num_features: None,
importance_threshold: None,
}
}
}
impl Default for ModelValidationConfig {
fn default() -> Self {
Self {
method: ValidationMethod::CrossValidation,
test_size: 0.2,
cv_folds: 5,
}
}
}
impl Default for PredictionValidationConfig {
fn default() -> Self {
Self {
accuracy_threshold: 0.8,
confidence_interval: 0.95,
validation_frequency: Duration::from_secs(86400), }
}
}
impl Default for MultiObjectiveAllocationConfig {
fn default() -> Self {
Self {
objectives: vec!["cost".to_string(), "performance".to_string()],
objective_weights: vec![0.5, 0.5],
optimization_method: "NSGA-II".to_string(),
pareto_optimization: ParetoOptimizationConfig::default(),
constraint_handling: ConstraintHandlingConfig::default(),
solution_selection: SolutionSelectionConfig::default(),
}
}
}
impl Default for ParetoOptimizationConfig {
fn default() -> Self {
Self {
population_size: 100,
generations: 50,
crossover_prob: 0.9,
mutation_prob: 0.1,
}
}
}
impl Default for ConstraintHandlingConfig {
fn default() -> Self {
Self {
method: ConstraintHandlingMethod::PenaltyMethod,
penalty_params: HashMap::new(),
repair_mechanisms: vec![],
}
}
}
impl Default for SolutionSelectionConfig {
fn default() -> Self {
Self {
method: SolutionSelectionMethod::TOPSIS,
criteria: vec![SelectionCriterion::MinDistance],
preferences: UserPreferences::default(),
}
}
}