Exemple #1
0
    def handle(self):
        event = self.event
        alert = AlertGenerator(event)
        interface = event.get_subject()
        is_unresolved = unresolved.refers_to_unresolved_alert(event)

        if event.state == event.STATE_START:
            alert.alert_type = 'linkDegraded'
            if is_unresolved:
                return self._handle_duplicate(alert, is_unresolved)
            if not interface.is_degraded():
                return self._ignore("Got aggregateLinkState start event, but "
                                    "the interface is not currently degraded.")

        elif event.state == event.STATE_END:
            alert.alert_type = 'linkRestored'
            if not is_unresolved:
                return self._ignore("Got aggregateLinkState end event, but "
                                    "there is no currently active alert to "
                                    "resolve.")
            if interface.is_degraded():
                return self._ignore("Got aggregateLinkState end event, but the "
                                    "interface still appears to be degraded.")

        if self._box_is_on_maintenance():
            alert.post_alert_history()
        else:
            alert.post()

        event.delete()
Exemple #2
0
    def _handle_end(self):
        is_unresolved = unresolved.refers_to_unresolved_alert(self.event)
        waiting_plugin = self._get_waiting()

        if is_unresolved or waiting_plugin:
            self._logger.info("%s is back up", self.get_target())
            self._set_internal_state_up()

            if is_unresolved:
                alert = self._get_up_alert()
                if self._box_is_on_maintenance():
                    alert.post_alert_history()
                else:
                    alert.post()

            if waiting_plugin:
                self._logger.info("ignoring transient down state for %s",
                                  self.get_target())
                waiting_plugin.deschedule()
        elif self._is_internally_down():
            self._logger.info("no unresolved %s for %s, but its internal state "
                              "was down; correcting internal state",
                              self.event.event_type, self.get_target())
            self._set_internal_state_up()
        else:
            self._logger.info("no unresolved %s for %s, ignoring end event",
                              self.event.event_type, self.get_target())

        self.event.delete()
Exemple #3
0
    def _handle_end(self):
        is_unresolved = unresolved.refers_to_unresolved_alert(self.event)
        waiting_plugin = self._get_waiting()

        if is_unresolved or waiting_plugin:
            self._logger.info("%s is back up", self.get_target())
            self._set_internal_state_up()

            if is_unresolved:
                alert = self._get_up_alert()
                if self._box_is_on_maintenance():
                    alert.post_alert_history()
                else:
                    alert.post()

            if waiting_plugin:
                self._logger.info("ignoring transient down state for %s",
                                  self.get_target())
                waiting_plugin.deschedule()
        elif self._is_internally_down():
            self._logger.info(
                "no unresolved %s for %s, but its internal state "
                "was down; correcting internal state", self.event.event_type,
                self.get_target())
            self._set_internal_state_up()
        else:
            self._logger.info("no unresolved %s for %s, ignoring end event",
                              self.event.event_type, self.get_target())

        self.event.delete()
Exemple #4
0
 def _is_duplicate(self):
     """Returns True if this appears to be a duplicate boxDown event"""
     return (unresolved.refers_to_unresolved_alert(self.event)
             or self._get_waiting())
Exemple #5
0
 def _is_duplicate(self):
     """Returns True if this appears to be a duplicate boxDown event"""
     return (unresolved.refers_to_unresolved_alert(self.event)
             or self._get_waiting())