44import click
55from tabulate import tabulate
66
7- from alertaclient .models .heartbeat import MAX_LATENCY
7+ from alertaclient .models .heartbeat import MAX_LATENCY , Heartbeat
88
99
1010@click .command ('heartbeats' , short_help = 'List heartbeats' )
@@ -19,6 +19,7 @@ def cli(obj, alert, severity, timeout, purge):
1919
2020 if obj ['output' ] == 'json' :
2121 r = client .http .get ('/heartbeats' )
22+ heartbeats = [Heartbeat .parse (hb ) for hb in r ['heartbeats' ]]
2223 click .echo (json .dumps (r ['heartbeats' ], sort_keys = True , indent = 4 , ensure_ascii = False ))
2324 else :
2425 timezone = obj ['timezone' ]
@@ -29,65 +30,65 @@ def cli(obj, alert, severity, timeout, purge):
2930 heartbeats = client .get_heartbeats ()
3031 click .echo (tabulate ([h .tabular (timezone ) for h in heartbeats ], headers = headers , tablefmt = obj ['output' ]))
3132
32- not_ok = [hb for hb in heartbeats if hb .status != 'ok' ]
33- if purge :
34- with click .progressbar (not_ok , label = 'Purging {} heartbeats' .format (len (not_ok ))) as bar :
35- for b in bar :
36- client .delete_heartbeat (b .id )
33+ not_ok = [hb for hb in heartbeats if hb .status != 'ok' ]
34+ if purge :
35+ with click .progressbar (not_ok , label = 'Purging {} heartbeats' .format (len (not_ok ))) as bar :
36+ for b in bar :
37+ client .delete_heartbeat (b .id )
3738
38- elif alert :
39- with click .progressbar (heartbeats , label = 'Alerting {} heartbeats' .format (len (heartbeats ))) as bar :
40- for b in bar :
41- params = dict (filter (lambda a : len (a ) == 2 , map (lambda a : a .split (':' ), b .tags )))
42- environment = params .get ('environment' , 'Production' )
43- group = params .get ('group' , 'System' )
44- tags = list (filter (lambda a : not a .startswith ('environment:' ) and
45- not a .startswith ('group:' ), b .tags ))
39+ if alert :
40+ with click .progressbar (heartbeats , label = 'Alerting {} heartbeats' .format (len (heartbeats ))) as bar :
41+ for b in bar :
42+ params = dict (filter (lambda a : len (a ) == 2 , map (lambda a : a .split (':' ), b .tags )))
43+ environment = params .get ('environment' , 'Production' )
44+ group = params .get ('group' , 'System' )
45+ tags = list (filter (lambda a : not a .startswith ('environment:' ) and
46+ not a .startswith ('group:' ), b .tags ))
4647
47- if b .status == 'expired' : # aka. "stale"
48- client .send_alert (
49- resource = b .origin ,
50- event = 'HeartbeatFail' ,
51- correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
52- group = group ,
53- environment = environment ,
54- service = ['Alerta' ],
55- severity = severity ,
56- value = '{}' .format (b .since ),
57- text = 'Heartbeat not received in {} seconds' .format (b .timeout ),
58- tags = tags ,
59- type = 'heartbeatAlert' ,
60- timeout = timeout ,
61- customer = b .customer
62- )
63- elif b .status == 'slow' :
64- client .send_alert (
65- resource = b .origin ,
66- event = 'HeartbeatSlow' ,
67- correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
68- group = group ,
69- environment = environment ,
70- service = ['Alerta' ],
71- severity = severity ,
72- value = '{}ms' .format (b .latency ),
73- text = 'Heartbeat took more than {}ms to be processed' .format (MAX_LATENCY ),
74- tags = tags ,
75- type = 'heartbeatAlert' ,
76- timeout = timeout ,
77- customer = b .customer
78- )
79- else :
80- client .send_alert (
81- resource = b .origin ,
82- event = 'HeartbeatOK' ,
83- correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
84- group = group ,
85- environment = environment ,
86- service = ['Alerta' ],
87- severity = 'normal' ,
88- value = '' ,
89- text = 'Heartbeat OK' ,
90- tags = tags ,
91- type = 'heartbeatAlert' ,
92- customer = b .customer
93- )
48+ if b .status == 'expired' : # aka. "stale"
49+ client .send_alert (
50+ resource = b .origin ,
51+ event = 'HeartbeatFail' ,
52+ correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
53+ group = group ,
54+ environment = environment ,
55+ service = ['Alerta' ],
56+ severity = severity ,
57+ value = '{}' .format (b .since ),
58+ text = 'Heartbeat not received in {} seconds' .format (b .timeout ),
59+ tags = tags ,
60+ type = 'heartbeatAlert' ,
61+ timeout = timeout ,
62+ customer = b .customer
63+ )
64+ elif b .status == 'slow' :
65+ client .send_alert (
66+ resource = b .origin ,
67+ event = 'HeartbeatSlow' ,
68+ correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
69+ group = group ,
70+ environment = environment ,
71+ service = ['Alerta' ],
72+ severity = severity ,
73+ value = '{}ms' .format (b .latency ),
74+ text = 'Heartbeat took more than {}ms to be processed' .format (MAX_LATENCY ),
75+ tags = tags ,
76+ type = 'heartbeatAlert' ,
77+ timeout = timeout ,
78+ customer = b .customer
79+ )
80+ else :
81+ client .send_alert (
82+ resource = b .origin ,
83+ event = 'HeartbeatOK' ,
84+ correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
85+ group = group ,
86+ environment = environment ,
87+ service = ['Alerta' ],
88+ severity = 'normal' ,
89+ value = '' ,
90+ text = 'Heartbeat OK' ,
91+ tags = tags ,
92+ type = 'heartbeatAlert' ,
93+ customer = b .customer
94+ )
0 commit comments