peng-yongsheng closed pull request #1753: Alarm query and alarm persistence test. URL: https://github.com/apache/incubator-skywalking/pull/1753
This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java index d3d1d628a..3f8c6ea39 100644 --- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java +++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java @@ -18,26 +18,15 @@ package org.apache.skywalking.oap.server.core.alarm.provider; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReentrantLock; -import org.apache.skywalking.oap.server.core.alarm.AlarmMessage; -import org.apache.skywalking.oap.server.core.alarm.MetaInAlarm; -import org.apache.skywalking.oap.server.core.analysis.indicator.DoubleValueHolder; -import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; -import org.apache.skywalking.oap.server.core.analysis.indicator.IntValueHolder; -import org.apache.skywalking.oap.server.core.analysis.indicator.LongValueHolder; +import org.apache.skywalking.oap.server.core.alarm.*; +import org.apache.skywalking.oap.server.core.analysis.indicator.*; import org.apache.skywalking.oap.server.core.source.Scope; -import org.apache.skywalking.oap.server.library.util.TimeBucketUtils; -import org.joda.time.LocalDateTime; -import org.joda.time.Minutes; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.joda.time.*; +import org.joda.time.format.*; +import org.slf4j.*; /** * RunningRule represents each rule in running status. Based on the {@link AlarmRule} definition, @@ -149,7 +138,7 @@ public void moveTo(LocalDateTime targetTime) { alarmMessage.setId0(meta.getId0()); alarmMessage.setId1(meta.getId1()); alarmMessage.setAlarmMessage(formatter.format(meta)); - alarmMessage.setTimeBucket(TimeBucketUtils.INSTANCE.getTime(LocalDateTime.now())); + alarmMessage.setStartTime(System.currentTimeMillis()); alarmMessageList.add(alarmMessage); } }); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java index eab389bd9..66cac8d45 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModule.java @@ -62,6 +62,7 @@ private void addQueryService(List<Class> classes) { classes.add(TraceQueryService.class); classes.add(MetadataQueryService.class); classes.add(AggregationQueryService.class); + classes.add(AlarmQueryService.class); } private void addServerInterface(List<Class> classes) { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java index 600577ca0..84435a9c8 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java @@ -115,6 +115,7 @@ public CoreModuleProvider() { this.registerServiceImplementation(TraceQueryService.class, new TraceQueryService(getManager())); this.registerServiceImplementation(MetadataQueryService.class, new MetadataQueryService(getManager())); this.registerServiceImplementation(AggregationQueryService.class, new AggregationQueryService(getManager())); + this.registerServiceImplementation(AlarmQueryService.class, new AlarmQueryService(getManager())); annotationScan.registerListener(storageAnnotationListener); annotationScan.registerListener(streamAnnotationListener); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java index 0f6ccd891..051e76120 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java @@ -37,7 +37,7 @@ private int id0; private int id1; private String alarmMessage; - private long timeBucket; + private long startTime; private static class NoAlarm extends AlarmMessage { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmRecord.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmRecord.java index 491b7e2fc..dfbba922d 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmRecord.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmRecord.java @@ -36,11 +36,12 @@ public class AlarmRecord extends Record { public static final String INDEX_NAME = "alarm_record"; - private static final String SCOPE = "scope"; + public static final String SCOPE = "scope"; private static final String NAME = "name"; private static final String ID0 = "id0"; private static final String ID1 = "id1"; - private static final String ALARM_MESSAGE = "alarm_message"; + private static final String START_TIME = "start_time"; + public static final String ALARM_MESSAGE = "alarm_message"; @Override public String id() { return getTimeBucket() + Const.ID_SPLIT + scope + Const.ID_SPLIT + id0 + Const.ID_SPLIT + id1; @@ -50,6 +51,7 @@ @Column(columnName = NAME) private String name; @Column(columnName = ID0) private int id0; @Column(columnName = ID1) private int id1; + @Column(columnName = START_TIME) private long startTime; @Column(columnName = ALARM_MESSAGE, matchQuery = true) private String alarmMessage; public static class Builder implements StorageBuilder<AlarmRecord> { @@ -61,6 +63,7 @@ map.put(ID0, storageData.getId0()); map.put(ID1, storageData.getId1()); map.put(ALARM_MESSAGE, storageData.getAlarmMessage()); + map.put(START_TIME, storageData.getStartTime()); map.put(TIME_BUCKET, storageData.getTimeBucket()); return map; } @@ -72,6 +75,7 @@ record.setId0(((Number)dbMap.get(ID0)).intValue()); record.setId1(((Number)dbMap.get(ID1)).intValue()); record.setAlarmMessage((String)dbMap.get(ALARM_MESSAGE)); + record.setStartTime(((Number)dbMap.get(START_TIME)).longValue()); record.setTimeBucket(((Number)dbMap.get(TIME_BUCKET)).longValue()); return record; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java index b6cd613ac..556dfc507 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java @@ -20,6 +20,8 @@ import java.util.List; import org.apache.skywalking.oap.server.core.analysis.worker.RecordProcess; +import org.apache.skywalking.oap.server.library.util.TimeBucketUtils; +import org.slf4j.*; /** * Save the alarm info into storage for UI query. @@ -28,15 +30,22 @@ */ public class AlarmStandardPersistence implements AlarmCallback { + private static final Logger logger = LoggerFactory.getLogger(AlarmStandardPersistence.class); + @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.getScope().ordinal()); record.setId0(message.getId0()); record.setId1(message.getId1()); record.setName(message.getName()); record.setAlarmMessage(message.getAlarmMessage()); - record.setTimeBucket(message.getTimeBucket()); + record.setStartTime(message.getStartTime()); + record.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(message.getStartTime())); RecordProcess.INSTANCE.in(record); }); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AlarmQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AlarmQueryService.java new file mode 100644 index 000000000..ab8f95640 --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AlarmQueryService.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core.query; + +import java.io.IOException; +import org.apache.skywalking.oap.server.core.query.entity.*; +import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.storage.StorageModule; +import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO; +import org.apache.skywalking.oap.server.library.module.*; +import org.apache.skywalking.oap.server.library.module.Service; +import org.slf4j.*; + +/** + * @author peng-yongsheng + */ +public class AlarmQueryService implements Service { + + private static final Logger logger = LoggerFactory.getLogger(AlarmQueryService.class); + + private final ModuleManager moduleManager; + private IAlarmQueryDAO alarmQueryDAO; + + public AlarmQueryService(ModuleManager moduleManager) { + this.moduleManager = moduleManager; + } + + private IAlarmQueryDAO getAlarmQueryDAO() { + if (alarmQueryDAO == null) { + alarmQueryDAO = moduleManager.find(StorageModule.NAME).getService(IAlarmQueryDAO.class); + } + return alarmQueryDAO; + } + + public Alarms getAlarm(final Scope scope, final String keyword, final Pagination paging, final long startTB, + final long endTB) throws IOException { + PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(paging); + return getAlarmQueryDAO().getAlarm(scope, keyword, page.getLimit(), page.getFrom(), startTB, endTB); + } +} diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/AlarmMessage.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmMessage.java similarity index 88% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/AlarmMessage.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmMessage.java index e79e93831..99bf23414 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/AlarmMessage.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmMessage.java @@ -16,10 +16,16 @@ * */ -package org.apache.skywalking.oap.query.graphql.type; +package org.apache.skywalking.oap.server.core.query.entity; +import lombok.*; import org.apache.skywalking.oap.server.core.source.Scope; +/** + * @author peng-yongsheng + */ +@Getter +@Setter public class AlarmMessage { private Scope scope; private String id; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/AlarmTrend.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmTrend.java similarity index 75% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/AlarmTrend.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmTrend.java index a64d10f3c..1d4c99eea 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/AlarmTrend.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/AlarmTrend.java @@ -16,11 +16,20 @@ * */ -package org.apache.skywalking.oap.query.graphql.type; +package org.apache.skywalking.oap.server.core.query.entity; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +import lombok.Getter; +/** + * @author peng-yongsheng + */ +@Getter public class AlarmTrend { - private List<Integer> numOfAlarm = new ArrayList<>(); + + private final List<Integer> numOfAlarm; + + public AlarmTrend() { + this.numOfAlarm = new ArrayList<>(); + } } diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Alarms.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Alarms.java similarity index 74% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Alarms.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Alarms.java index d9d7d3f41..22c0aef96 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Alarms.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Alarms.java @@ -16,11 +16,21 @@ * */ -package org.apache.skywalking.oap.query.graphql.type; +package org.apache.skywalking.oap.server.core.query.entity; -import java.util.List; +import java.util.*; +import lombok.*; +/** + * @author peng-yongsheng + */ +@Getter public class Alarms { - private List<AlarmMessage> msgs; - private int total; + + private final List<AlarmMessage> msgs; + @Setter private int total; + + public Alarms() { + this.msgs = new ArrayList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Attribute.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Attribute.java index aab8fdc85..8f7daafed 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Attribute.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Attribute.java @@ -18,6 +18,13 @@ package org.apache.skywalking.oap.server.core.query.entity; +import lombok.*; + +/** + * @author peng-yongsheng + */ +@Getter +@Setter public class Attribute { private String name; private String value; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/BasicTrace.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/BasicTrace.java index 7ccbdeacf..33bcace42 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/BasicTrace.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/BasicTrace.java @@ -21,13 +21,20 @@ import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class BasicTrace { - private String segmentId; - private List<String> endpointNames = new ArrayList<>(); - private int duration; - private String start; - private boolean isError; - private List<String> traceIds = new ArrayList<>(); + @Setter private String segmentId; + private final List<String> endpointNames; + @Setter private int duration; + @Setter private String start; + @Setter private boolean isError; + private final List<String> traceIds; + + public BasicTrace() { + this.endpointNames = new ArrayList<>(); + this.traceIds = new ArrayList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Call.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Call.java index fa211d98e..d1d32135e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Call.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Call.java @@ -21,6 +21,9 @@ import lombok.*; import org.apache.skywalking.oap.server.core.source.DetectPoint; +/** + * @author peng-yongsheng + */ @Getter @Setter public class Call { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ClusterBrief.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ClusterBrief.java index 2588590c0..681eb6121 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ClusterBrief.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ClusterBrief.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Getter @Setter public class ClusterBrief { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java index fb55fa77b..cf98063c2 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Getter @Setter public class Endpoint { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/IntValues.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/IntValues.java index 70609c502..9426c7935 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/IntValues.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/IntValues.java @@ -21,6 +21,14 @@ import java.util.*; import lombok.Getter; +/** + * @author peng-yongsheng + */ public class IntValues { - @Getter private List<KVInt> values = new LinkedList<>(); + + @Getter private final List<KVInt> values; + + public IntValues() { + this.values = new LinkedList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/KVInt.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/KVInt.java index 83d9680d4..1d16ad1bd 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/KVInt.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/KVInt.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Setter @Getter public class KVInt { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/KeyValue.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/KeyValue.java index 29cb6116d..46e355ef6 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/KeyValue.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/KeyValue.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Getter @Setter public class KeyValue { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Language.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Language.java index bd31a6791..75bd1b419 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Language.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Language.java @@ -18,6 +18,9 @@ package org.apache.skywalking.oap.server.core.query.entity; +/** + * @author peng-yongsheng + */ public enum Language { UNKNOWN, JAVA, diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/LogEntity.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/LogEntity.java index 4b3e32034..30a019573 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/LogEntity.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/LogEntity.java @@ -21,9 +21,15 @@ import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class LogEntity { - private long time; - private List<KeyValue> data = new ArrayList<>(); + @Setter private long time; + private final List<KeyValue> data; + + public LogEntity() { + this.data = new ArrayList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Node.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Node.java index c2302327a..ee1c54884 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Node.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Node.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Getter @Setter public class Node { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Order.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Order.java index fe562c1af..b81710efb 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Order.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Order.java @@ -18,6 +18,9 @@ package org.apache.skywalking.oap.server.core.query.entity; +/** + * @author peng-yongsheng + */ public enum Order { ASC, DES diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Pagination.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Pagination.java index 1c612e23b..8deec5ac5 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Pagination.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Pagination.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Getter @Setter public class Pagination { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/QueryOrder.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/QueryOrder.java index ec388954f..6b829e872 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/QueryOrder.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/QueryOrder.java @@ -18,6 +18,9 @@ package org.apache.skywalking.oap.server.core.query.entity; +/** + * @author peng-yongsheng + */ public enum QueryOrder { BY_START_TIME, BY_DURATION diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Ref.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Ref.java index d2b0f71f8..c32b36a7f 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Ref.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Ref.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Setter @Getter public class Ref { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/RefType.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/RefType.java index 4436cd25e..6e9625707 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/RefType.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/RefType.java @@ -18,6 +18,9 @@ package org.apache.skywalking.oap.server.core.query.entity; +/** + * @author peng-yongsheng + */ public enum RefType { CROSS_PROCESS, CROSS_THREAD diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Service.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Service.java index a2b112472..3f7a97c5e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Service.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Service.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Getter @Setter public class Service { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ServiceInstance.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ServiceInstance.java index 5acedd221..89bd6d793 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ServiceInstance.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ServiceInstance.java @@ -21,11 +21,17 @@ import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class ServiceInstance { - private String id; - private String name; - private List<Attribute> attributes = new ArrayList<>(); - private Language language; + @Setter private String id; + @Setter private String name; + private final List<Attribute> attributes; + @Setter private Language language; + + public ServiceInstance() { + this.attributes = new ArrayList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Span.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Span.java index 0a28568a2..c948c506b 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Span.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Span.java @@ -21,26 +21,34 @@ import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class Span { - private String traceId; - private String segmentId; - private int spanId; - private int parentSpanId; - private List<Ref> refs = new ArrayList<>(); - private String serviceCode; - private long startTime; - private long endTime; - private String endpointName; - private String type; - private String peer; - private String component; - private boolean isError; - private String layer; - private List<KeyValue> tags = new ArrayList<>(); - private List<LogEntity> logs = new ArrayList<>(); - private boolean isRoot; - private String segmentSpanId; - private String segmentParentSpanId; + @Setter private String traceId; + @Setter private String segmentId; + @Setter private int spanId; + @Setter private int parentSpanId; + private final List<Ref> refs; + @Setter private String serviceCode; + @Setter private long startTime; + @Setter private long endTime; + @Setter private String endpointName; + @Setter private String type; + @Setter private String peer; + @Setter private String component; + @Setter private boolean isError; + @Setter private String layer; + private final List<KeyValue> tags; + private final List<LogEntity> logs; + @Setter private boolean isRoot; + @Setter private String segmentSpanId; + @Setter private String segmentParentSpanId; + + public Span() { + this.refs = new ArrayList<>(); + this.tags = new ArrayList<>(); + this.logs = new ArrayList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Step.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Step.java index 7fed3a53f..7d22268e6 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Step.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Step.java @@ -18,6 +18,9 @@ package org.apache.skywalking.oap.server.core.query.entity; +/** + * @author peng-yongsheng + */ public enum Step { MONTH, DAY, diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Thermodynamic.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Thermodynamic.java index 6748f13d9..e3b77eb1f 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Thermodynamic.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Thermodynamic.java @@ -21,11 +21,17 @@ import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class Thermodynamic { - private List<List<Long>> nodes = new ArrayList<>(); - private int axisYStep; + private final List<List<Long>> nodes; + @Setter private int axisYStep; + + public Thermodynamic() { + this.nodes = new ArrayList<>(); + } public void setNodeValue(int columnNum, int rowNum, Long value) { List<Long> element = new ArrayList<>(3); @@ -34,5 +40,4 @@ public void setNodeValue(int columnNum, int rowNum, Long value) { element.add(value); nodes.add(element); } - } \ No newline at end of file diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TopNEntity.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TopNEntity.java index 411b9e0d3..8eb893096 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TopNEntity.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TopNEntity.java @@ -20,6 +20,9 @@ import lombok.*; +/** + * @author peng-yongsheng + */ @Getter @Setter public class TopNEntity { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Topology.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Topology.java index c76261de2..4f2c18160 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Topology.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Topology.java @@ -21,8 +21,16 @@ import java.util.*; import lombok.Getter; +/** + * @author peng-yongsheng + */ @Getter public class Topology { - private List<Node> nodes = new ArrayList<>(); - private List<Call> calls = new ArrayList<>(); + private final List<Node> nodes; + private final List<Call> calls; + + public Topology() { + this.nodes = new ArrayList<>(); + this.calls = new ArrayList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Trace.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Trace.java index 87988a2ba..f08076c74 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Trace.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Trace.java @@ -21,7 +21,14 @@ import java.util.*; import lombok.Getter; +/** + * @author peng-yongsheng + */ @Getter public class Trace { - private List<Span> spans = new ArrayList<>(); + private final List<Span> spans; + + public Trace() { + this.spans = new ArrayList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TraceBrief.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TraceBrief.java index d24333ed2..64a874479 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TraceBrief.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TraceBrief.java @@ -21,9 +21,15 @@ import java.util.*; import lombok.*; -@Setter +/** + * @author peng-yongsheng + */ @Getter public class TraceBrief { - private List<BasicTrace> traces = new ArrayList<>(); - private int total; + private final List<BasicTrace> traces; + @Setter private int total; + + public TraceBrief() { + this.traces = new ArrayList<>(); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TraceState.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TraceState.java index c184a00d0..a7d3cac3e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TraceState.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/TraceState.java @@ -18,6 +18,9 @@ package org.apache.skywalking.oap.server.core.query.entity; +/** + * @author peng-yongsheng + */ public enum TraceState { ALL, SUCCESS, diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java index e77d03601..880395cbf 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java @@ -25,5 +25,12 @@ All, Service, ServiceInstance, Endpoint, ServiceRelation, ServiceInstanceRelation, EndpointRelation, NetworkAddress, ServiceInstanceJVMCPU, ServiceInstanceJVMMemory, ServiceInstanceJVMMemoryPool, ServiceInstanceJVMGC, ServiceComponent, ServiceMapping, - Segment + Segment; + + public static Scope valueOf(int ordinal) { + if (ordinal < 0 || ordinal >= values().length) { + throw new IndexOutOfBoundsException("Invalid ordinal"); + } + return values()[ordinal]; + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageModule.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageModule.java index 424b23564..488661f4e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageModule.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/StorageModule.java @@ -38,6 +38,6 @@ IBatchDAO.class, StorageDAO.class, IRegisterLockDAO.class, IServiceInventoryCacheDAO.class, IServiceInstanceInventoryCacheDAO.class, IEndpointInventoryCacheDAO.class, INetworkAddressInventoryCacheDAO.class, - ITopologyQueryDAO.class, IMetricQueryDAO.class, ITraceQueryDAO.class, IMetadataQueryDAO.class, IAggregationQueryDAO.class}; + ITopologyQueryDAO.class, IMetricQueryDAO.class, ITraceQueryDAO.class, IMetadataQueryDAO.class, IAggregationQueryDAO.class, IAlarmQueryDAO.class}; } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java new file mode 100644 index 000000000..0f6d4cb21 --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core.storage.query; + +import java.io.IOException; +import org.apache.skywalking.oap.server.core.query.entity.*; +import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.storage.DAO; + +/** + * @author peng-yongsheng + */ +public interface IAlarmQueryDAO extends DAO { + + Alarms getAlarm(final Scope scope, final String keyword, final int limit, final int from, final long startTB, + final long endTB) throws IOException; +} diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/GraphQLQueryProvider.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/GraphQLQueryProvider.java index 840ef4295..7288c43ea 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/GraphQLQueryProvider.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/GraphQLQueryProvider.java @@ -65,7 +65,7 @@ .file("query-protocol/aggregation.graphqls") .resolvers(new AggregationQuery(getManager())) .file("query-protocol/alarm.graphqls") - .resolvers(new AlarmQuery()) + .resolvers(new AlarmQuery(getManager())) .build() .makeExecutableSchema(); this.graphQL = GraphQL.newGraphQL(schema).build(); diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AggregationQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AggregationQuery.java index 47812c3a2..fabbc2de4 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AggregationQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AggregationQuery.java @@ -27,6 +27,9 @@ import org.apache.skywalking.oap.server.core.query.entity.*; import org.apache.skywalking.oap.server.library.module.ModuleManager; +/** + * @author peng-yongsheng + */ public class AggregationQuery implements GraphQLQueryResolver { private final ModuleManager moduleManager; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java index 20b570346..3a30e8f2c 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java @@ -19,16 +19,42 @@ package org.apache.skywalking.oap.query.graphql.resolver; import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import org.apache.skywalking.oap.query.graphql.type.*; -import org.apache.skywalking.oap.server.core.query.entity.Pagination; +import java.io.IOException; +import org.apache.skywalking.oap.query.graphql.type.Duration; +import org.apache.skywalking.oap.server.core.CoreModule; +import org.apache.skywalking.oap.server.core.query.*; +import org.apache.skywalking.oap.server.core.query.entity.*; import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.library.module.ModuleManager; +/** + * @author peng-yongsheng + */ public class AlarmQuery implements GraphQLQueryResolver { + + private final ModuleManager moduleManager; + private AlarmQueryService queryService; + + public AlarmQuery(ModuleManager moduleManager) { + this.moduleManager = moduleManager; + } + + private AlarmQueryService getQueryService() { + if (queryService == null) { + this.queryService = moduleManager.find(CoreModule.NAME).getService(AlarmQueryService.class); + } + return queryService; + } + public AlarmTrend getAlarmTrend(final Duration duration) { return new AlarmTrend(); } - public Alarms getAlarm(final Duration duration, final Scope scope, final String keyword, final Pagination paging) { - return new Alarms(); + public Alarms getAlarm(final Duration duration, final Scope scope, final String keyword, + final Pagination paging) throws IOException { + long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + + return getQueryService().getAlarm(scope, keyword, paging, startTimeBucket, endTimeBucket); } } diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java index bcc6da09a..3ab69c1ad 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetadataQuery.java @@ -28,6 +28,9 @@ import org.apache.skywalking.oap.server.core.query.entity.*; import org.apache.skywalking.oap.server.library.module.ModuleManager; +/** + * @author peng-yongsheng + */ public class MetadataQuery implements GraphQLQueryResolver { private final ModuleManager moduleManager; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java index 618ca0d3d..429d32fb6 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/MetricQuery.java @@ -27,6 +27,9 @@ import org.apache.skywalking.oap.server.core.query.entity.*; import org.apache.skywalking.oap.server.library.module.ModuleManager; +/** + * @author peng-yongsheng + */ public class MetricQuery implements GraphQLQueryResolver { private final ModuleManager moduleManager; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TopologyQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TopologyQuery.java index 454d9b798..ef5a7bc7b 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TopologyQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TopologyQuery.java @@ -26,6 +26,9 @@ import org.apache.skywalking.oap.server.core.query.entity.Topology; import org.apache.skywalking.oap.server.library.module.ModuleManager; +/** + * @author peng-yongsheng + */ public class TopologyQuery implements GraphQLQueryResolver { private final ModuleManager moduleManager; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TraceQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TraceQuery.java index b2d662ad2..aca728e1b 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TraceQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/TraceQuery.java @@ -29,6 +29,9 @@ import static java.util.Objects.nonNull; +/** + * @author peng-yongsheng + */ public class TraceQuery implements GraphQLQueryResolver { private final ModuleManager moduleManager; diff --git a/oap-server/server-starter/src/main/resources/alarm-settings.yml b/oap-server/server-starter/src/main/resources/alarm-settings.yml index f26fa1e20..55c150eaf 100644 --- a/oap-server/server-starter/src/main/resources/alarm-settings.yml +++ b/oap-server/server-starter/src/main/resources/alarm-settings.yml @@ -15,8 +15,8 @@ # limitations under the License. # Sample alarm rules. -#rules: -# # Rule unique name, must be ended with `_rule`. +rules: + # Rule unique name, must be ended with `_rule`. # endpoint_percent_rule: # # Indicator value need to be long, double or int # indicator-name: endpoint_percent @@ -29,16 +29,16 @@ # # How many times of checks, the alarm keeps silence after alarm triggered, default as same as period. # silence-period: 10 # message: Successful rate of endpoint {name} is lower than 75% -# service_percent_rule: -# indicator-name: service_percent -# # [Optional] Default, match all services in this indicator -# include-names: -# - service_a -# - service_b -# threshold: 85 -# op: < -# period: 10 -# count: 4 + service_resp_time_rule: + indicator-name: service_resp_time + # [Optional] Default, match all services in this indicator + include-names: + - dubbox-provider + - dubbox-consumer + threshold: 1000 + op: ">" + period: 10 + count: 1 #webhooks: # - http://127.0.0.1/notify/ diff --git a/oap-server/server-starter/src/main/resources/log4j2.xml b/oap-server/server-starter/src/main/resources/log4j2.xml index 2bb72264c..59229302e 100644 --- a/oap-server/server-starter/src/main/resources/log4j2.xml +++ b/oap-server/server-starter/src/main/resources/log4j2.xml @@ -32,6 +32,7 @@ <logger name="io.netty" level="INFO"/> <logger name="org.apache.http" level="INFO"/> <logger name="org.apache.skywalking.oap.server.receiver.istio.telemetry" level="DEBUG"/> + <logger name="org.apache.skywalking.oap.server.core.alarm.AlarmStandardPersistence" level="DEBUG"/> <logger name="org.apache.skywalking.oap.server.core.remote" level="INFO"/> <Root level="INFO"> <AppenderRef ref="Console"/> diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java index 83e85c47f..e6b9eb453 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/StorageModuleElasticsearchProvider.java @@ -80,6 +80,7 @@ public void prepare() throws ServiceNotProvidedException { this.registerServiceImplementation(ITraceQueryDAO.class, new TraceQueryEsDAO(elasticSearchClient)); this.registerServiceImplementation(IMetadataQueryDAO.class, new MetadataQueryEsDAO(elasticSearchClient)); this.registerServiceImplementation(IAggregationQueryDAO.class, new AggregationQueryEsDAO(elasticSearchClient)); + this.registerServiceImplementation(IAlarmQueryDAO.class, new AlarmQueryEsDAO(elasticSearchClient)); } @Override diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AlarmQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AlarmQueryEsDAO.java new file mode 100644 index 000000000..942c3d7a3 --- /dev/null +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AlarmQueryEsDAO.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query; + +import java.io.IOException; +import java.util.Objects; +import org.apache.skywalking.oap.server.core.alarm.AlarmRecord; +import org.apache.skywalking.oap.server.core.query.entity.*; +import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.storage.query.IAlarmQueryDAO; +import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient; +import org.apache.skywalking.oap.server.library.util.StringUtils; +import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.*; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.index.query.*; +import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.builder.SearchSourceBuilder; + +/** + * @author peng-yongsheng + */ +public class AlarmQueryEsDAO extends EsDAO implements IAlarmQueryDAO { + + public AlarmQueryEsDAO(ElasticSearchClient client) { + super(client); + } + + public Alarms getAlarm(final Scope scope, final String keyword, final int limit, final int from, final long startTB, + final long endTB) throws IOException { + SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource(); + + BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); + boolQueryBuilder.must().add(QueryBuilders.rangeQuery(AlarmRecord.TIME_BUCKET).gte(startTB).lte(endTB)); + + if (Objects.nonNull(scope)) { + boolQueryBuilder.must().add(QueryBuilders.termQuery(AlarmRecord.SCOPE, scope.ordinal())); + } + + if (StringUtils.isNotEmpty(keyword)) { + String matchCName = MatchCNameBuilder.INSTANCE.build(AlarmRecord.ALARM_MESSAGE); + boolQueryBuilder.must().add(QueryBuilders.matchQuery(matchCName, keyword)); + } + + sourceBuilder.query(boolQueryBuilder); + sourceBuilder.size(limit); + sourceBuilder.from(from); + + SearchResponse response = getClient().search(AlarmRecord.INDEX_NAME, sourceBuilder); + + Alarms alarms = new Alarms(); + alarms.setTotal((int)response.getHits().totalHits); + + for (SearchHit searchHit : response.getHits().getHits()) { + AlarmRecord.Builder builder = new AlarmRecord.Builder(); + AlarmRecord alarmRecord = builder.map2Data(searchHit.getSourceAsMap()); + + AlarmMessage message = new AlarmMessage(); + message.setId(String.valueOf(alarmRecord.getId0())); + message.setMessage(alarmRecord.getAlarmMessage()); + message.setStartTime(alarmRecord.getStartTime()); + message.setScope(Scope.valueOf(alarmRecord.getScope())); + alarms.getMsgs().add(message); + } + return alarms; + } +} ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services