From 69c7c604c3d25770dac00fbf311387e1c3dd5750 Mon Sep 17 00:00:00 2001 From: Chris Beck Date: Fri, 5 Dec 2025 01:09:47 -0700 Subject: [PATCH] minor refactor, code duplication --- signal-gateway/src/gateway/mod.rs | 12 +++--------- signal-gateway/src/http.rs | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/signal-gateway/src/gateway/mod.rs b/signal-gateway/src/gateway/mod.rs index 6a3e510..4d6f7fe 100644 --- a/signal-gateway/src/gateway/mod.rs +++ b/signal-gateway/src/gateway/mod.rs @@ -1,5 +1,5 @@ use crate::{ - http::{AlertMessage, Status}, + http::AlertMessage, jsonrpc::{Envelope, RpcClient, RpcClientError, SignalMessage, connect_tcp}, prometheus::{Prometheus, PrometheusConfig}, }; @@ -644,10 +644,7 @@ impl Gateway { .alerts .iter() .map(|alert| { - let symbol = match alert.status { - Status::Firing => "🔴", - Status::Resolved => "🟢", - }; + let symbol = alert.status.symbol(); let name = alert .labels .get("alertname") @@ -679,10 +676,7 @@ impl Gateway { let now = Utc::now(); for alert in msg.alerts.iter() { - let symbol = match alert.status { - Status::Firing => "🔴", - Status::Resolved => "🟢", - }; + let symbol = alert.status.symbol(); let since = { let dur = (now - alert.starts_at).to_std().unwrap_or_default(); // reduce precision to at most seconds diff --git a/signal-gateway/src/http.rs b/signal-gateway/src/http.rs index f23992c..dcc7c0c 100644 --- a/signal-gateway/src/http.rs +++ b/signal-gateway/src/http.rs @@ -5,8 +5,6 @@ use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; use url::Url; -pub type Timestamp = DateTime; - #[derive(Clone, Copy, Debug, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum Status { @@ -14,6 +12,15 @@ pub enum Status { Firing, } +impl Status { + pub fn symbol(&self) -> char { + match self { + Status::Firing => '🔴', + Status::Resolved => '🟢', + } + } +} + #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct AlertMessage { @@ -41,8 +48,8 @@ pub struct Alert { pub labels: BTreeMap, #[serde(default)] pub annotations: BTreeMap, - pub starts_at: Timestamp, - pub ends_at: Timestamp, + pub starts_at: DateTime, + pub ends_at: DateTime, #[serde(alias = "generatorURL")] pub generator_url: String, pub fingerprint: String, @@ -68,11 +75,11 @@ mod tests { #[test] fn test_alert_message_parsing() { - let text = r#"{"receiver":"notify-chris","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"Low tick success rate","instance":"172.31.5.8:9000","job":"ec2"},"annotations":{"summary":"Low tick success rate"},"startsAt":"2025-11-07T04:21:46.17Z","endsAt":"0001-01-01T00:00:00Z","generatorURL":"http://ip-172-31-10-138.eu-west-3.compute.internal:9090/graph?g0.expr=rate%28tick_successes%5B5m%5D%29+%3C+0.9\u0026g0.tab=1","fingerprint":"543b6a7a3042ae2c"},{"status":"firing","labels":{"alertname":"Long tail tick times","instance":"172.31.5.8:9000","job":"ec2","quantile":"0.99"},"annotations":{"summary":"Long tail tick times"},"startsAt":"2025-11-07T04:50:01.17Z","endsAt":"0001-01-01T00:00:00Z","generatorURL":"http://ip-172-31-10-138.eu-west-3.compute.internal:9090/graph?g0.expr=tick_time%7Bquantile%3D%220.99%22%7D+%3E+0.8\u0026g0.tab=1","fingerprint":"97130d38ef0ff0a4"}],"groupLabels":{},"commonLabels":{"instance":"172.31.5.8:9000","job":"ec2"},"commonAnnotations":{},"externalURL":"http://ip-172-31-10-138.eu-west-3.compute.internal:9093","version":"4","groupKey":"{}:{}","truncatedAlerts":0}"#; + let text = r#"{"receiver":"notify-admin","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"Low tick success rate","instance":"172.31.5.8:9000","job":"ec2"},"annotations":{"summary":"Low tick success rate"},"startsAt":"2025-11-07T04:21:46.17Z","endsAt":"0001-01-01T00:00:00Z","generatorURL":"http://ip-172-31-10-138.eu-west-3.compute.internal:9090/graph?g0.expr=rate%28tick_successes%5B5m%5D%29+%3C+0.9\u0026g0.tab=1","fingerprint":"543b6a7a3042ae2c"},{"status":"firing","labels":{"alertname":"Long tail tick times","instance":"172.31.5.8:9000","job":"ec2","quantile":"0.99"},"annotations":{"summary":"Long tail tick times"},"startsAt":"2025-11-07T04:50:01.17Z","endsAt":"0001-01-01T00:00:00Z","generatorURL":"http://ip-172-31-10-138.eu-west-3.compute.internal:9090/graph?g0.expr=tick_time%7Bquantile%3D%220.99%22%7D+%3E+0.8\u0026g0.tab=1","fingerprint":"97130d38ef0ff0a4"}],"groupLabels":{},"commonLabels":{"instance":"172.31.5.8:9000","job":"ec2"},"commonAnnotations":{},"externalURL":"http://ip-172-31-10-138.eu-west-3.compute.internal:9093","version":"4","groupKey":"{}:{}","truncatedAlerts":0}"#; let msg: AlertMessage = serde_json::from_str(text).unwrap(); - assert_eq!(&msg.receiver, "notify-chris"); + assert_eq!(&msg.receiver, "notify-admin"); assert_eq!(msg.alerts.len(), 2); assert_eq!( msg.alerts[0].annotations.get("summary").unwrap(),