From 7c192b19d675589417981ca2a2c6f15c5b82aac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=8B=87=E5=8D=87=20pengys?= <8082209@qq.com> Date: Thu, 11 Oct 2018 15:55:04 +0800 Subject: [PATCH] Alarm query and alarm persistence test. (#1753) * Alarm query and alarm persistence test. * Fixed the package error. --- .../core/alarm/provider/RunningRule.java | 25 ++---- .../oap/server/core/CoreModule.java | 1 + .../oap/server/core/CoreModuleProvider.java | 1 + .../oap/server/core/alarm/AlarmMessage.java | 2 +- .../oap/server/core/alarm/AlarmRecord.java | 8 +- .../core/alarm/AlarmStandardPersistence.java | 11 ++- .../server/core/query/AlarmQueryService.java | 56 +++++++++++++ .../core/query/entity}/AlarmMessage.java | 8 +- .../server/core/query/entity}/AlarmTrend.java | 17 +++- .../oap/server/core/query/entity}/Alarms.java | 18 +++- .../server/core/query/entity/Attribute.java | 7 ++ .../server/core/query/entity/BasicTrace.java | 21 +++-- .../oap/server/core/query/entity/Call.java | 3 + .../core/query/entity/ClusterBrief.java | 3 + .../server/core/query/entity/Endpoint.java | 3 + .../server/core/query/entity/IntValues.java | 10 ++- .../oap/server/core/query/entity/KVInt.java | 3 + .../server/core/query/entity/KeyValue.java | 3 + .../server/core/query/entity/Language.java | 3 + .../server/core/query/entity/LogEntity.java | 12 ++- .../oap/server/core/query/entity/Node.java | 3 + .../oap/server/core/query/entity/Order.java | 3 + .../server/core/query/entity/Pagination.java | 3 + .../server/core/query/entity/QueryOrder.java | 3 + .../oap/server/core/query/entity/Ref.java | 3 + .../oap/server/core/query/entity/RefType.java | 3 + .../oap/server/core/query/entity/Service.java | 3 + .../core/query/entity/ServiceInstance.java | 16 ++-- .../oap/server/core/query/entity/Span.java | 48 ++++++----- .../oap/server/core/query/entity/Step.java | 3 + .../core/query/entity/Thermodynamic.java | 13 ++- .../server/core/query/entity/TopNEntity.java | 3 + .../server/core/query/entity/Topology.java | 12 ++- .../oap/server/core/query/entity/Trace.java | 9 +- .../server/core/query/entity/TraceBrief.java | 12 ++- .../server/core/query/entity/TraceState.java | 3 + .../oap/server/core/source/Scope.java | 9 +- .../server/core/storage/StorageModule.java | 2 +- .../core/storage/query/IAlarmQueryDAO.java | 33 ++++++++ .../query/graphql/GraphQLQueryProvider.java | 2 +- .../graphql/resolver/AggregationQuery.java | 3 + .../query/graphql/resolver/AlarmQuery.java | 34 +++++++- .../query/graphql/resolver/MetadataQuery.java | 3 + .../query/graphql/resolver/MetricQuery.java | 3 + .../query/graphql/resolver/TopologyQuery.java | 3 + .../query/graphql/resolver/TraceQuery.java | 3 + .../src/main/resources/alarm-settings.yml | 24 +++--- .../src/main/resources/log4j2.xml | 1 + .../StorageModuleElasticsearchProvider.java | 1 + .../elasticsearch/query/AlarmQueryEsDAO.java | 82 +++++++++++++++++++ 50 files changed, 462 insertions(+), 96 deletions(-) create mode 100644 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/AlarmQueryService.java rename oap-server/{server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type => server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity}/AlarmMessage.java (88%) rename oap-server/{server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type => server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity}/AlarmTrend.java (75%) rename oap-server/{server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type => server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity}/Alarms.java (74%) create mode 100644 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IAlarmQueryDAO.java create mode 100644 oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AlarmQueryEsDAO.java 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 d3d1d628a7..3f8c6ea396 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 class RunningRule { 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 eab389bd97..66cac8d45c 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 @@ public class CoreModule extends ModuleDefine { classes.add(TraceQueryService.class); classes.add(MetadataQueryService.class); classes.add(AggregationQueryService.class); + classes.add(AlarmQueryService.class); } private void addServerInterface(List 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 600577ca05..84435a9c8e 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 class CoreModuleProvider extends ModuleProvider { 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 0f6ccd8916..051e76120b 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 @@ public class AlarmMessage { 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 491b7e2fcf..dfbba922d5 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 @@ import org.apache.skywalking.oap.server.core.storage.annotation.*; 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 @@ public class AlarmRecord extends Record { @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 { @@ -61,6 +63,7 @@ public class AlarmRecord extends Record { 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 @@ public class AlarmRecord extends Record { 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 b6cd613acd..556dfc507b 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 @@ package org.apache.skywalking.oap.server.core.alarm; 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 @@ import org.apache.skywalking.oap.server.core.analysis.worker.RecordProcess; */ public class AlarmStandardPersistence implements AlarmCallback { + private static final Logger logger = LoggerFactory.getLogger(AlarmStandardPersistence.class); + @Override public void doAlarm(List 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 0000000000..ab8f956405 --- /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 e79e938319..99bf234141 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 a64d10f3cc..1d4c99eeaa 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 numOfAlarm = new ArrayList<>(); + + private final List 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 d9d7d3f41e..22c0aef962 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 msgs; - private int total; + + private final List 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 aab8fdc854..8f7daafed1 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 7ccbdeacf6..33bcace421 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 @@ package org.apache.skywalking.oap.server.core.query.entity; import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class BasicTrace { - private String segmentId; - private List endpointNames = new ArrayList<>(); - private int duration; - private String start; - private boolean isError; - private List traceIds = new ArrayList<>(); + @Setter private String segmentId; + private final List endpointNames; + @Setter private int duration; + @Setter private String start; + @Setter private boolean isError; + private final List 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 fa211d98e9..d1d32135e2 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 2588590c06..681eb6121c 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 fb55fa77bd..cf98063c21 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 70609c5029..9426c79354 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 @@ package org.apache.skywalking.oap.server.core.query.entity; import java.util.*; import lombok.Getter; +/** + * @author peng-yongsheng + */ public class IntValues { - @Getter private List values = new LinkedList<>(); + + @Getter private final List 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 83d9680d4b..1d16ad1bd0 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 29cb6116df..46e355ef66 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 bd31a6791d..75bd1b419b 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 4b3e320346..30a0195736 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 @@ package org.apache.skywalking.oap.server.core.query.entity; import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class LogEntity { - private long time; - private List data = new ArrayList<>(); + @Setter private long time; + private final List 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 c2302327a2..ee1c548849 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 fe562c1af1..b81710efb6 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 1c612e23be..8deec5ac58 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 ec388954f7..6b829e872d 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 d2b0f71f81..c32b36a7f9 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 4436cd25ed..6e9625707b 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 a2b1124726..3f7a97c5e6 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 5acedd2211..89bd6d793e 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 @@ package org.apache.skywalking.oap.server.core.query.entity; import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class ServiceInstance { - private String id; - private String name; - private List attributes = new ArrayList<>(); - private Language language; + @Setter private String id; + @Setter private String name; + private final List 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 0a28568a2c..c948c506b9 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 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 tags = new ArrayList<>(); - private List 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 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 tags; + private final List 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 7fed3a53fe..7d22268e62 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 6748f13d9a..e3b77eb1ff 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 @@ package org.apache.skywalking.oap.server.core.query.entity; import java.util.*; import lombok.*; +/** + * @author peng-yongsheng + */ @Getter -@Setter public class Thermodynamic { - private List> nodes = new ArrayList<>(); - private int axisYStep; + private final List> nodes; + @Setter private int axisYStep; + + public Thermodynamic() { + this.nodes = new ArrayList<>(); + } public void setNodeValue(int columnNum, int rowNum, Long value) { List element = new ArrayList<>(3); @@ -34,5 +40,4 @@ public class Thermodynamic { 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 411b9e0d36..8eb893096d 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 @@ package org.apache.skywalking.oap.server.core.query.entity; 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 c76261de21..4f2c181605 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 @@ package org.apache.skywalking.oap.server.core.query.entity; import java.util.*; import lombok.Getter; +/** + * @author peng-yongsheng + */ @Getter public class Topology { - private List nodes = new ArrayList<>(); - private List calls = new ArrayList<>(); + private final List nodes; + private final List 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 87988a2bae..f08076c740 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 @@ package org.apache.skywalking.oap.server.core.query.entity; import java.util.*; import lombok.Getter; +/** + * @author peng-yongsheng + */ @Getter public class Trace { - private List spans = new ArrayList<>(); + private final List 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 d24333ed26..64a8744790 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 @@ package org.apache.skywalking.oap.server.core.query.entity; import java.util.*; import lombok.*; -@Setter +/** + * @author peng-yongsheng + */ @Getter public class TraceBrief { - private List traces = new ArrayList<>(); - private int total; + private final List 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 c184a00d02..a7d3cac3ec 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 e77d036015..880395cbfb 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 @@ public enum Scope { 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 424b235644..488661f4e5 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 @@ public class StorageModule extends ModuleDefine { 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 0000000000..0f6d4cb21c --- /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 840ef42954..7288c43ea7 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 @@ public class GraphQLQueryProvider extends ModuleProvider { .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 47812c3a2e..fabbc2de4a 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.*; 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 20b570346f..3a30e8f2cf 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 bcc6da09ab..3ab69c1adb 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.*; 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 618ca0d3d3..429d32fb6b 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.*; 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 454d9b7988..ef5a7bc7b9 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.*; 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 b2d662ad29..aca728e1b5 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 org.apache.skywalking.oap.server.library.util.StringUtils; 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 f26fa1e20d..55c150eaf8 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 2bb72264cc..59229302ee 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 @@ + 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 83e85c47f7..e6b9eb4539 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 class StorageModuleElasticsearchProvider extends ModuleProvider { 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 0000000000..942c3d7a3a --- /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; + } +} -- GitLab