diff --git a/netx_api/ume_sync_service.py b/netx_api/ume_sync_service.py index a487bbd..347d493 100644 --- a/netx_api/ume_sync_service.py +++ b/netx_api/ume_sync_service.py @@ -3,6 +3,7 @@ from __future__ import annotations import json import logging import hashlib +import re from datetime import datetime, timezone 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] if len(parts) >= 2: return _s(parts[0]) + + # Fallback: some alarms encode net_id as ME{} 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 "" diff --git a/tests/test_ume_sync.py b/tests/test_ume_sync.py index 24ef76e..ddcf87b 100644 --- a/tests/test_ume_sync.py +++ b/tests/test_ume_sync.py @@ -487,6 +487,7 @@ class UmeSyncServiceTests(unittest.TestCase): alarm_hash = {"alarmkey": "00ceb960-1b62-478e-8303-0935ffea1d28#99010"} alarm_csv = {"alarmkey": "00ceb960-1b62-478e-8303-0935ffea1d28, 4237, 79"} 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( _derive_ne_id_from_alarm(alarm_hash), @@ -500,6 +501,10 @@ class UmeSyncServiceTests(unittest.TestCase): _derive_ne_id_from_alarm(alarm_space), "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): alarm = UmeAlarmCurrent(