Skip to main content

max / makenotwork

2.3 KB · 86 lines History Blame Raw
1 //! whois 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, whois_expiry_priority};
7
8 impl Alerter {
9 #[instrument(skip_all)]
10 pub async fn send_whois_expiry_alert(
11 &self,
12 target: &str,
13 label: &str,
14 domain: &str,
15 days_remaining: i64,
16 ) {
17 let alert_key = format!("whois:{target}");
18 let subject = format!("[PoM] {label}: domain {domain} expires in {days_remaining} days");
19 let body = format!(
20 "Target: {label} ({target})\n\
21 Domain: {domain}\n\
22 Days remaining: {days_remaining}\n\
23 Instance: {}\n\
24 Time: {}\n\n\
25 - PoM",
26 self.instance_name,
27 chrono::Utc::now().to_rfc3339(),
28 );
29
30 let priority = whois_expiry_priority(days_remaining);
31 self.fire_failure(
32 &subject,
33 &body,
34 priority,
35 "pom-whois",
36 Some(&format!("{target}:{domain}")),
37 AlertMeta {
38 key: &alert_key,
39 category: AlertCategory::WhoisExpiry,
40 from: None,
41 to: None,
42 error: None,
43 },
44 )
45 .await;
46 }
47
48 #[instrument(skip_all)]
49 pub async fn send_whois_error_alert(
50 &self,
51 target: &str,
52 label: &str,
53 domain: &str,
54 error: &str,
55 ) {
56 let alert_key = format!("whois:{target}");
57 let subject = format!("[PoM] {label}: WHOIS check failed for {domain}");
58 let body = format!(
59 "Target: {label} ({target})\n\
60 Domain: {domain}\n\
61 Error: {error}\n\
62 Instance: {}\n\
63 Time: {}\n\n\
64 - PoM",
65 self.instance_name,
66 chrono::Utc::now().to_rfc3339(),
67 );
68
69 self.fire_failure(
70 &subject,
71 &body,
72 "high",
73 "pom-whois",
74 Some(&format!("{target}:{domain}")),
75 AlertMeta {
76 key: &alert_key,
77 category: AlertCategory::WhoisError,
78 from: None,
79 to: None,
80 error: Some(error),
81 },
82 )
83 .await;
84 }
85 }
86