Merge "Add the PATCH method for the monitoring API"
[pti/o2.git] / o2ims / views / alarm_view.py
index 9f7af04..00d4a20 100644 (file)
@@ -24,7 +24,8 @@ from o2common.views.route_exception import BadRequestException, \
 from o2ims.domain import events
 from o2ims.views.alarm_dto import SubscriptionDTO
 from o2ims.domain.alarm_obj import AlarmSubscription, AlarmEventRecord, \
-    AlarmNotificationEventEnum
+    AlarmNotificationEventEnum, AlarmEventRecordModifications, \
+    PerceivedSeverityEnum
 
 from o2common.helper import o2logging
 # from o2common.config import config
@@ -52,26 +53,43 @@ def alarm_event_record_ack(alarmEventRecordId: str,
                            uow: unit_of_work.AbstractUnitOfWork):
     with uow:
         alarm_event_record = uow.alarm_event_records.get(alarmEventRecordId)
+        # Check the record does not exist, return None. Otherwise, the
+        # acknowledge request will update the record even if it is
+        # acknowledged.
         if alarm_event_record is None:
             return None
-        elif alarm_event_record.alarmAcknowledged == 'true':
-            raise BadRequestException(
-                "Alarm Event Record {} has already been acknowledged."
-                .format(alarmEventRecordId))
         alarm_event_record.alarmAcknowledged = True
         alarm_event_record.alarmAcknowledgeTime = datetime.\
             now().strftime("%Y-%m-%dT%H:%M:%S")
-        bus = messagebus.MessageBus.get_instance()
+        uow.alarm_event_records.update(alarm_event_record)
+        uow.commit()
+
+        result = AlarmEventRecordModifications(True)
+    return result
+
+
+def alarm_event_record_clear(alarmEventRecordId: str,
+                             uow: unit_of_work.AbstractUnitOfWork):
+    with uow:
+        alarm_event_record = uow.alarm_event_records.get(alarmEventRecordId)
+        if alarm_event_record is None:
+            return None
+        elif alarm_event_record.perceivedSeverity == \
+                PerceivedSeverityEnum.CLEARED:
+            raise BadRequestException(
+                "Alarm Event Record {} has already been marked as CLEARED."
+                .format(alarmEventRecordId))
         alarm_event_record.events.append(events.AlarmEventPurged(
             id=alarm_event_record.alarmEventRecordId,
-            notificationEventType=AlarmNotificationEventEnum.ACKNOWLEDGE,
+            notificationEventType=AlarmNotificationEventEnum.CLEAR,
             updatetime=alarm_event_record.alarmAcknowledgeTime))
 
         uow.alarm_event_records.update(alarm_event_record)
         uow.commit()
 
-        result = alarm_event_record.serialize()
-    _handle_events(bus)
+        result = AlarmEventRecordModifications(
+            clear=PerceivedSeverityEnum.CLEARED)
+    _handle_events(messagebus.MessageBus.get_instance())
     return result