quantrs2_device/cloud/orchestration/load_balancing/
traffic.rs

1//! Traffic distribution and splitting configurations
2
3use super::canary::CanaryConfig;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7/// Traffic distribution configuration
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct TrafficDistributionConfig {
10    /// Distribution algorithm
11    pub algorithm: DistributionAlgorithm,
12    /// Weight assignments
13    pub weights: HashMap<String, f64>,
14    /// Traffic splitting
15    pub splitting: TrafficSplittingConfig,
16}
17
18/// Distribution algorithms
19#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
20pub enum DistributionAlgorithm {
21    Weighted,
22    Random,
23    Consistent,
24    Geographic,
25    Custom(String),
26}
27
28/// Traffic splitting configuration
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct TrafficSplittingConfig {
31    /// Enable traffic splitting
32    pub enabled: bool,
33    /// Split rules
34    pub rules: Vec<SplitRule>,
35    /// Canary deployment
36    pub canary: CanaryConfig,
37}
38
39/// Split rule
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct SplitRule {
42    /// Rule name
43    pub name: String,
44    /// Condition
45    pub condition: SplitCondition,
46    /// Target percentage
47    pub percentage: f64,
48    /// Target destination
49    pub destination: String,
50}
51
52/// Split condition
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct SplitCondition {
55    /// Header conditions
56    pub headers: HashMap<String, String>,
57    /// Query parameters
58    pub query_params: HashMap<String, String>,
59    /// User attributes
60    pub user_attributes: HashMap<String, String>,
61}