@Override
    public void doAlarm(List<AlarmMessage> alarmMessage) {
        alarmMessage.forEach(message -> {
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("Alarm message: {}", message.getAlarmMessage());
            }

            AlarmRecord record = new AlarmRecord();
            record.setScope(message.getScopeId());
            record.setId0(message.getId0());
            record.setId1(message.getId1());
            record.setName(message.getName());
            record.setAlarmMessage(message.getAlarmMessage());
            record.setStartTime(message.getStartTime());
            record.setTimeBucket(TimeBucket.getRecordTimeBucket(message.getStartTime()));
            record.setRuleName(message.getRuleName());
            Collection<Tag> tags = appendSearchableTags(message.getTags());
            addAutocompleteTags(tags, TimeBucket.getMinuteTimeBucket(message.getStartTime()));
            record.setTagsRawData(gson.toJson(message.getTags()).getBytes(Charsets.UTF_8));
            record.setTagsInString(Tag.Util.toStringList(new ArrayList<>(tags)));
            AlarmSnapshotRecord snapshot = new AlarmSnapshotRecord();
            snapshot.setExpression(message.getExpression());
            snapshot.setMetrics(message.getMqeMetricsSnapshot());
            record.setSnapshot(gson.toJson(snapshot));
            RecordStreamProcessor.getInstance().in(record);
        });
    }
Save the alarm info into storage for UI query.
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java