@@ -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