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