Skip to main content

max / makenotwork

2.0 KB · 74 lines History Blame Raw
1 //! peer alert/recovery messages. Domain half of the Alerter split;
2 //! shared dispatch/cooldown plumbing lives in the parent module.
3
4 use tracing::instrument;
5
6 use super::{AlertCategory, AlertMeta, Alerter};
7
8 impl Alerter {
9 #[instrument(skip_all)]
10 pub async fn send_peer_missing(
11 &self,
12 peer_name: &str,
13 address: &str,
14 consecutive_failures: u32,
15 ) {
16 let alert_key = format!("peer:{peer_name}");
17 let subject = format!("[PoM] peer {peer_name}: missing");
18 let body = format!(
19 "Peer: {peer_name}\n\
20 Address: {address}\n\
21 Consecutive failures: {consecutive_failures}\n\
22 Instance: {}\n\
23 Time: {}\n\n\
24 - PoM",
25 self.instance_name,
26 chrono::Utc::now().to_rfc3339(),
27 );
28
29 self.fire_failure(
30 &subject,
31 &body,
32 "high",
33 "pom-peer",
34 Some(peer_name),
35 AlertMeta {
36 key: &alert_key,
37 category: AlertCategory::PeerMissing,
38 from: None,
39 to: None,
40 error: None,
41 },
42 )
43 .await;
44 }
45
46 #[instrument(skip_all)]
47 pub async fn send_peer_recovery(&self, peer_name: &str, address: &str) {
48 let subject = format!("[PoM] peer {peer_name}: recovered");
49 let body = format!(
50 "Peer: {peer_name}\n\
51 Address: {address}\n\
52 Instance: {}\n\
53 Time: {}\n\n\
54 - PoM",
55 self.instance_name,
56 chrono::Utc::now().to_rfc3339(),
57 );
58
59 let alert_key = format!("peer:{peer_name}");
60 self.fire_recovery(
61 &subject,
62 &body,
63 AlertMeta {
64 key: &alert_key,
65 category: AlertCategory::PeerRecovery,
66 from: None,
67 to: None,
68 error: None,
69 },
70 )
71 .await;
72 }
73 }
74