diff --git a/src/zino/trapobservers/link_traps.py b/src/zino/trapobservers/link_traps.py index af91ea1be..7dbd5d4dd 100644 --- a/src/zino/trapobservers/link_traps.py +++ b/src/zino/trapobservers/link_traps.py @@ -114,17 +114,15 @@ def update_flapping_event( It also updates the flap state of the port to indicate it is currently in a flapping state. """ - event = self.open_portstate_event(device, new_state, port, reason) - flap = self.state.flapping.interfaces[interface] - event.flapstate = FlapState.FLAPPING - event.flaps = flap.flaps msg = ( f'{device.name}: intf "{port.ifdescr}" ix {port.ifindex} ({port.ifalias}) flapping, ' - f"{event.flaps} flaps, penalty {flap.hist_val:.2f}" + f"{flap.flaps} flaps, penalty {flap.hist_val:.2f}" ) - _logger.info(msg) - event.add_log(msg) + event = self.open_portstate_event(device, new_state, port, reason, log=msg) + event.flapstate = FlapState.FLAPPING + event.flaps = flap.flaps + self.state.events.commit(event) flap.in_active_flap_state = True return event @@ -136,7 +134,11 @@ def update_non_flapping_event( It also removes the recorded flap stats for the port if was previously known to be in a flapping state. """ - event = self.open_portstate_event(device, new_state, port, reason) + msg = f'{device.name}: intf "{port.ifdescr}" ix {port.ifindex} link{new_state.capitalize()}' + if reason: + msg = f'{msg}, "{reason}"' + + event = self.open_portstate_event(device, new_state, port, reason, log=msg) if flap := self.state.flapping.interfaces.get(interface): event.flaps = flap.flaps @@ -147,11 +149,6 @@ def update_non_flapping_event( event.add_log(msg) self.state.flapping.unflap(interface) - msg = f'{device.name}: intf "{port.ifdescr}" ix {port.ifindex} link{new_state.capitalize()}' - if reason: - msg = f'{msg}, "{reason}"' - _logger.info(msg) - event.add_log(msg) self.state.events.commit(event) if polldev := self.polldevs.get(device.name): @@ -166,10 +163,18 @@ def update_non_flapping_event( return event def open_portstate_event( - self, device: DeviceState, new_state: InterfaceState, port: Port, reason: Optional[str] + self, + device: DeviceState, + new_state: InterfaceState, + port: Port, + reason: Optional[str], + log: Optional[str] = None, ) -> PortStateEvent: """Opens or returns an open port state event for the port referenced in an incoming trap message""" event = self.state.events.get_or_create_event(device.name, port.ifindex, PortStateEvent) + if log: + _logger.info(log) + event.add_log(log) event.portstate = new_state event.port = port.ifdescr event.ifindex = port.ifindex