minor refactor, code duplication
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -5,8 +5,6 @@ use serde::{Deserialize, Serialize};
|
||||
use std::collections::BTreeMap;
|
||||
use url::Url;
|
||||
|
||||
pub type Timestamp = DateTime<Utc>;
|
||||
|
||||
#[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<String, String>,
|
||||
#[serde(default)]
|
||||
pub annotations: BTreeMap<String, String>,
|
||||
pub starts_at: Timestamp,
|
||||
pub ends_at: Timestamp,
|
||||
pub starts_at: DateTime<Utc>,
|
||||
pub ends_at: DateTime<Utc>,
|
||||
#[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(),
|
||||
|
||||
Reference in New Issue
Block a user