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:
oliver 2026-05-13 17:02:46 +08:00
parent 626bb2b02e
commit 15d9cb5db3
2 changed files with 13 additions and 0 deletions

View file

@ -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 ""

View file

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