Skip to content

Commit 98ff22a

Browse files
authored
Send heartbeat alerts if json format used (#186)
1 parent 1072295 commit 98ff22a

1 file changed

Lines changed: 62 additions & 61 deletions

File tree

alertaclient/commands/cmd_heartbeats.py

Lines changed: 62 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import click
55
from 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

Comments
 (0)