use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceScalingConfig {
pub auto_scaling: AutoScalingConfig,
pub manual_scaling: ManualScalingConfig,
pub predictive_scaling: PredictiveScalingConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AutoScalingConfig {
pub enabled: bool,
pub policies: Vec<ScalingPolicy>,
pub cooldown_period: Duration,
pub limits: ScalingLimits,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScalingPolicy {
pub name: String,
pub conditions: Vec<ScalingCondition>,
pub action: ScalingAction,
pub priority: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScalingCondition {
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, Serialize, Deserialize)]
pub struct ScalingAction {
pub action_type: ScalingActionType,
pub amount: ScalingAmount,
pub target: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ScalingActionType {
ScaleUp,
ScaleDown,
ScaleOut,
ScaleIn,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ScalingAmount {
Absolute(u32),
Percentage(f64),
Capacity(f64),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScalingLimits {
pub min_instances: usize,
pub max_instances: usize,
pub max_scaling_rate: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ManualScalingConfig {
pub default_instances: usize,
pub scaling_increments: Vec<usize>,
pub approval_required: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PredictiveScalingConfig {
pub enabled: bool,
pub models: Vec<PredictionModel>,
pub forecast_horizon: Duration,
pub confidence_threshold: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PredictionModel {
ARIMA,
LinearRegression,
NeuralNetwork,
EnsembleModel,
Custom(String),
}