11
2- import sys
32import click
43import json
54
@@ -19,69 +18,68 @@ def cli(obj, alert, severity, purge):
1918 if obj ['output' ] == 'json' :
2019 r = client .http .get ('/heartbeats' )
2120 click .echo (json .dumps (r ['heartbeats' ], sort_keys = True , indent = 4 , ensure_ascii = False ))
22- sys .exit (0 )
21+ else :
22+ timezone = obj ['timezone' ]
23+ headers = {
24+ 'id' : 'ID' , 'origin' : 'ORIGIN' , 'customer' : 'CUSTOMER' , 'tags' : 'TAGS' , 'createTime' : 'CREATED' ,
25+ 'receiveTime' : 'RECEIVED' , 'latency' : 'LATENCY' , 'timeout' : 'TIMEOUT' , 'since' : 'SINCE' , 'status' : 'STATUS'
26+ }
27+ heartbeats = client .get_heartbeats ()
28+ click .echo (tabulate ([h .tabular (timezone ) for h in heartbeats ], headers = headers , tablefmt = obj ['output' ]))
2329
24- timezone = obj ['timezone' ]
25- headers = {
26- 'id' : 'ID' , 'origin' : 'ORIGIN' , 'customer' : 'CUSTOMER' , 'tags' : 'TAGS' , 'createTime' : 'CREATED' ,
27- 'receiveTime' : 'RECEIVED' , 'latency' : 'LATENCY' , 'timeout' : 'TIMEOUT' , 'since' : 'SINCE' , 'status' : 'STATUS'
28- }
29- heartbeats = client .get_heartbeats ()
30- click .echo (tabulate ([h .tabular (timezone ) for h in heartbeats ], headers = headers , tablefmt = obj ['output' ]))
30+ not_ok = [hb for hb in heartbeats if hb .status != 'ok' ]
31+ if purge :
32+ with click .progressbar (not_ok , label = 'Purging {} heartbeats' .format (len (not_ok ))) as bar :
33+ for b in bar :
34+ client .delete_heartbeat (b .id )
3135
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 )
36+ elif alert :
37+ with click .progressbar (heartbeats , label = 'Alerting {} heartbeats' .format (len (heartbeats ))) as bar :
38+ for b in bar :
39+ params = dict (filter (lambda a : len (a ) == 2 , map (lambda a : a .split (':' ), b .tags )))
40+ environment = params .get ('environment' , 'Production' )
41+ group = params .get ('group' , 'System' )
42+ tags = list (filter (lambda a : not a .startswith ('environment:' ) and not a .startswith ('group:' ), b .tags ))
3743
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 not a .startswith ('group:' ), b .tags ))
45-
46- if b .status == 'expired' : # aka. "stale"
47- client .send_alert (
48- resource = b .origin ,
49- event = 'HeartbeatFail' ,
50- correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
51- group = group ,
52- environment = environment ,
53- service = ['Alerta' ],
54- severity = severity ,
55- value = '{}' .format (b .since ),
56- text = 'Heartbeat not received in {} seconds' .format (b .timeout ),
57- tags = tags ,
58- type = 'heartbeatAlert'
59- )
60- elif b .status == 'slow' :
61- client .send_alert (
62- resource = b .origin ,
63- event = 'HeartbeatSlow' ,
64- correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
65- group = group ,
66- environment = environment ,
67- service = ['Alerta' ],
68- severity = severity ,
69- value = '{}ms' .format (b .latency ),
70- text = 'Heartbeat took more than {}ms to be processed' .format (MAX_LATENCY ),
71- tags = tags ,
72- type = 'heartbeatAlert'
73- )
74- else :
75- client .send_alert (
76- resource = b .origin ,
77- event = 'HeartbeatOK' ,
78- correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
79- group = group ,
80- environment = environment ,
81- service = ['Alerta' ],
82- severity = 'normal' ,
83- value = '' ,
84- text = 'Heartbeat OK' ,
85- tags = tags ,
86- type = 'heartbeatAlert'
87- )
44+ if b .status == 'expired' : # aka. "stale"
45+ client .send_alert (
46+ resource = b .origin ,
47+ event = 'HeartbeatFail' ,
48+ correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
49+ group = group ,
50+ environment = environment ,
51+ service = ['Alerta' ],
52+ severity = severity ,
53+ value = '{}' .format (b .since ),
54+ text = 'Heartbeat not received in {} seconds' .format (b .timeout ),
55+ tags = tags ,
56+ type = 'heartbeatAlert'
57+ )
58+ elif b .status == 'slow' :
59+ client .send_alert (
60+ resource = b .origin ,
61+ event = 'HeartbeatSlow' ,
62+ correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
63+ group = group ,
64+ environment = environment ,
65+ service = ['Alerta' ],
66+ severity = severity ,
67+ value = '{}ms' .format (b .latency ),
68+ text = 'Heartbeat took more than {}ms to be processed' .format (MAX_LATENCY ),
69+ tags = tags ,
70+ type = 'heartbeatAlert'
71+ )
72+ else :
73+ client .send_alert (
74+ resource = b .origin ,
75+ event = 'HeartbeatOK' ,
76+ correlate = ['HeartbeatFail' , 'HeartbeatSlow' , 'HeartbeatOK' ],
77+ group = group ,
78+ environment = environment ,
79+ service = ['Alerta' ],
80+ severity = 'normal' ,
81+ value = '' ,
82+ text = 'Heartbeat OK' ,
83+ tags = tags ,
84+ type = 'heartbeatAlert'
85+ )
0 commit comments