async def dismiss(self, uuid): """ Dismiss `id` alert. """ alert = self.__alert_by_uuid(uuid) if alert is None: return if issubclass(alert.klass, DismissableAlertClass): related_alerts, unrelated_alerts = bisect( lambda a: (a.node, a.klass) == (alert.node, alert.klass), self.alerts) left_alerts = await alert.klass(self.middleware ).dismiss(related_alerts, alert) for deleted_alert in related_alerts: if deleted_alert not in left_alerts: self._delete_on_dismiss(deleted_alert) elif issubclass( alert.klass, OneShotAlertClass) and not alert.klass.deleted_automatically: self._delete_on_dismiss(alert) else: alert.dismissed = True await self._send_alert_changed_event(alert)
async def oneshot_delete(self, job, klass, query): try: klass = AlertClass.class_by_name[klass] except KeyError: raise CallError(f"Invalid alert source: {klass!r}") if not issubclass(klass, OneShotAlertClass): raise CallError( f"Alert class {klass!r} is not a one-shot alert source") related_alerts, unrelated_alerts = bisect( lambda a: (a.node, a.klass) == (self.node, klass), self.alerts) self.alerts = ( unrelated_alerts + await klass(self.middleware).delete(related_alerts, query)) await self.middleware.call("alert.send_alerts")
async def oneshot_delete(self, job, klass, query): try: klass = AlertClass.class_by_name[klass] except KeyError: raise CallError(f"Invalid alert source: {klass!r}") if not issubclass(klass, OneShotAlertClass): raise CallError(f"Alert class {klass!r} is not a one-shot alert source") related_alerts, unrelated_alerts = bisect(lambda a: (a.node, a.klass) == (self.node, klass), self.alerts) self.alerts = ( unrelated_alerts + await klass(self.middleware).delete(related_alerts, query) ) await self.middleware.call("alert.send_alerts")
async def dismiss(self, uuid): """ Dismiss `id` alert. """ alert = self.__alert_by_uuid(uuid) if alert is None: return if issubclass(alert.klass, DismissableAlertClass): related_alerts, unrelated_alerts = bisect( lambda a: (a.node, a.klass) == (alert.node, alert.klass), self.alerts) self.alerts = (unrelated_alerts + await alert.klass( self.middleware).dismiss(related_alerts, alert)) elif issubclass(alert.klass, OneShotAlertClass): self.alerts = [a for a in self.alerts if a.uuid != uuid] else: alert.dismissed = True
async def dismiss(self, uuid): """ Dismiss `id` alert. """ alert = self.__alert_by_uuid(uuid) if alert is None: return if issubclass(alert.klass, DismissableAlertClass): related_alerts, unrelated_alerts = bisect(lambda a: (a.node, a.klass) == (alert.node, alert.klass), self.alerts) self.alerts = ( unrelated_alerts + await alert.klass(self.middleware).dismiss(related_alerts, alert) ) elif issubclass(alert.klass, OneShotAlertClass) and not alert.klass.deleted_automatically: self.alerts = [a for a in self.alerts if a.uuid != uuid] else: alert.dismissed = True