Fixed alarm related issues
[pti/o2.git] / o2ims / service / auditor / alarm_handler.py
index 305e919..5f6ed35 100644 (file)
@@ -41,10 +41,6 @@ def update_alarm(
 
         alarm_event_record = uow.alarm_event_records.get(fmobj.id)
         if not alarm_event_record:
-            logger.info("add alarm event record:" + fmobj.name
-                        + " update_at: " + str(fmobj.updatetime)
-                        + " id: " + str(fmobj.id)
-                        + " hash: " + str(fmobj.hash))
             localmodel = create_by(fmobj)
             content = json.loads(fmobj.content)
             entity_type_id = content['entity_type_id']
@@ -65,6 +61,14 @@ def update_alarm(
                     extensions = json.loads(host.extensions)
                     if extensions['hostname'] == hostname:
                         localmodel.resourceId = host.resourceId
+                        break
+                else:
+                    # Example would be when alarm has host=controller
+                    # TODO: Handle host=controller better
+                    logger.warning(
+                        'Couldnt match alarm event '
+                        f'to hostname for: {content}')
+                    return
                 uow.alarm_event_records.add(localmodel)
                 logger.info("Add the alarm event record: " + fmobj.id
                             + ", name: " + fmobj.name)
@@ -121,10 +125,10 @@ def create_by(fmobj: FaultGenericModel) -> AlarmEventRecord:
             return alarm_obj.PerceivedSeverityEnum.WARNING
     alarm_event_record.perceivedSeverity = severity_switch(content['severity'])
     alarm_event_record.probableCauseId = fmobj.probable_cause_id
+
+    extensions = json.dumps(fmobj.filtered)
+    alarm_event_record.extensions = extensions
     alarm_event_record.hash = fmobj.hash
-    # logger.info('severity: ' + content['severity'])
-    # logger.info('perceived severity: '
-    # + alarm_event_record.perceivedSeverity)
     alarm_event_record.events.append(events.AlarmEventChanged(
         id=fmobj.id,
         notificationEventType=AlarmNotificationEventEnum.NEW,
@@ -137,9 +141,10 @@ def create_by(fmobj: FaultGenericModel) -> AlarmEventRecord:
 def update_by(target: AlarmEventRecord, fmobj: FaultGenericModel
               ) -> None:
     # content = json.loads(fmobj.content)
-    target.hash = fmobj.hash
     if fmobj.status == 'clear':
         target.perceivedSeverity = alarm_obj.PerceivedSeverityEnum.CLEARED
+
+    target.hash = fmobj.hash
     target.events.append(events.AlarmEventChanged(
         id=fmobj.id,
         notificationEventType=AlarmNotificationEventEnum.CLEAR,
@@ -219,18 +224,21 @@ def check_res_id(uow: AbstractUnitOfWork, fmobj: FaultGenericModel) -> str:
     entity_type_id = content['entity_type_id']
     entity_instance_id = content['entity_instance_id']
     if 'host' == entity_type_id:
-        logger.info('host: ' + entity_instance_id)
+        logger.debug('host: ' + entity_instance_id)
         hostname = entity_instance_id.split('.')[0].split('=')[1]
         with uow:
             respools = uow.resource_pools.list()
             respoolids = [respool.resourcePoolId for respool in respools
                           if respool.oCloudId == respool.resourcePoolId]
+
             restype = uow.resource_types.get_by_name('pserver')
-            hosts = uow.resources.list(respoolids[0], **{
-                'resourceTypeId': restype.resourceTypeId
-            })
+            args = [ocloud.Resource.resourceTypeId ==
+                    restype.resourceTypeId]
+            hosts = uow.resources.list(respoolids[0], *args)
             for host in hosts:
-                if host.name == hostname:
+                logger.debug('host extensions: ' + host.extensions)
+                extensions = json.loads(host.extensions)
+                if extensions['hostname'] == hostname:
                     return host.resourceId
     else:
         return ""