Skip to content

Commit 805e9bc

Browse files
resolve comments
1 parent 3993a1d commit 805e9bc

2 files changed

Lines changed: 35 additions & 7 deletions

File tree

src/alerts/alert_types.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,7 @@ impl MetastoreObject for ThresholdAlert {
9191
#[async_trait]
9292
impl AlertTrait for ThresholdAlert {
9393
async fn eval_alert(&self) -> Result<Option<String>, AlertError> {
94-
if self.query_type == AlertQueryType::Promql {
95-
return Err(AlertError::NotPresentInOSS("promql alerts"));
96-
}
94+
self.validate_oss_query_type()?;
9795

9896
let time_range = extract_time_range(&self.eval_config)?;
9997

@@ -194,9 +192,7 @@ impl AlertTrait for ThresholdAlert {
194192
return Err(AlertError::InvalidAlertQuery("Empty query".into()));
195193
}
196194

197-
if self.query_type == AlertQueryType::Promql {
198-
return Err(AlertError::NotPresentInOSS("promql alerts"));
199-
}
195+
self.validate_oss_query_type()?;
200196

201197
let tables = resolve_stream_names(&self.query)?;
202198
if tables.is_empty() {
@@ -495,6 +491,14 @@ impl From<ThresholdAlert> for AlertConfig {
495491
}
496492

497493
impl ThresholdAlert {
494+
pub(crate) fn validate_oss_query_type(&self) -> Result<(), AlertError> {
495+
if self.query_type == AlertQueryType::Promql {
496+
return Err(AlertError::NotPresentInOSS("promql alerts"));
497+
}
498+
499+
Ok(())
500+
}
501+
498502
fn create_group_message(&self, breached_groups: &[GroupResult]) -> Result<String, AlertError> {
499503
let header = self.get_message_header()?;
500504
let mut message = format!("{header}\n");

src/alerts/mod.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,16 @@ pub async fn set_alert_manager(manager: Arc<dyn AlertManagerTrait>) {
9393
*ALERTS.write().await = Some(manager);
9494
}
9595

96+
fn ensure_schedulable_in_oss(alert: &dyn AlertTrait) -> Result<(), AlertError> {
97+
if matches!(alert.get_alert_type(), AlertType::Threshold)
98+
&& alert.get_query_type() == AlertQueryType::Promql
99+
{
100+
return Err(AlertError::NotPresentInOSS("promql alerts"));
101+
}
102+
103+
Ok(())
104+
}
105+
96106
pub fn create_default_alerts_manager() -> Alerts {
97107
let (tx, rx) = mpsc::channel::<AlertTask>(1000);
98108
let alerts = Alerts {
@@ -1147,7 +1157,19 @@ impl AlertManagerTrait for Alerts {
11471157

11481158
let alert: Box<dyn AlertTrait> = match &alert.alert_type {
11491159
AlertType::Threshold => {
1150-
Box::new(ThresholdAlert::from(alert)) as Box<dyn AlertTrait>
1160+
let alert = ThresholdAlert::from(alert);
1161+
if let Err(e) = alert.validate_oss_query_type() {
1162+
warn!(
1163+
"Skipping unsupported alert task for alert {}: {e}",
1164+
alert.id
1165+
);
1166+
map.entry(tenant_id.clone())
1167+
.or_default()
1168+
.insert(alert.id, Box::new(alert) as Box<dyn AlertTrait>);
1169+
continue;
1170+
}
1171+
1172+
Box::new(alert) as Box<dyn AlertTrait>
11511173
}
11521174
AlertType::Anomaly(_) => {
11531175
return Err(anyhow::Error::msg(
@@ -1366,6 +1388,7 @@ impl AlertManagerTrait for Alerts {
13661388
.await
13671389
.map_err(|e| AlertError::CustomError(e.to_string()))?;
13681390
} else if should_create_task {
1391+
ensure_schedulable_in_oss(alert.as_ref())?;
13691392
self.sender
13701393
.send(AlertTask::Create(alert.clone_box()))
13711394
.await
@@ -1464,6 +1487,7 @@ impl AlertManagerTrait for Alerts {
14641487

14651488
/// Start a scheduled alert task
14661489
async fn start_task(&self, alert: Box<dyn AlertTrait>) -> Result<(), AlertError> {
1490+
ensure_schedulable_in_oss(alert.as_ref())?;
14671491
self.sender
14681492
.send(AlertTask::Create(alert))
14691493
.await

0 commit comments

Comments
 (0)