use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AiConfig {
#[serde(default = "default_ai_provider")]
pub provider: String,
pub endpoint: Option<String>,
pub model: Option<String>,
pub api_key: Option<String>,
#[serde(default)]
pub alerts: Option<AiAlertConfig>,
#[serde(default)]
pub auto_remediate: Option<AutoRemediateConfig>,
}
fn default_ai_provider() -> String {
"ollama".into()
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AiAlertConfig {
#[serde(default = "default_true")]
pub enabled: bool,
#[serde(default = "default_analysis_interval")]
pub analysis_interval_secs: u64,
pub channels: Option<AlertDeliveryChannels>,
}
fn default_true() -> bool {
true
}
fn default_analysis_interval() -> u64 {
60
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertDeliveryChannels {
pub webhook: Option<String>,
pub slack: Option<String>,
pub email: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AutoRemediateConfig {
#[serde(default = "default_true")]
pub restart_crashed: bool,
#[serde(default)]
pub scale_on_pressure: bool,
#[serde(default)]
pub rollback_on_failure: bool,
}