Skip to content

Commit 7cae0d7

Browse files
committed
fix: make all heartbeat alerts use heartbeats environment and delte all other heartbeat alerts
1 parent de9fea4 commit 7cae0d7

1 file changed

Lines changed: 14 additions & 38 deletions

File tree

alertaclient/commands/cmd_heartbeats.py

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ def cli(obj, alert, severity, timeout, purge):
5454

5555
if alert:
5656
with click.progressbar(heartbeats, label=f'Alerting {len(heartbeats)} heartbeats') as bar:
57-
alerts = client.get_alerts(query=[('environment', 'Heartbeats')], page_size=len(heartbeats))
57+
alerts = client.get_alerts(query=[('event', '~Heartbeat')], page_size='ALL')
5858
for b in bar:
59-
want_environment = b.attributes.pop('environment', 'Heartbeats')
59+
want_environment = 'Heartbeats'
6060
want_severity = b.attributes.pop('severity', severity)
6161
want_service = b.attributes.pop('service', ['Alerta'])
6262
want_group = b.attributes.pop('group', 'System')
@@ -82,44 +82,15 @@ def cli(obj, alert, severity, timeout, purge):
8282
}
8383

8484
state = state_map[b.status]
85-
alert_exists = False
86-
for alert in alerts:
87-
if alert.environment == want_environment and alert.resource == b.origin:
88-
alert_exists = True
89-
if state['event'] != alert.event:
90-
client.send_alert(
91-
resource=b.origin,
92-
event=state['event'],
93-
environment=want_environment,
94-
severity=state['severity'],
95-
correlate=['HeartbeatFail', 'HeartbeatSlow', 'HeartbeatOK'],
96-
service=want_service,
97-
group=want_group,
98-
value=state['value'],
99-
text=state['text'],
100-
tags=b.tags,
101-
attributes=b.attributes,
102-
origin=origin(),
103-
type='heartbeatAlert',
104-
timeout=timeout,
105-
customer=b.customer
106-
)
85+
alert = None
86+
# Find heartbeat alert in existing alerts
87+
for a in alerts:
88+
if a.environment == want_environment and a.resource == b.origin:
89+
alert = alerts.pop(alerts.index(a))
10790
break
108-
if not alert_exists:
109-
old_alerts = client.get_alerts(
110-
query=[
111-
('environment', 'Production'),
112-
('event', 'HeartbeatFail'),
113-
('event', 'HeartbeatSlow'),
114-
('event', 'HeartbeatOK'),
115-
('resource', b.origin)
116-
],
117-
page_size=len(heartbeats)
118-
)
119-
120-
for old_alert in old_alerts:
121-
client.delete_alert(old_alert.id)
12291

92+
# Only send in new/updated alert
93+
if alert is None or state['event'] != alert.event:
12394
client.send_alert(
12495
resource=b.origin,
12596
event=state['event'],
@@ -137,3 +108,8 @@ def cli(obj, alert, severity, timeout, purge):
137108
timeout=timeout,
138109
customer=b.customer
139110
)
111+
112+
# Remove unused/old heartbeat alerts, there is no heartbeat matching the alert
113+
with click.progressbar(alerts, label=f'Removing {len(alerts)} old alerts') as bar:
114+
for alert in bar:
115+
client.delete_alert(alert.id)

0 commit comments

Comments
 (0)