mirror of
https://github.com/hansjone/netx.git
synced 2026-10-09 03:10:46 +08:00
fix(netx): derive ne_id from objectName ME{net_id}
When alarmkey does not contain a net_id, fall back to extracting ME{net_id} from objectName so alarms can join inventory correctly. Add regression coverage for the ME{} objectName pattern.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
626bb2b02e
commit
15d9cb5db3
2 changed files with 13 additions and 0 deletions
|
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import re
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
|
@ -81,6 +82,13 @@ def _derive_ne_id_from_alarm(alarm: dict[str, Any]) -> str:
|
||||||
parts = [p for p in alarm_key.split() if p]
|
parts = [p for p in alarm_key.split() if p]
|
||||||
if len(parts) >= 2:
|
if len(parts) >= 2:
|
||||||
return _s(parts[0])
|
return _s(parts[0])
|
||||||
|
|
||||||
|
# Fallback: some alarms encode net_id as ME{<net_id>} in objectName.
|
||||||
|
object_name = _s(_pick(alarm, "objectName", "object-name"))
|
||||||
|
if object_name:
|
||||||
|
m = re.search(r"ME\{([^}]+)\}", object_name, flags=re.IGNORECASE)
|
||||||
|
if m:
|
||||||
|
return _s(m.group(1))
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -487,6 +487,7 @@ class UmeSyncServiceTests(unittest.TestCase):
|
||||||
alarm_hash = {"alarmkey": "00ceb960-1b62-478e-8303-0935ffea1d28#99010"}
|
alarm_hash = {"alarmkey": "00ceb960-1b62-478e-8303-0935ffea1d28#99010"}
|
||||||
alarm_csv = {"alarmkey": "00ceb960-1b62-478e-8303-0935ffea1d28, 4237, 79"}
|
alarm_csv = {"alarmkey": "00ceb960-1b62-478e-8303-0935ffea1d28, 4237, 79"}
|
||||||
alarm_space = {"alarmkey": "00ceb960-1b62-478e-8303-0935ffea1d28 4205 3588"}
|
alarm_space = {"alarmkey": "00ceb960-1b62-478e-8303-0935ffea1d28 4205 3588"}
|
||||||
|
alarm_object_name_me = {"alarmkey": "no-net-id-here", "objectName": "OLT/ME{00ceb960-1b62-478e-8303-0935ffea1d28}/PON-1"}
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
_derive_ne_id_from_alarm(alarm_hash),
|
_derive_ne_id_from_alarm(alarm_hash),
|
||||||
|
|
@ -500,6 +501,10 @@ class UmeSyncServiceTests(unittest.TestCase):
|
||||||
_derive_ne_id_from_alarm(alarm_space),
|
_derive_ne_id_from_alarm(alarm_space),
|
||||||
"00ceb960-1b62-478e-8303-0935ffea1d28",
|
"00ceb960-1b62-478e-8303-0935ffea1d28",
|
||||||
)
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
_derive_ne_id_from_alarm(alarm_object_name_me),
|
||||||
|
"00ceb960-1b62-478e-8303-0935ffea1d28",
|
||||||
|
)
|
||||||
|
|
||||||
def test_serialize_ume_alarm_raw_row_select_fields(self):
|
def test_serialize_ume_alarm_raw_row_select_fields(self):
|
||||||
alarm = UmeAlarmCurrent(
|
alarm = UmeAlarmCurrent(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue