use serde::{Deserialize, Serialize};
use std::time::Duration;
use super::types::{CanaryConfig, DeploymentStrategy, SuccessCriteria, TrafficSplitStrategy};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActuatorConfig {
pub id: String,
pub enabled: bool,
pub default_strategy: DeploymentStrategy,
pub canary: CanaryConfig,
pub health_monitoring: HealthMonitoringConfig,
pub rollback: RollbackConfig,
pub configuration: ConfigurationManagementConfig,
pub max_concurrent_deployments: usize,
pub deployment_timeout: Duration,
}
impl Default for ActuatorConfig {
fn default() -> Self {
Self {
id: "actuator".to_string(),
enabled: true,
default_strategy: DeploymentStrategy::Canary,
canary: CanaryConfig::default(),
health_monitoring: HealthMonitoringConfig::default(),
rollback: RollbackConfig::default(),
configuration: ConfigurationManagementConfig::default(),
max_concurrent_deployments: 3,
deployment_timeout: Duration::from_secs(3600), }
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HealthMonitoringConfig {
pub check_interval: Duration,
pub check_timeout: Duration,
pub consecutive_failures_threshold: usize,
pub success_criteria: SuccessCriteria,
pub auto_health_check: bool,
pub enable_metrics_collection: bool,
pub metrics_collection_interval: Duration,
}
impl Default for HealthMonitoringConfig {
fn default() -> Self {
Self {
check_interval: Duration::from_secs(30),
check_timeout: Duration::from_secs(10),
consecutive_failures_threshold: 3,
success_criteria: SuccessCriteria::default(),
auto_health_check: true,
enable_metrics_collection: true,
metrics_collection_interval: Duration::from_secs(10),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RollbackConfig {
pub auto_rollback: bool,
pub rollback_timeout: Duration,
pub fast_rollback: bool,
pub enable_backup: bool,
pub max_rollback_history: usize,
pub enable_notifications: bool,
}
impl Default for RollbackConfig {
fn default() -> Self {
Self {
auto_rollback: true,
rollback_timeout: Duration::from_secs(300), fast_rollback: true,
enable_backup: true,
max_rollback_history: 100,
enable_notifications: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConfigurationManagementConfig {
pub enable_versioning: bool,
pub enable_validation: bool,
pub enable_audit_log: bool,
pub snapshot_interval: Duration,
pub max_snapshots: usize,
pub enable_dry_run: bool,
}
impl Default for ConfigurationManagementConfig {
fn default() -> Self {
Self {
enable_versioning: true,
enable_validation: true,
enable_audit_log: true,
snapshot_interval: Duration::from_secs(3600), max_snapshots: 100,
enable_dry_run: false,
}
}
}