fix: when updating alert first check, if the scheduled_job exist or not (#4359)

Fixes #4360 

In case some `scheduled_job` records (required for alerts to get
scheduled properly) are missing for some alerts, they can be recreated
by simply disabling and enabling it.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit


- **Improvements**
- Enhanced error logging for trigger updates and creations, providing
clearer context with the inclusion of the `schedule_key`.
- Improved robustness of trigger management logic, facilitating easier
diagnosis of issues related to alert triggers.
- Increased flexibility in alert handling by dynamically setting the
`is_realtime` property based on the alert's characteristics.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Subhra264
2024-08-28 13:37:57 +05:30
committed by GitHub
parent a238e706eb
commit 928053ec7c
2 changed files with 20 additions and 6 deletions
+1 -1
View File
@@ -127,7 +127,7 @@ async fn handle_alert_triggers(trigger: db::scheduler::Trigger) -> Result<(), an
let mut new_trigger = db::scheduler::Trigger {
next_run_at: Utc::now().timestamp_micros(),
is_realtime: false,
is_realtime: alert.is_real_time,
is_silenced: false,
status: db::scheduler::TriggerStatus::Waiting,
retries: 0,
+19 -5
View File
@@ -61,7 +61,7 @@ pub async fn set(
Ok(_) => {
let trigger = db::scheduler::Trigger {
org: org_id.to_string(),
module_key: schedule_key,
module_key: schedule_key.clone(),
next_run_at: chrono::Utc::now().timestamp_micros(),
is_realtime: alert.is_real_time,
is_silenced: false,
@@ -71,21 +71,35 @@ pub async fn set(
match db::scheduler::push(trigger).await {
Ok(_) => Ok(()),
Err(e) => {
log::error!("Failed to save trigger: {}", e);
log::error!("Failed to save trigger for alert {schedule_key}: {}", e);
Ok(())
}
}
} else if db::scheduler::exists(
org_id,
db::scheduler::TriggerModule::Alert,
&schedule_key,
)
.await
{
match db::scheduler::update_trigger(trigger).await {
Ok(_) => Ok(()),
Err(e) => {
log::error!("Failed to update trigger for alert {schedule_key}: {}", e);
Ok(())
}
}
} else {
match db::scheduler::update_trigger(trigger).await {
match db::scheduler::push(trigger).await {
Ok(_) => Ok(()),
Err(e) => {
log::error!("Failed to update trigger: {}", e);
log::error!("Failed to save trigger for alert {schedule_key}: {}", e);
Ok(())
}
}
}
}
Err(e) => Err(anyhow::anyhow!("Error save alert: {}", e)),
Err(e) => Err(anyhow::anyhow!("Error save alert {schedule_key}: {}", e)),
}
}