diff --git a/src/alerts/alert_structs.rs b/src/alerts/alert_structs.rs index cccd11603..b44ac2b3d 100644 --- a/src/alerts/alert_structs.rs +++ b/src/alerts/alert_structs.rs @@ -316,6 +316,7 @@ impl AlertRequest { notification_config: self.notification_config, created: Utc::now(), tags: self.tags, + last_triggered_at: None, }; Ok(config) } @@ -342,6 +343,7 @@ pub struct AlertConfig { pub notification_config: NotificationConfig, pub created: DateTime, pub tags: Option>, + pub last_triggered_at: Option>, } #[derive(Debug, serde::Serialize, serde::Deserialize, Clone)] @@ -367,6 +369,7 @@ pub struct AlertConfigResponse { pub notification_config: NotificationConfig, pub created: DateTime, pub tags: Option>, + pub last_triggered_at: Option>, } impl AlertConfig { @@ -405,6 +408,7 @@ impl AlertConfig { notification_config: self.notification_config, created: self.created, tags: self.tags, + last_triggered_at: self.last_triggered_at, } } } diff --git a/src/alerts/alert_types.rs b/src/alerts/alert_types.rs index aeb0f4042..7f2c12380 100644 --- a/src/alerts/alert_types.rs +++ b/src/alerts/alert_types.rs @@ -62,6 +62,7 @@ pub struct ThresholdAlert { pub created: DateTime, pub tags: Option>, pub datasets: Vec, + pub last_triggered_at: Option>, } #[async_trait] @@ -192,6 +193,11 @@ impl AlertTrait for ThresholdAlert { // update state in memory self.state = new_state; + // if new state is `Triggered`, change triggered at + if new_state.eq(&AlertState::Triggered) { + self.last_triggered_at = Some(Utc::now()); + } + // update on disk store.put_alert(self.id, &self.to_alert_config()).await?; // The task should have already been removed from the list of running tasks @@ -220,6 +226,11 @@ impl AlertTrait for ThresholdAlert { // update state in memory self.state = new_state; + // if new state is `Triggered`, change triggered at + if new_state.eq(&AlertState::Triggered) { + self.last_triggered_at = Some(Utc::now()); + } + // update on disk store.put_alert(self.id, &self.to_alert_config()).await?; @@ -367,6 +378,7 @@ impl From for ThresholdAlert { created: value.created, tags: value.tags, datasets: value.datasets, + last_triggered_at: value.last_triggered_at, } } } @@ -389,6 +401,7 @@ impl From for AlertConfig { created: val.created, tags: val.tags, datasets: val.datasets, + last_triggered_at: val.last_triggered_at, } } } diff --git a/src/alerts/mod.rs b/src/alerts/mod.rs index ceaa3ecca..7c5af9fcd 100644 --- a/src/alerts/mod.rs +++ b/src/alerts/mod.rs @@ -134,6 +134,7 @@ impl AlertConfig { notification_config: NotificationConfig::default(), created: Utc::now(), tags: None, + last_triggered_at: None, }; // Save the migrated alert back to storage