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()
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()
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()
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())
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())