quantrs2_device/cloud/orchestration/performance/
scaling.rs

1//! Resource scaling configurations
2
3use serde::{Deserialize, Serialize};
4use std::time::Duration;
5
6/// Resource scaling configuration
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ResourceScalingConfig {
9    /// Auto-scaling
10    pub auto_scaling: AutoScalingConfig,
11    /// Manual scaling
12    pub manual_scaling: ManualScalingConfig,
13    /// Predictive scaling
14    pub predictive_scaling: PredictiveScalingConfig,
15}
16
17/// Auto-scaling configuration
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct AutoScalingConfig {
20    /// Enable auto-scaling
21    pub enabled: bool,
22    /// Scaling policies
23    pub policies: Vec<ScalingPolicy>,
24    /// Cooldown period
25    pub cooldown_period: Duration,
26    /// Scaling limits
27    pub limits: ScalingLimits,
28}
29
30/// Scaling policy
31#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct ScalingPolicy {
33    /// Policy name
34    pub name: String,
35    /// Trigger conditions
36    pub conditions: Vec<ScalingCondition>,
37    /// Scaling action
38    pub action: ScalingAction,
39    /// Priority
40    pub priority: u8,
41}
42
43/// Scaling condition
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct ScalingCondition {
46    /// Metric name
47    pub metric: String,
48    /// Operator
49    pub operator: ComparisonOperator,
50    /// Threshold
51    pub threshold: f64,
52    /// Duration
53    pub duration: Duration,
54}
55
56/// Comparison operators
57#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
58pub enum ComparisonOperator {
59    GreaterThan,
60    LessThan,
61    Equal,
62    GreaterThanOrEqual,
63    LessThanOrEqual,
64    NotEqual,
65}
66
67/// Scaling actions
68#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct ScalingAction {
70    /// Action type
71    pub action_type: ScalingActionType,
72    /// Scale amount
73    pub amount: ScalingAmount,
74    /// Target group
75    pub target: String,
76}
77
78/// Scaling action types
79#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
80pub enum ScalingActionType {
81    ScaleUp,
82    ScaleDown,
83    ScaleOut,
84    ScaleIn,
85}
86
87/// Scaling amount
88#[derive(Debug, Clone, Serialize, Deserialize)]
89pub enum ScalingAmount {
90    Absolute(u32),
91    Percentage(f64),
92    Capacity(f64),
93}
94
95/// Scaling limits
96#[derive(Debug, Clone, Serialize, Deserialize)]
97pub struct ScalingLimits {
98    /// Minimum instances
99    pub min_instances: usize,
100    /// Maximum instances
101    pub max_instances: usize,
102    /// Maximum scaling rate
103    pub max_scaling_rate: f64,
104}
105
106/// Manual scaling configuration
107#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct ManualScalingConfig {
109    /// Default instance count
110    pub default_instances: usize,
111    /// Scaling increments
112    pub scaling_increments: Vec<usize>,
113    /// Approval required
114    pub approval_required: bool,
115}
116
117/// Predictive scaling configuration
118#[derive(Debug, Clone, Serialize, Deserialize)]
119pub struct PredictiveScalingConfig {
120    /// Enable predictive scaling
121    pub enabled: bool,
122    /// Prediction models
123    pub models: Vec<PredictionModel>,
124    /// Forecast horizon
125    pub forecast_horizon: Duration,
126    /// Confidence threshold
127    pub confidence_threshold: f64,
128}
129
130/// Prediction models
131#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
132pub enum PredictionModel {
133    ARIMA,
134    LinearRegression,
135    NeuralNetwork,
136    EnsembleModel,
137    Custom(String),
138}