99
1010@click .command ('heartbeats' , short_help = 'List heartbeats' )
1111@click .option ('--alert' , is_flag = True , help = 'Alert on stale or slow heartbeats' )
12- @click .option ('--severity' , '-s' , metavar = 'SEVERITY' , default = 'major' , help = 'Severity for stale heartbeat alerts' )
12+ @click .option ('--severity' , '-s' , metavar = 'SEVERITY' , default = 'major' , help = 'Severity for heartbeat alerts' )
1313@click .option ('--timeout' , metavar = 'SECONDS' , type = int , help = 'Seconds before stale heartbeat alerts will be expired' )
1414@click .option ('--purge' , is_flag = True , help = 'Delete all stale heartbeats' )
1515@click .pass_obj
@@ -22,6 +22,12 @@ def cli(obj, alert, severity, timeout, purge):
2222 except KeyError :
2323 default_normal_severity = 'normal'
2424
25+ if severity in ['normal' , 'ok' , 'cleared' ]:
26+ raise click .UsageError ('Must be a non-normal severity.' )
27+
28+ if severity not in obj ['alarm_model' ]['severity' ].keys ():
29+ raise click .UsageError ('Must be a valid severity.' )
30+
2531 if obj ['output' ] == 'json' :
2632 r = client .http .get ('/heartbeats' )
2733 heartbeats = [Heartbeat .parse (hb ) for hb in r ['heartbeats' ]]
@@ -46,20 +52,20 @@ def cli(obj, alert, severity, timeout, purge):
4652 with click .progressbar (heartbeats , label = 'Alerting {} heartbeats' .format (len (heartbeats ))) as bar :
4753 for b in bar :
4854
49- environment = b .attributes .pop ('environment' , 'Production' )
50- service = b .attributes .pop ('service' , ['Alerta' ])
51- group = b .attributes .pop ('group' , 'System' )
55+ want_environment = b .attributes .pop ('environment' , 'Production' )
56+ want_severity = b .attributes .pop ('severity' , severity )
57+ want_service = b .attributes .pop ('service' , ['Alerta' ])
58+ want_group = b .attributes .pop ('group' , 'System' )
5259
5360 if b .status == 'expired' : # aka. "stale"
54- severity = b .attributes .pop ('severity' , severity )
5561 client .send_alert (
5662 resource = b .origin ,
5763 event = 'HeartbeatFail' ,
58- environment = environment ,
59- severity = severity ,
64+ environment = want_environment ,
65+ severity = want_severity ,
6066 correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
61- service = service ,
62- group = group ,
67+ service = want_service ,
68+ group = want_group ,
6369 value = '{}' .format (b .since ),
6470 text = 'Heartbeat not received in {} seconds' .format (b .timeout ),
6571 tags = b .tags ,
@@ -70,15 +76,14 @@ def cli(obj, alert, severity, timeout, purge):
7076 customer = b .customer
7177 )
7278 elif b .status == 'slow' :
73- severity = b .attributes .pop ('severity' , severity )
7479 client .send_alert (
7580 resource = b .origin ,
7681 event = 'HeartbeatSlow' ,
77- environment = environment ,
78- severity = severity ,
82+ environment = want_environment ,
83+ severity = want_severity ,
7984 correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
80- service = service ,
81- group = group ,
85+ service = want_service ,
86+ group = want_group ,
8287 value = '{}ms' .format (b .latency ),
8388 text = 'Heartbeat took more than {}ms to be processed' .format (b .max_latency ),
8489 tags = b .tags ,
@@ -89,15 +94,14 @@ def cli(obj, alert, severity, timeout, purge):
8994 customer = b .customer
9095 )
9196 else :
92- severity = b .attributes .pop ('severity' , default_normal_severity )
9397 client .send_alert (
9498 resource = b .origin ,
9599 event = 'HeartbeatOK' ,
96- environment = environment ,
97- severity = severity ,
100+ environment = want_environment ,
101+ severity = default_normal_severity ,
98102 correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
99- service = service ,
100- group = group ,
103+ service = want_service ,
104+ group = want_group ,
101105 value = '' ,
102106 text = 'Heartbeat OK' ,
103107 tags = b .tags ,
0 commit comments