Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rename/alias BGP and Juniper alarm event attributes #352

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/352.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Rename/alias BGP and Juniper alarm event attributes
6 changes: 3 additions & 3 deletions src/zino/stateconverter/event_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,9 @@ def _set_event_attrs(linedata: LineData, state: ZinoState, indices: EventIndices
elif event_field == "history":
event.history = parse_log_and_history(linedata.value)
elif event_field == "bgpOS":
event.bgpos = BGPOperState(linedata.value)
event.operational_state = BGPOperState(linedata.value)
elif event_field == "bgpAS":
event.bgpas = BGPAdminStatus(linedata.value)
event.admin_status = BGPAdminStatus(linedata.value)
elif event_field == "lastevent":
event.lastevent = linedata.value
elif event_field == "log":
Expand All @@ -120,7 +120,7 @@ def _set_event_attrs(linedata: LineData, state: ZinoState, indices: EventIndices
elif event_field == "remote-AS":
event.remote_as = int(linedata.value)
elif event_field == "remote-addr":
event.remote_addr = parse_ip(linedata.value)
event.remote_address = parse_ip(linedata.value)
elif event_field == "router":
event.router = linedata.value
elif event_field == "state":
Expand Down
17 changes: 10 additions & 7 deletions src/zino/statemodels.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,15 +359,15 @@ class BGPEvent(Event):
model_config = ConfigDict(populate_by_name=True)

type: Literal["bgp"] = "bgp"
remote_addr: Optional[IPAddress] = None
remote_address: Optional[IPAddress] = Field(default=None, alias="remote-addr")
remote_as: Optional[int] = Field(default=None, alias="remote-AS")
peer_uptime: Optional[int] = None
bgpos: Optional[BGPOperState] = Field(default=None, alias="bgpOS")
bgpas: Optional[BGPAdminStatus] = Field(default=None, alias="bgpAS")
peer_uptime: Optional[int] = Field(default=None, alias="peer-uptime")
operational_state: Optional[BGPOperState] = Field(default=None, alias="bgpOS")
admin_status: Optional[BGPAdminStatus] = Field(default=None, alias="bgpAS")

@property
def subindex(self) -> SubIndex:
return self.remote_addr
return self.remote_address


class BFDEvent(Event):
Expand All @@ -393,9 +393,12 @@ class ReachabilityEvent(Event):


class AlarmEvent(Event):
# Allow populating fields by name or alias
model_config = ConfigDict(populate_by_name=True)

type: Literal["alarm"] = "alarm"
alarm_type: Optional[AlarmType] = None
alarm_count: Optional[int] = None
alarm_type: Optional[AlarmType] = Field(default=None, alias="alarm-type")
alarm_count: Optional[int] = Field(default=None, alias="alarm-count")

@property
def subindex(self) -> SubIndex:
Expand Down
14 changes: 7 additions & 7 deletions src/zino/tasks/bgpstatemonitortask.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ def _update_established_peer(self, data: BaseBGPRow, uptime: int):
_logger.debug(f"Noted external reset for {self.device_state.name}: {data.peer_remote_address}")
else:
event = self.state.events.get(self.device.name, data.peer_remote_address, BGPEvent)
if event and event.bgpos != BGPOperState.ESTABLISHED:
if event and event.operational_state != BGPOperState.ESTABLISHED:
self._bgp_external_reset(data)
_logger.debug(f"BGP session up for {self.device_state.name}: {data.peer_remote_address}")

Expand Down Expand Up @@ -313,7 +313,7 @@ def _bgp_external_reset(self, data: BaseBGPRow):
def _bgp_admin_down(self, data: BaseBGPRow):
event = self.state.events.get_or_create_event(self.device.name, data.peer_remote_address, BGPEvent)

if event.bgpas == data.peer_admin_status:
if event.admin_status == data.peer_admin_status:
return

copied_data = replace(data, peer_state="down", peer_fsm_established_time=0)
Expand All @@ -332,7 +332,7 @@ def _bgp_admin_up(self, data: BaseBGPRow):
event = self.state.events.get_or_create_event(self.device.name, data.peer_remote_address, BGPEvent)

# No previous event, so no need to notify or event already up to date
if event.id is None or event.bgpas == data.peer_admin_status:
if event.id is None or event.admin_status == data.peer_admin_status:
return

copied_data = replace(data, peer_fsm_established_time=0)
Expand All @@ -350,7 +350,7 @@ def _bgp_admin_up(self, data: BaseBGPRow):
def _bgp_oper_down(self, data: BaseBGPRow):
event = self.state.events.get_or_create_event(self.device.name, data.peer_remote_address, BGPEvent)

if event.bgpos == BGPOperState.DOWN:
if event.operational_state == BGPOperState.DOWN:
return

copied_data = replace(data, peer_state=BGPOperState.DOWN)
Expand All @@ -368,9 +368,9 @@ def _bgp_oper_down(self, data: BaseBGPRow):
def _update_bgp_event(self, event: BGPEvent, data: BaseBGPRow, last_event: str) -> BGPEvent:
"""Updates a given BGP event with the given BGP data"""

event.bgpos = data.peer_state
event.bgpas = data.peer_admin_status
event.remote_addr = data.peer_remote_address
event.operational_state = data.peer_state
event.admin_status = data.peer_admin_status
event.remote_address = data.peer_remote_address
event.remote_as = data.peer_remote_as
event.peer_uptime = data.peer_fsm_established_time
event.polladdr = self.device.address
Expand Down
4 changes: 2 additions & 2 deletions tests/api/legacy_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ async def test_when_caseid_is_invalid_it_should_output_error(self, authenticated
async def test_should_output_correct_attrs_for_alias(self, authenticated_protocol):
state = authenticated_protocol._state
event1 = state.events.create_event("foo", IPv4Address("127.0.0.1"), BGPEvent)
event1.bgpos = BGPOperState.ESTABLISHED
event1.operational_state = BGPOperState.ESTABLISHED
event1.remote_as = 2
state.events.commit(event1)

Expand All @@ -468,7 +468,7 @@ async def test_should_output_correct_attrs_for_alias(self, authenticated_protoco
assert f"id: {event1.id}\r\n" in output
assert f"router: {event1.router}\r\n" in output
assert f"state: {event1.state.value}\r\n" in output
assert f"bgpOS: {event1.bgpos}\r\n" in output
assert f"bgpOS: {event1.operational_state}\r\n" in output
assert f"remote-AS: {event1.remote_as}\r\n" in output


Expand Down
6 changes: 3 additions & 3 deletions tests/stateconverter/convertstate_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,11 @@ def test_bgp_event_should_be_created_correctly(self, save_state_path):
assert len(event.history) == 1
assert len(event.log) == 1
assert event.lastevent == "peer is down"
assert event.remote_addr == ip_address("0515:7cfd:1bcc:279e:f5a4:5528:f4c3:58af")
assert event.remote_address == ip_address("0515:7cfd:1bcc:279e:f5a4:5528:f4c3:58af")
assert event.remote_as == 100
assert event.peer_uptime == 420
assert event.bgpos == BGPOperState.DOWN
assert event.bgpas == BGPAdminStatus.RUNNING
assert event.operational_state == BGPOperState.DOWN
assert event.admin_status == BGPAdminStatus.RUNNING

def test_invalid_event_attribute_should_not_be_set(self, invalid_event_save_state_path):
state = create_state(invalid_event_save_state_path)
Expand Down
42 changes: 21 additions & 21 deletions tests/tasks/test_bgpstatemonitortask.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ async def test_external_reset_creates_event(self, task):
# check that the correct event has been created
event = task.state.events.get(device_name=task.device.name, subindex=PEER_ADDRESS, event_class=BGPEvent)
assert event
assert event.bgpas in [BGPAdminStatus.RUNNING, BGPAdminStatus.START]
assert event.bgpos == BGPOperState.ESTABLISHED
assert event.remote_addr == PEER_ADDRESS
assert event.admin_status in [BGPAdminStatus.RUNNING, BGPAdminStatus.START]
assert event.operational_state == BGPOperState.ESTABLISHED
assert event.remote_address == PEER_ADDRESS
assert event.remote_as == DEFAULT_REMOTE_AS
assert event.peer_uptime == DEFAULT_UPTIME

Expand All @@ -69,9 +69,9 @@ async def test_session_up_updates_event(self, task):
event = task.state.events.get_or_create_event(
device_name=task.device.name, subindex=PEER_ADDRESS, event_class=BGPEvent
)
event.bgpos = BGPOperState.DOWN
event.bgpas = BGPAdminStatus.STOP
event.remote_addr = PEER_ADDRESS
event.operational_state = BGPOperState.DOWN
event.admin_status = BGPAdminStatus.STOP
event.remote_address = PEER_ADDRESS
event.remote_as = DEFAULT_REMOTE_AS
event.peer_uptime = 0
task.state.events.commit(event=event)
Expand All @@ -84,9 +84,9 @@ async def test_session_up_updates_event(self, task):
# check that the correct event has been created
event = task.state.events.get(device_name=task.device.name, subindex=PEER_ADDRESS, event_class=BGPEvent)
assert event
assert event.bgpas in [BGPAdminStatus.RUNNING, BGPAdminStatus.START]
assert event.bgpos == BGPOperState.ESTABLISHED
assert event.remote_addr == PEER_ADDRESS
assert event.admin_status in [BGPAdminStatus.RUNNING, BGPAdminStatus.START]
assert event.operational_state == BGPOperState.ESTABLISHED
assert event.remote_address == PEER_ADDRESS
assert event.remote_as == DEFAULT_REMOTE_AS
assert event.peer_uptime == DEFAULT_UPTIME

Expand All @@ -111,9 +111,9 @@ async def test_admin_down_creates_event(self, task):
# check that the correct event has been created
event = task.state.events.get(device_name=task.device.name, subindex=PEER_ADDRESS, event_class=BGPEvent)
assert event
assert event.bgpas in [BGPAdminStatus.HALTED, BGPAdminStatus.STOP]
assert event.bgpos == BGPOperState.DOWN
assert event.remote_addr == PEER_ADDRESS
assert event.admin_status in [BGPAdminStatus.HALTED, BGPAdminStatus.STOP]
assert event.operational_state == BGPOperState.DOWN
assert event.remote_address == PEER_ADDRESS
assert event.remote_as == DEFAULT_REMOTE_AS
assert event.peer_uptime == 0

Expand All @@ -137,9 +137,9 @@ async def test_admin_up_creates_event(self, task):
event = task.state.events.get_or_create_event(
device_name=task.device.name, subindex=PEER_ADDRESS, event_class=BGPEvent
)
event.bgpos = BGPOperState.DOWN
event.bgpas = BGPAdminStatus.STOP
event.remote_addr = PEER_ADDRESS
event.operational_state = BGPOperState.DOWN
event.admin_status = BGPAdminStatus.STOP
event.remote_address = PEER_ADDRESS
event.remote_as = DEFAULT_REMOTE_AS
event.peer_uptime = 0
task.state.events.commit(event=event)
Expand All @@ -151,9 +151,9 @@ async def test_admin_up_creates_event(self, task):
# check that the correct event has been created
event = task.state.events.get(device_name=task.device.name, subindex=PEER_ADDRESS, event_class=BGPEvent)
assert event
assert event.bgpas in [BGPAdminStatus.RUNNING, BGPAdminStatus.START]
assert event.bgpos == BGPOperState.IDLE
assert event.remote_addr == PEER_ADDRESS
assert event.admin_status in [BGPAdminStatus.RUNNING, BGPAdminStatus.START]
assert event.operational_state == BGPOperState.IDLE
assert event.remote_address == PEER_ADDRESS
assert event.remote_as == DEFAULT_REMOTE_AS
assert event.peer_uptime == 0

Expand All @@ -177,9 +177,9 @@ async def test_oper_down_creates_event(self, task):
# check that the correct event has been created
event = task.state.events.get(device_name=task.device.name, subindex=PEER_ADDRESS, event_class=BGPEvent)
assert event
assert event.bgpas in [BGPAdminStatus.RUNNING, BGPAdminStatus.START]
assert event.bgpos == BGPOperState.DOWN
assert event.remote_addr == PEER_ADDRESS
assert event.admin_status in [BGPAdminStatus.RUNNING, BGPAdminStatus.START]
assert event.operational_state == BGPOperState.DOWN
assert event.remote_address == PEER_ADDRESS
assert event.remote_as == DEFAULT_REMOTE_AS
assert event.peer_uptime == 1000000

Expand Down
Loading