entrenar/yaml_mode/manifest/
monitoring.rs1use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct MonitoringConfig {
11 #[serde(default, skip_serializing_if = "Option::is_none")]
13 pub terminal: Option<TerminalMonitor>,
14
15 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub tracking: Option<TrackingConfig>,
18
19 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub system: Option<SystemMonitorConfig>,
22
23 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub alerts: Option<Vec<AlertConfig>>,
26
27 #[serde(default, skip_serializing_if = "Option::is_none")]
29 pub drift_detection: Option<DriftDetectionConfig>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct DriftDetectionConfig {
35 pub enabled: bool,
37
38 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub baseline: Option<String>,
41
42 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub threshold: Option<f64>,
45
46 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub window: Option<usize>,
49
50 #[serde(default, skip_serializing_if = "Option::is_none")]
52 pub features: Option<Vec<String>>,
53
54 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub method: Option<String>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct TerminalMonitor {
62 pub enabled: bool,
64
65 #[serde(default, skip_serializing_if = "Option::is_none")]
67 pub refresh_rate: Option<usize>,
68
69 #[serde(default, skip_serializing_if = "Option::is_none")]
71 pub metrics: Option<Vec<String>>,
72
73 #[serde(default, skip_serializing_if = "Option::is_none")]
75 pub charts: Option<Vec<ChartConfig>>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct ChartConfig {
81 #[serde(rename = "type")]
82 pub chart_type: String,
83 #[serde(default, skip_serializing_if = "Option::is_none")]
84 pub metric: Option<String>,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub window: Option<usize>,
87 #[serde(default, skip_serializing_if = "Option::is_none")]
88 pub show_eta: Option<bool>,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct TrackingConfig {
94 pub enabled: bool,
96
97 #[serde(default, skip_serializing_if = "Option::is_none")]
99 pub backend: Option<String>,
100
101 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub project: Option<String>,
104
105 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub experiment: Option<String>,
108
109 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub tags: Option<HashMap<String, String>>,
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct SystemMonitorConfig {
117 pub enabled: bool,
118 #[serde(default, skip_serializing_if = "Option::is_none")]
119 pub interval: Option<usize>,
120 #[serde(default, skip_serializing_if = "Option::is_none")]
121 pub metrics: Option<Vec<String>>,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize)]
126pub struct AlertConfig {
127 pub condition: String,
128 pub action: String,
129 pub message: String,
130}