quantrs2_device/cloud/monitoring/
alerting.rs

1//! Alerting and notification configuration.
2
3use serde::{Deserialize, Serialize};
4use std::time::Duration;
5
6/// Cloud alerting configuration
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CloudAlertingConfig {
9    /// Enable alerting
10    pub enabled: bool,
11    /// Alert rules
12    pub rules: Vec<AlertRule>,
13    /// Notification channels
14    pub notification_channels: Vec<NotificationChannel>,
15    /// Escalation policies
16    pub escalation_policies: Vec<EscalationPolicy>,
17    /// Alert management
18    pub management: AlertManagementConfig,
19}
20
21/// Alert rule
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct AlertRule {
24    /// Rule name
25    pub name: String,
26    /// Rule description
27    pub description: String,
28    /// Condition
29    pub condition: AlertCondition,
30    /// Severity
31    pub severity: AlertSeverity,
32    /// Notification channels
33    pub channels: Vec<String>,
34    /// Suppression rules
35    pub suppression: Option<SuppressionRule>,
36    /// Tags
37    pub tags: std::collections::HashMap<String, String>,
38}
39
40/// Alert condition
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct AlertCondition {
43    /// Metric name
44    pub metric: String,
45    /// Operator
46    pub operator: ComparisonOperator,
47    /// Threshold value
48    pub threshold: f64,
49    /// Evaluation window
50    pub window: Duration,
51    /// Aggregation function
52    pub aggregation: AggregationFunction,
53}
54
55/// Comparison operators
56#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
57pub enum ComparisonOperator {
58    GreaterThan,
59    GreaterThanOrEqual,
60    LessThan,
61    LessThanOrEqual,
62    Equal,
63    NotEqual,
64}
65
66/// Aggregation functions
67#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
68pub enum AggregationFunction {
69    Average,
70    Sum,
71    Count,
72    Max,
73    Min,
74    Percentile(f64),
75    Custom(String),
76}
77
78/// Alert severity levels
79#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Serialize, Deserialize)]
80pub enum AlertSeverity {
81    Critical,
82    High,
83    Medium,
84    Low,
85    Info,
86}
87
88/// Suppression rule
89#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct SuppressionRule {
91    /// Suppression window
92    pub window: Duration,
93    /// Suppression conditions
94    pub conditions: Vec<SuppressionCondition>,
95    /// Max suppressions
96    pub max_suppressions: Option<u32>,
97}
98
99/// Suppression condition
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct SuppressionCondition {
102    /// Field name
103    pub field: String,
104    /// Field value
105    pub value: String,
106    /// Match type
107    pub match_type: MatchType,
108}
109
110/// Match types
111#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
112pub enum MatchType {
113    Exact,
114    Pattern,
115    Regex,
116    Contains,
117}
118
119/// Notification channels
120#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
121pub enum NotificationChannel {
122    Email,
123    SMS,
124    Slack,
125    Teams,
126    PagerDuty,
127    Webhook,
128    Custom(String),
129}
130
131/// Escalation policy
132#[derive(Debug, Clone, Serialize, Deserialize)]
133pub struct EscalationPolicy {
134    /// Policy name
135    pub name: String,
136    /// Escalation steps
137    pub steps: Vec<EscalationStep>,
138    /// Repeat policy
139    pub repeat: Option<RepeatPolicy>,
140}
141
142/// Escalation step
143#[derive(Debug, Clone, Serialize, Deserialize)]
144pub struct EscalationStep {
145    /// Step number
146    pub step: u32,
147    /// Delay before this step
148    pub delay: Duration,
149    /// Notification targets
150    pub targets: Vec<NotificationTarget>,
151    /// Step conditions
152    pub conditions: Vec<StepCondition>,
153}
154
155/// Notification target
156#[derive(Debug, Clone, Serialize, Deserialize)]
157pub struct NotificationTarget {
158    /// Target type
159    pub target_type: TargetType,
160    /// Target identifier
161    pub identifier: String,
162    /// Channel preferences
163    pub channels: Vec<NotificationChannel>,
164}
165
166/// Target types
167#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
168pub enum TargetType {
169    User,
170    Group,
171    Role,
172    External,
173}
174
175/// Step condition
176#[derive(Debug, Clone, Serialize, Deserialize)]
177pub struct StepCondition {
178    /// Condition type
179    pub condition_type: StepConditionType,
180    /// Condition value
181    pub value: String,
182}
183
184/// Step condition types
185#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
186pub enum StepConditionType {
187    AlertSeverity,
188    AlertSource,
189    TimeOfDay,
190    DayOfWeek,
191    Custom(String),
192}
193
194/// Repeat policy
195#[derive(Debug, Clone, Serialize, Deserialize)]
196pub struct RepeatPolicy {
197    /// Enable repeat
198    pub enabled: bool,
199    /// Repeat interval
200    pub interval: Duration,
201    /// Maximum repeats
202    pub max_repeats: Option<u32>,
203    /// Repeat conditions
204    pub conditions: Vec<RepeatCondition>,
205}
206
207/// Repeat condition
208#[derive(Debug, Clone, Serialize, Deserialize)]
209pub struct RepeatCondition {
210    /// Condition type
211    pub condition_type: RepeatConditionType,
212    /// Condition value
213    pub value: String,
214}
215
216/// Repeat condition types
217#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
218pub enum RepeatConditionType {
219    NoAcknowledgment,
220    NoResolution,
221    ContinuedViolation,
222    Custom(String),
223}
224
225/// Alert management configuration
226#[derive(Debug, Clone, Serialize, Deserialize, Default)]
227pub struct AlertManagementConfig {
228    /// Auto-resolution
229    pub auto_resolution: AutoResolutionConfig,
230    /// Alert grouping
231    pub grouping: AlertGroupingConfig,
232    /// Alert correlation
233    pub correlation: AlertCorrelationConfig,
234    /// Alert history
235    pub history: AlertHistoryConfig,
236}
237
238/// Auto-resolution configuration
239#[derive(Debug, Clone, Serialize, Deserialize)]
240pub struct AutoResolutionConfig {
241    /// Enable auto-resolution
242    pub enabled: bool,
243    /// Resolution timeout
244    pub timeout: Duration,
245    /// Resolution conditions
246    pub conditions: Vec<ResolutionCondition>,
247}
248
249/// Resolution condition
250#[derive(Debug, Clone, Serialize, Deserialize)]
251pub struct ResolutionCondition {
252    /// Condition type
253    pub condition_type: ResolutionConditionType,
254    /// Condition parameters
255    pub parameters: std::collections::HashMap<String, String>,
256}
257
258/// Resolution condition types
259#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
260pub enum ResolutionConditionType {
261    MetricBelowThreshold,
262    NoNewViolations,
263    ManualResolution,
264    Custom(String),
265}
266
267/// Alert grouping configuration
268#[derive(Debug, Clone, Serialize, Deserialize)]
269pub struct AlertGroupingConfig {
270    /// Enable grouping
271    pub enabled: bool,
272    /// Grouping criteria
273    pub criteria: Vec<GroupingCriterion>,
274    /// Grouping window
275    pub window: Duration,
276    /// Maximum group size
277    pub max_group_size: Option<u32>,
278}
279
280/// Grouping criterion
281#[derive(Debug, Clone, Serialize, Deserialize)]
282pub struct GroupingCriterion {
283    /// Field name
284    pub field: String,
285    /// Grouping method
286    pub method: GroupingMethod,
287}
288
289/// Grouping methods
290#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
291pub enum GroupingMethod {
292    Exact,
293    Similar,
294    Pattern,
295    Custom(String),
296}
297
298/// Alert correlation configuration
299#[derive(Debug, Clone, Serialize, Deserialize)]
300pub struct AlertCorrelationConfig {
301    /// Enable correlation
302    pub enabled: bool,
303    /// Correlation rules
304    pub rules: Vec<CorrelationRule>,
305    /// Correlation window
306    pub window: Duration,
307}
308
309/// Correlation rule
310#[derive(Debug, Clone, Serialize, Deserialize)]
311pub struct CorrelationRule {
312    /// Rule name
313    pub name: String,
314    /// Rule type
315    pub rule_type: CorrelationRuleType,
316    /// Pattern
317    pub pattern: String,
318    /// Actions
319    pub actions: Vec<CorrelationAction>,
320}
321
322/// Correlation rule types
323#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
324pub enum CorrelationRuleType {
325    Sequence,
326    Temporal,
327    Causal,
328    Statistical,
329    Custom(String),
330}
331
332/// Correlation action
333#[derive(Debug, Clone, Serialize, Deserialize)]
334pub struct CorrelationAction {
335    /// Action type
336    pub action_type: CorrelationActionType,
337    /// Action parameters
338    pub parameters: std::collections::HashMap<String, String>,
339}
340
341/// Correlation action types
342#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
343pub enum CorrelationActionType {
344    CreateIncident,
345    UpdateSeverity,
346    SuppressAlerts,
347    TriggerRunbook,
348    Custom(String),
349}
350
351/// Alert history configuration
352#[derive(Debug, Clone, Serialize, Deserialize)]
353pub struct AlertHistoryConfig {
354    /// Enable history tracking
355    pub enabled: bool,
356    /// Retention period
357    pub retention: Duration,
358    /// Archive configuration
359    pub archive: ArchiveConfig,
360    /// Analytics
361    pub analytics: HistoryAnalyticsConfig,
362}
363
364/// Archive configuration
365#[derive(Debug, Clone, Serialize, Deserialize)]
366pub struct ArchiveConfig {
367    /// Enable archiving
368    pub enabled: bool,
369    /// Archive after
370    pub archive_after: Duration,
371    /// Archive storage
372    pub storage_type: ArchiveStorageType,
373}
374
375/// Archive storage types
376#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
377pub enum ArchiveStorageType {
378    Local,
379    S3,
380    Database,
381    Custom(String),
382}
383
384/// History analytics configuration
385#[derive(Debug, Clone, Serialize, Deserialize)]
386pub struct HistoryAnalyticsConfig {
387    /// Enable analytics
388    pub enabled: bool,
389    /// Analytics types
390    pub types: Vec<AnalyticsType>,
391    /// Analysis frequency
392    pub frequency: Duration,
393}
394
395/// Analytics types
396#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
397pub enum AnalyticsType {
398    AlertTrends,
399    MeanTimeToResolution,
400    FalsePositiveRate,
401    AlertVelocity,
402    Custom(String),
403}
404
405impl Default for CloudAlertingConfig {
406    fn default() -> Self {
407        Self {
408            enabled: true,
409            rules: vec![],
410            notification_channels: vec![NotificationChannel::Email],
411            escalation_policies: vec![],
412            management: AlertManagementConfig::default(),
413        }
414    }
415}
416
417impl Default for AutoResolutionConfig {
418    fn default() -> Self {
419        Self {
420            enabled: false,
421            timeout: Duration::from_secs(3600), // 1 hour
422            conditions: vec![],
423        }
424    }
425}
426
427impl Default for AlertGroupingConfig {
428    fn default() -> Self {
429        Self {
430            enabled: false,
431            criteria: vec![],
432            window: Duration::from_secs(300), // 5 minutes
433            max_group_size: Some(50),
434        }
435    }
436}
437
438impl Default for AlertCorrelationConfig {
439    fn default() -> Self {
440        Self {
441            enabled: false,
442            rules: vec![],
443            window: Duration::from_secs(600), // 10 minutes
444        }
445    }
446}
447
448impl Default for AlertHistoryConfig {
449    fn default() -> Self {
450        Self {
451            enabled: true,
452            retention: Duration::from_secs(86400 * 90), // 90 days
453            archive: ArchiveConfig::default(),
454            analytics: HistoryAnalyticsConfig::default(),
455        }
456    }
457}
458
459impl Default for ArchiveConfig {
460    fn default() -> Self {
461        Self {
462            enabled: false,
463            archive_after: Duration::from_secs(86400 * 30), // 30 days
464            storage_type: ArchiveStorageType::Local,
465        }
466    }
467}
468
469impl Default for HistoryAnalyticsConfig {
470    fn default() -> Self {
471        Self {
472            enabled: false,
473            types: vec![AnalyticsType::AlertTrends],
474            frequency: Duration::from_secs(86400), // daily
475        }
476    }
477}