From 0900e48cb8095f6793eea67b28fc62ab02400558 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Sun, 12 Oct 2025 01:34:07 -0700 Subject: [PATCH] ntfy / pushover url interpolation --- bin/core/src/alert/discord.rs | 52 ++++++++++++++++---------------- bin/core/src/alert/mod.rs | 2 +- bin/core/src/alert/ntfy.rs | 34 ++++++++++++++++----- bin/core/src/alert/pushover.rs | 26 ++++++++++++++-- bin/core/src/alert/slack.rs | 55 +++++++++++++++++----------------- 5 files changed, 106 insertions(+), 63 deletions(-) diff --git a/bin/core/src/alert/discord.rs b/bin/core/src/alert/discord.rs index 427227d48..7cf97b438 100644 --- a/bin/core/src/alert/discord.rs +++ b/bin/core/src/alert/discord.rs @@ -50,7 +50,7 @@ pub async fn send_alert( match alert.level { SeverityLevel::Ok => { format!( - "{level} | **{name}**{region} is now **reachable**\n{link}" + "{level} | **{name}**{region} is now **connected**\n{link}" ) } SeverityLevel::Critical => { @@ -241,31 +241,33 @@ pub async fn send_alert( } AlertData::None {} => Default::default(), }; - if !content.is_empty() { - let VariablesAndSecrets { variables, secrets } = - get_variables_and_secrets().await?; - let mut url_interpolated = url.to_string(); - - let mut interpolator = - Interpolator::new(Some(&variables), &secrets); - - interpolator.interpolate_string(&mut url_interpolated)?; - - send_message(&url_interpolated, &content) - .await - .map_err(|e| { - let replacers = interpolator - .secret_replacers - .into_iter() - .collect::>(); - let sanitized_error = - svi::replace_in_string(&format!("{e:?}"), &replacers); - anyhow::Error::msg(format!( - "Error with slack request: {sanitized_error}" - )) - })?; + + if content.is_empty() { + return Ok(()); } - Ok(()) + + let VariablesAndSecrets { variables, secrets } = + get_variables_and_secrets().await?; + let mut url_interpolated = url.to_string(); + + let mut interpolator = + Interpolator::new(Some(&variables), &secrets); + + interpolator.interpolate_string(&mut url_interpolated)?; + + send_message(&url_interpolated, &content) + .await + .map_err(|e| { + let replacers = interpolator + .secret_replacers + .into_iter() + .collect::>(); + let sanitized_error = + svi::replace_in_string(&format!("{e:?}"), &replacers); + anyhow::Error::msg(format!( + "Error with slack request: {sanitized_error}" + )) + }) } async fn send_message( diff --git a/bin/core/src/alert/mod.rs b/bin/core/src/alert/mod.rs index d93b5af3f..58dad8721 100644 --- a/bin/core/src/alert/mod.rs +++ b/bin/core/src/alert/mod.rs @@ -294,7 +294,7 @@ fn standard_alert_content(alert: &Alert) -> String { let link = resource_link(ResourceTargetVariant::Server, id); match alert.level { SeverityLevel::Ok => { - format!("{level} | {name}{region} is now reachable\n{link}") + format!("{level} | {name}{region} is now connected\n{link}") } SeverityLevel::Critical => { let err = err diff --git a/bin/core/src/alert/ntfy.rs b/bin/core/src/alert/ntfy.rs index 023b64b1a..4bb7b2740 100644 --- a/bin/core/src/alert/ntfy.rs +++ b/bin/core/src/alert/ntfy.rs @@ -9,10 +9,32 @@ pub async fn send_alert( alert: &Alert, ) -> anyhow::Result<()> { let content = standard_alert_content(alert); - if !content.is_empty() { - send_message(url, email, content).await?; + if content.is_empty() { + return Ok(()); } - Ok(()) + + let VariablesAndSecrets { variables, secrets } = + get_variables_and_secrets().await?; + let mut url_interpolated = url.to_string(); + + let mut interpolator = + Interpolator::new(Some(&variables), &secrets); + + interpolator.interpolate_string(&mut url_interpolated)?; + + send_message(&url_interpolated, email, content) + .await + .map_err(|e| { + let replacers = interpolator + .secret_replacers + .into_iter() + .collect::>(); + let sanitized_error = + svi::replace_in_string(&format!("{e:?}"), &replacers); + anyhow::Error::msg(format!( + "Error with slack request: {sanitized_error}" + )) + }) } async fn send_message( @@ -22,7 +44,7 @@ async fn send_message( ) -> anyhow::Result<()> { let mut request = http_client() .post(url) - .header("Title", "ntfy Alert") + .header("Title", "Komodo Alert") .body(content); if let Some(email) = email { @@ -43,9 +65,7 @@ async fn send_message( ) })?; Err(anyhow!( - "Failed to send message to ntfy | {} | {}", - status, - text + "Failed to send message to ntfy | {status} | {text}", )) } } diff --git a/bin/core/src/alert/pushover.rs b/bin/core/src/alert/pushover.rs index 9ac11c503..dce27fb0f 100644 --- a/bin/core/src/alert/pushover.rs +++ b/bin/core/src/alert/pushover.rs @@ -8,10 +8,30 @@ pub async fn send_alert( alert: &Alert, ) -> anyhow::Result<()> { let content = standard_alert_content(alert); - if !content.is_empty() { - send_message(url, content).await?; + if content.is_empty() { + return Ok(()); } - Ok(()) + + let VariablesAndSecrets { variables, secrets } = + get_variables_and_secrets().await?; + let mut url_interpolated = url.to_string(); + + let mut interpolator = + Interpolator::new(Some(&variables), &secrets); + + interpolator.interpolate_string(&mut url_interpolated)?; + + send_message(&url_interpolated, content).await.map_err(|e| { + let replacers = interpolator + .secret_replacers + .into_iter() + .collect::>(); + let sanitized_error = + svi::replace_in_string(&format!("{e:?}"), &replacers); + anyhow::Error::msg(format!( + "Error with slack request: {sanitized_error}" + )) + }) } async fn send_message( diff --git a/bin/core/src/alert/slack.rs b/bin/core/src/alert/slack.rs index 47166542e..ff162fb37 100644 --- a/bin/core/src/alert/slack.rs +++ b/bin/core/src/alert/slack.rs @@ -64,11 +64,11 @@ pub async fn send_alert( match alert.level { SeverityLevel::Ok => { let text = - format!("{level} | *{name}*{region} is now *reachable*"); + format!("{level} | *{name}*{region} is now *connected*"); let blocks = vec![ Block::header(level), Block::section(format!( - "*{name}*{region} is now *reachable*" + "*{name}*{region} is now *connnected*" )), ]; (text, blocks.into()) @@ -468,31 +468,32 @@ pub async fn send_alert( } AlertData::None {} => Default::default(), }; - if !text.is_empty() { - let VariablesAndSecrets { variables, secrets } = - get_variables_and_secrets().await?; - let mut url_interpolated = url.to_string(); - - let mut interpolator = - Interpolator::new(Some(&variables), &secrets); - - interpolator.interpolate_string(&mut url_interpolated)?; - - let slack = ::slack::Client::new(url_interpolated); - slack - .send_owned_message_single(&text, blocks.as_deref()) - .await - .map_err(|e| { - let replacers = interpolator - .secret_replacers - .into_iter() - .collect::>(); - let sanitized_error = - svi::replace_in_string(&format!("{e:?}"), &replacers); - anyhow::Error::msg(format!( - "Error with slack request: {sanitized_error}" - )) - })?; + if text.is_empty() { + return Ok(()); } + let VariablesAndSecrets { variables, secrets } = + get_variables_and_secrets().await?; + let mut url_interpolated = url.to_string(); + + let mut interpolator = + Interpolator::new(Some(&variables), &secrets); + + interpolator.interpolate_string(&mut url_interpolated)?; + + let slack = ::slack::Client::new(url_interpolated); + slack + .send_owned_message_single(&text, blocks.as_deref()) + .await + .map_err(|e| { + let replacers = interpolator + .secret_replacers + .into_iter() + .collect::>(); + let sanitized_error = + svi::replace_in_string(&format!("{e:?}"), &replacers); + anyhow::Error::msg(format!( + "Error with slack request: {sanitized_error}" + )) + })?; Ok(()) }