def update_current_alarm(self, alarm, new_value, tags=None): """ Update alarm's history and tags. :param alarm: Alarm to update :type alarm: dict :param new_value: New history to set on alarm :type new_value: dict :param tags: Tags to add on alarm (optional) :type tags: str or list """ storage = self.alerts_storage alarm_id = alarm[storage.DATA_ID] alarm_ts = alarm[storage.TIMESTAMP] if AlarmField.display_name.value not in new_value: display_name = gen_id() while self.check_if_display_name_exists(display_name): display_name = gen_id() new_value[AlarmField.display_name.value] = display_name if tags is not None: for tag in ensure_iterable(tags): if tag not in new_value[AlarmField.tags.value]: new_value[AlarmField.tags.value].append(tag) storage.put(alarm_id, new_value, alarm_ts) self.watcher_manager.alarm_changed(alarm['data_id'])
def make_alarm(self, alarm_id, event): """ Create a new alarm from event if not already existing. :param str alarm_id: Alarm entity ID :param dict event: Associated event :return alarm document: :rtype: dict """ display_name = gen_id() while self.check_if_display_name_exists(display_name): display_name = gen_id() return { self.alerts_storage.DATA_ID: alarm_id, self.alerts_storage.TIMESTAMP: event['timestamp'], self.alerts_storage.VALUE: { AlarmField.display_name.value: display_name, 'connector': event['connector'], 'connector_name': event['connector_name'], 'component': event['component'], 'resource': event.get('resource', None), AlarmField.initial_output.value: event.get('output', ''), AlarmField.creation_date.value: int(time()), AlarmField.last_update_date.value: int(time()), AlarmField.state.value: None, AlarmField.status.value: None, AlarmField.ack.value: None, AlarmField.canceled.value: None, AlarmField.snooze.value: None, AlarmField.hard_limit.value: None, AlarmField.ticket.value: None, AlarmField.resolved.value: None, AlarmField.steps.value: [], AlarmField.tags.value: [], AlarmField.extra.value: { field: event[field] for field in self.extra_fields if field in event }, AlarmField.initial_long_output.value: event.get("long_output", "") } }