示例#1
0
    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)
示例#2
0
    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")
示例#3
0
文件: alert.py 项目: freenas/freenas
    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")
示例#4
0
    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
示例#5
0
文件: alert.py 项目: freenas/freenas
    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