Skip to content

Commit 8461b69

Browse files
committed
Coderabbit suggestions
1 parent c5344e4 commit 8461b69

File tree

5 files changed

+20
-18
lines changed

5 files changed

+20
-18
lines changed

src/alerts/alert_types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ impl AlertTrait for ThresholdAlert {
179179

180180
fn get_eval_window(&self) -> String {
181181
match &self.eval_config {
182-
EvalConfig::RollingWindow(rolling_window) => rolling_window.eval_start.clone()
182+
EvalConfig::RollingWindow(rolling_window) => rolling_window.eval_start.clone(),
183183
}
184184
}
185185

src/alerts/alerts_utils.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use datafusion::{
2525
prelude::{Expr, lit},
2626
};
2727
use itertools::Itertools;
28-
use tracing::{trace, warn};
28+
use tracing::trace;
2929

3030
use crate::{
3131
alerts::{AlertTrait, Conditions, LogicalOperator, WhereConfigOperator},
@@ -135,17 +135,16 @@ async fn execute_remote_query(query: &str, time_range: &TimeRange) -> Result<f64
135135

136136
/// Convert JSON result value to f64
137137
fn convert_result_to_f64(result_value: serde_json::Value) -> Result<f64, AlertError> {
138-
warn!(result_value=?result_value);
139138
// due to the previous validations, we can be sure that we get an array of objects with just one entry
140139
// [{"countField": Number(1120.251)}]
141-
if let Some(array_val) = result_value.as_array()
140+
if let Some(array_val) = result_value.as_array().filter(|arr| !arr.is_empty())
142141
&& let Some(object) = array_val[0].as_object()
143142
{
144143
let values = object.values().map(|v| v.as_f64().unwrap()).collect_vec();
145144
Ok(values[0])
146145
} else {
147146
Err(AlertError::CustomError(
148-
"Query result is not a number".to_string(),
147+
"Query result is not a number or response is empty".to_string(),
149148
))
150149
}
151150
}

src/alerts/mod.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -499,16 +499,13 @@ impl AlertState {
499499
return Err(AlertError::InvalidStateChange(msg));
500500
} else {
501501
// update state on disk and in memory
502-
let guard = ALERTS.write().await;
503-
if let Some(alerts) = guard.as_ref() {
504-
alerts
505-
.update_state(alert_id, new_state, Some("".into()))
506-
.await?;
507-
}
508-
509-
// ALERTS
510-
// .update_state(alert_id, new_state, Some("".into()))
511-
// .await?;
502+
let guard = ALERTS.read().await;
503+
let alerts = guard.as_ref().ok_or_else(|| {
504+
AlertError::CustomError("Alert manager not initialized".into())
505+
})?;
506+
alerts
507+
.update_state(alert_id, new_state, Some("".into()))
508+
.await?;
512509
}
513510
}
514511
AlertState::Silenced => {

src/alerts/target.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ impl TargetConfigs {
101101

102102
pub async fn delete(&self, target_id: &Ulid) -> Result<Target, AlertError> {
103103
// ensure that the target is not being used by any alert
104-
let guard = ALERTS.write().await;
104+
let guard = ALERTS.read().await;
105105
let alerts = if let Some(alerts) = guard.as_ref() {
106106
alerts
107107
} else {
@@ -293,7 +293,9 @@ impl Target {
293293
let alerts = if let Some(alerts) = guard.as_ref() {
294294
alerts
295295
} else {
296-
panic!("No AlertManager set");
296+
error!("No AlertManager set for alert_id: {alert_id}, stopping timeout task");
297+
*state.lock().unwrap() = TimeoutState::default();
298+
return;
297299
};
298300
match retry {
299301
Retry::Infinite => loop {

src/handlers/http/alerts.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,12 @@ pub async fn post(
7575
) -> Result<impl Responder, AlertError> {
7676
let alert: AlertConfig = alert.into().await?;
7777

78+
let threshold_alert;
7879
let alert: &dyn AlertTrait = match &alert.alert_type {
79-
AlertType::Threshold => &*(Box::new(ThresholdAlert::from(alert)) as Box<dyn AlertTrait>),
80+
AlertType::Threshold => {
81+
threshold_alert = ThresholdAlert::from(alert);
82+
&threshold_alert
83+
}
8084
AlertType::Anomaly => {
8185
return Err(AlertError::CustomError(
8286
"Get Parseable Enterprise for Anomaly alerts".into(),

0 commit comments

Comments
 (0)