From 2bad786e798eb9c2fbf26c58aeadc91dc21d4880 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: Sun, 16 Sep 2018 10:57:12 +0800 Subject: [PATCH] Analysis and query implementation of thermodynamic. (#1678) * Metric query. * Analysis and query implementation of thermodynamic. --- .../skywalking/oap/server/core/Const.java | 2 + .../generated/all/AllHeatmapIndicator.java | 15 ++-- .../generated/all/AllP50Indicator.java | 4 +- .../generated/all/AllP75Indicator.java | 4 +- .../generated/all/AllP90Indicator.java | 4 +- .../generated/all/AllP95Indicator.java | 4 +- .../generated/all/AllP99Indicator.java | 4 +- .../analysis/indicator/IntKeyLongValue.java | 19 +++-- .../indicator/IntKeyLongValueArray.java | 58 +++++++++++++++ .../core/analysis/indicator/PxxIndicator.java | 25 ++----- .../indicator/ThermodynamicIndicator.java | 8 +-- .../core/query/MetadataQueryService.java | 70 +++++++++++++++++++ .../server/core/query/MetricQueryService.java | 1 + .../server/core/query/entity}/Attribute.java | 2 +- .../core/query/entity}/ClusterBrief.java | 6 +- .../server/core/query/entity}/Endpoint.java | 2 +- .../server/core/query/entity}/Language.java | 2 +- .../server/core/query/entity}/Service.java | 6 +- .../core/query/entity}/ServiceInstance.java | 9 ++- .../core/storage/query/IMetadataQueryDAO.java | 27 +++++++ .../core/storage/type/StorageDataType.java | 29 ++++++++ .../oap/server/library/module/Service.java | 1 - .../query/graphql/GraphQLQueryProvider.java | 2 +- .../query/graphql/resolver/MetadataQuery.java | 52 ++++++++++---- .../base/ColumnTypeEsMapping.java | 4 +- .../elasticsearch/base/IndicatorEsDAO.java | 15 +++- .../elasticsearch/query/MetricQueryEsDAO.java | 18 ++++- 27 files changed, 319 insertions(+), 74 deletions(-) create mode 100644 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValueArray.java create mode 100644 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.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}/Attribute.java (93%) 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}/ClusterBrief.java (91%) 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}/Endpoint.java (93%) 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}/Language.java (93%) 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}/Service.java (90%) 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}/ServiceInstance.java (84%) create mode 100644 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java create mode 100644 oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/type/StorageDataType.java diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java index ca3583a7a..fbad92199 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java @@ -24,6 +24,8 @@ package org.apache.skywalking.oap.server.core; public class Const { public static final int NONE = 0; public static final String ID_SPLIT = "_"; + public static final String KEY_VALUE_SPLIT = ","; + public static final String ARRAY_SPLIT = "|"; public static final int NONE_SERVICE_ID = 1; public static final int NONE_INSTANCE_ID = 1; public static final int NONE_ENDPOINT_ID = 1; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllHeatmapIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllHeatmapIndicator.java index a1261cb00..e0ab631a7 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllHeatmapIndicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllHeatmapIndicator.java @@ -19,15 +19,14 @@ package org.apache.skywalking.oap.server.core.analysis.generated.all; import java.util.*; -import org.apache.skywalking.oap.server.core.alarm.AlarmMeta; -import org.apache.skywalking.oap.server.core.alarm.AlarmSupported; +import org.apache.skywalking.oap.server.core.alarm.*; import org.apache.skywalking.oap.server.core.analysis.indicator.*; import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType; import org.apache.skywalking.oap.server.core.remote.annotation.StreamData; import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData; -import org.apache.skywalking.oap.server.core.storage.annotation.*; -import org.apache.skywalking.oap.server.core.storage.StorageBuilder; import org.apache.skywalking.oap.server.core.source.Scope; +import org.apache.skywalking.oap.server.core.storage.StorageBuilder; +import org.apache.skywalking.oap.server.core.storage.annotation.StorageEntity; /** * This class is auto generated. Please don't change this class manually. @@ -39,7 +38,6 @@ import org.apache.skywalking.oap.server.core.source.Scope; @StorageEntity(name = "all_heatmap", builder = AllHeatmapIndicator.Builder.class) public class AllHeatmapIndicator extends ThermodynamicIndicator implements AlarmSupported { - @Override public String id() { String splitJointId = String.valueOf(getTimeBucket()); return splitJointId; @@ -51,7 +49,6 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm return result; } - @Override public int remoteHashCode() { int result = 17; return result; @@ -78,7 +75,6 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm remoteBuilder.setDataLongs(0, getTimeBucket()); - remoteBuilder.setDataIntegers(0, getStep()); remoteBuilder.setDataIntegers(1, getNumOfSteps()); getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize())); @@ -90,11 +86,10 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm setTimeBucket(remoteData.getDataLongs(0)); - setStep(remoteData.getDataIntegers(0)); setNumOfSteps(remoteData.getDataIntegers(1)); - setDetailGroup(new ArrayList<>(30)); + setDetailGroup(new IntKeyLongValueArray(30)); remoteData.getDataIntLongPairListList().forEach(element -> { getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue())); }); @@ -153,7 +148,7 @@ public class AllHeatmapIndicator extends ThermodynamicIndicator implements Alarm AllHeatmapIndicator indicator = new AllHeatmapIndicator(); indicator.setStep(((Number)dbMap.get("step")).intValue()); indicator.setNumOfSteps(((Number)dbMap.get("num_of_steps")).intValue()); - indicator.setDetailGroup((java.util.List)dbMap.get("detail_group")); + indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group")); indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue()); return indicator; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP50Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP50Indicator.java index 3471b31ad..1bc9abe93 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP50Indicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP50Indicator.java @@ -94,7 +94,7 @@ public class AllP50Indicator extends P50Indicator implements AlarmSupported { setValue(remoteData.getDataIntegers(0)); setPrecision(remoteData.getDataIntegers(1)); - setDetailGroup(new ArrayList<>(30)); + setDetailGroup(new IntKeyLongValueArray(30)); remoteData.getDataIntLongPairListList().forEach(element -> { getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue())); }); @@ -153,7 +153,7 @@ public class AllP50Indicator extends P50Indicator implements AlarmSupported { AllP50Indicator indicator = new AllP50Indicator(); indicator.setValue(((Number)dbMap.get("value")).intValue()); indicator.setPrecision(((Number)dbMap.get("precision")).intValue()); - indicator.setDetailGroup((java.util.List)dbMap.get("detail_group")); + indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group")); indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue()); return indicator; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP75Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP75Indicator.java index 4bf661b2a..fbcedcb7d 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP75Indicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP75Indicator.java @@ -94,7 +94,7 @@ public class AllP75Indicator extends P75Indicator implements AlarmSupported { setValue(remoteData.getDataIntegers(0)); setPrecision(remoteData.getDataIntegers(1)); - setDetailGroup(new ArrayList<>(30)); + setDetailGroup(new IntKeyLongValueArray(30)); remoteData.getDataIntLongPairListList().forEach(element -> { getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue())); }); @@ -153,7 +153,7 @@ public class AllP75Indicator extends P75Indicator implements AlarmSupported { AllP75Indicator indicator = new AllP75Indicator(); indicator.setValue(((Number)dbMap.get("value")).intValue()); indicator.setPrecision(((Number)dbMap.get("precision")).intValue()); - indicator.setDetailGroup((java.util.List)dbMap.get("detail_group")); + indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group")); indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue()); return indicator; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP90Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP90Indicator.java index e2771a89d..f2031b196 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP90Indicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP90Indicator.java @@ -94,7 +94,7 @@ public class AllP90Indicator extends P90Indicator implements AlarmSupported { setValue(remoteData.getDataIntegers(0)); setPrecision(remoteData.getDataIntegers(1)); - setDetailGroup(new ArrayList<>(30)); + setDetailGroup(new IntKeyLongValueArray(30)); remoteData.getDataIntLongPairListList().forEach(element -> { getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue())); }); @@ -153,7 +153,7 @@ public class AllP90Indicator extends P90Indicator implements AlarmSupported { AllP90Indicator indicator = new AllP90Indicator(); indicator.setValue(((Number)dbMap.get("value")).intValue()); indicator.setPrecision(((Number)dbMap.get("precision")).intValue()); - indicator.setDetailGroup((java.util.List)dbMap.get("detail_group")); + indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group")); indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue()); return indicator; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java index cc9c84058..64f17a15b 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP95Indicator.java @@ -94,7 +94,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported { setValue(remoteData.getDataIntegers(0)); setPrecision(remoteData.getDataIntegers(1)); - setDetailGroup(new ArrayList<>(30)); + setDetailGroup(new IntKeyLongValueArray(30)); remoteData.getDataIntLongPairListList().forEach(element -> { getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue())); }); @@ -153,7 +153,7 @@ public class AllP95Indicator extends P95Indicator implements AlarmSupported { AllP95Indicator indicator = new AllP95Indicator(); indicator.setValue(((Number)dbMap.get("value")).intValue()); indicator.setPrecision(((Number)dbMap.get("precision")).intValue()); - indicator.setDetailGroup((java.util.List)dbMap.get("detail_group")); + indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group")); indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue()); return indicator; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP99Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP99Indicator.java index 031d7cb27..01ce27320 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP99Indicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/all/AllP99Indicator.java @@ -94,7 +94,7 @@ public class AllP99Indicator extends P99Indicator implements AlarmSupported { setValue(remoteData.getDataIntegers(0)); setPrecision(remoteData.getDataIntegers(1)); - setDetailGroup(new ArrayList<>(30)); + setDetailGroup(new IntKeyLongValueArray(30)); remoteData.getDataIntLongPairListList().forEach(element -> { getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue())); }); @@ -153,7 +153,7 @@ public class AllP99Indicator extends P99Indicator implements AlarmSupported { AllP99Indicator indicator = new AllP99Indicator(); indicator.setValue(((Number)dbMap.get("value")).intValue()); indicator.setPrecision(((Number)dbMap.get("precision")).intValue()); - indicator.setDetailGroup((java.util.List)dbMap.get("detail_group")); + indicator.setDetailGroup((IntKeyLongValueArray)dbMap.get("detail_group")); indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue()); return indicator; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValue.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValue.java index 0537d608f..f3fcdc075 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValue.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValue.java @@ -19,18 +19,19 @@ package org.apache.skywalking.oap.server.core.analysis.indicator; import java.util.Objects; -import lombok.Getter; -import lombok.Setter; +import lombok.*; +import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.remote.grpc.proto.IntKeyLongValuePair; +import org.apache.skywalking.oap.server.core.storage.type.StorageDataType; /** * IntKeyLongValue is a common bean, with key in Int and value in Long * - * @author wusheng + * @author wusheng, peng-yongsheng */ @Setter @Getter -public class IntKeyLongValue implements Comparable { +public class IntKeyLongValue implements Comparable, StorageDataType { private int key; private long value; @@ -72,4 +73,14 @@ public class IntKeyLongValue implements Comparable { this.key = pair.getKey(); this.value = pair.getValue(); } + + @Override public String toStorageData() { + return key + Const.KEY_VALUE_SPLIT + value; + } + + @Override public void toObject(String data) { + String[] keyValue = data.split(Const.KEY_VALUE_SPLIT); + this.key = Integer.valueOf(keyValue[0]); + this.value = Long.valueOf(keyValue[1]); + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValueArray.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValueArray.java new file mode 100644 index 000000000..298da6268 --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/IntKeyLongValueArray.java @@ -0,0 +1,58 @@ +/* + * 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.analysis.indicator; + +import java.util.ArrayList; +import org.apache.skywalking.oap.server.core.Const; +import org.apache.skywalking.oap.server.core.storage.type.StorageDataType; + +/** + * @author peng-yongsheng + */ +public class IntKeyLongValueArray extends ArrayList implements StorageDataType { + + public IntKeyLongValueArray(int initialCapacity) { + super(initialCapacity); + } + + public IntKeyLongValueArray() { + super(); + } + + @Override public String toStorageData() { + StringBuilder data = new StringBuilder(); + for (int i = 0; i < this.size(); i++) { + if (i == 0) { + data.append(this.get(i).toStorageData()); + } else { + data.append(Const.ARRAY_SPLIT).append(this.get(i).toStorageData()); + } + } + return data.toString(); + } + + @Override public void toObject(String data) { + String[] keyValues = data.split(Const.ARRAY_SPLIT); + for (int i = 0; i < keyValues.length; i++) { + IntKeyLongValue value = new IntKeyLongValue(); + value.toObject(keyValues[i]); + this.set(i, value); + } + } +} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PxxIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PxxIndicator.java index 282b87750..d16f9bfb3 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PxxIndicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PxxIndicator.java @@ -18,17 +18,9 @@ package org.apache.skywalking.oap.server.core.analysis.indicator; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import lombok.Getter; -import lombok.Setter; -import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Arg; -import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Entrance; -import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorOperator; -import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.SourceFrom; +import java.util.*; +import lombok.*; +import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.*; import org.apache.skywalking.oap.server.core.storage.annotation.Column; /** @@ -38,7 +30,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; * observations in a group of observations fall. For example, the 20th percentile is the value (or score) below which * 20% of the observations may be found. * - * @author wusheng + * @author wusheng, peng-yongsheng */ @IndicatorOperator public abstract class PxxIndicator extends Indicator implements IntValueHolder { @@ -48,14 +40,14 @@ public abstract class PxxIndicator extends Indicator implements IntValueHolder { @Getter @Setter @Column(columnName = VALUE) private int value; @Getter @Setter @Column(columnName = PRECISION) private int precision; - @Getter @Setter @Column(columnName = DETAIL_GROUP) private List detailGroup; + @Getter @Setter @Column(columnName = DETAIL_GROUP) private IntKeyLongValueArray detailGroup; private final int percentileRank; private Map detailIndex; public PxxIndicator(int percentileRank) { this.percentileRank = percentileRank; - detailGroup = new ArrayList<>(30); + detailGroup = new IntKeyLongValueArray(30); } @Entrance @@ -111,11 +103,6 @@ public abstract class PxxIndicator extends Indicator implements IntValueHolder { } } - @Override - public int getValue() { - return value; - } - private void addElement(IntKeyLongValue element) { detailGroup.add(element); detailIndex.put(element.getKey(), element); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/ThermodynamicIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/ThermodynamicIndicator.java index acc35d346..a69f7ef96 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/ThermodynamicIndicator.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/ThermodynamicIndicator.java @@ -31,17 +31,17 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; * A heat map (or heatmap) is a graphical representation of data where the individual values contained in a matrix are * represented as colors. * - * @author wusheng + * @author wusheng, peng-yongsheng */ @IndicatorOperator public abstract class ThermodynamicIndicator extends Indicator { - protected static final String DETAIL_GROUP = "detail_group"; - protected static final String STEP = "step"; + public static final String DETAIL_GROUP = "detail_group"; + public static final String STEP = "step"; public static final String NUM_OF_STEPS = "num_of_steps"; @Getter @Setter @Column(columnName = STEP) private int step = 0; @Getter @Setter @Column(columnName = NUM_OF_STEPS) private int numOfSteps = 0; - @Getter @Setter @Column(columnName = DETAIL_GROUP) private List detailGroup = new ArrayList<>(30); + @Getter @Setter @Column(columnName = DETAIL_GROUP) private IntKeyLongValueArray detailGroup = new IntKeyLongValueArray(30); private Map detailIndex; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java new file mode 100644 index 000000000..7520b0b41 --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetadataQueryService.java @@ -0,0 +1,70 @@ +/* + * 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.util.*; +import org.apache.skywalking.oap.server.core.query.entity.*; +import org.apache.skywalking.oap.server.core.storage.StorageModule; +import org.apache.skywalking.oap.server.core.storage.query.IMetadataQueryDAO; +import org.apache.skywalking.oap.server.library.module.ModuleManager; + +/** + * @author peng-yongsheng + */ +public class MetadataQueryService implements org.apache.skywalking.oap.server.library.module.Service { + + private final ModuleManager moduleManager; + private IMetadataQueryDAO metadataQueryDAO; + + public MetadataQueryService(ModuleManager moduleManager) { + this.moduleManager = moduleManager; + } + + public IMetadataQueryDAO getMetadataQueryDAO() { + if (metadataQueryDAO == null) { + metadataQueryDAO = moduleManager.find(StorageModule.NAME).getService(IMetadataQueryDAO.class); + } + return metadataQueryDAO; + } + + public ClusterBrief getGlobalBrief(final Step step, final long startTB, final long endTB) { + return new ClusterBrief(); + } + + public List getAllServices(final Step step, final long startTB, final long endTB) { + return Collections.emptyList(); + } + + public List searchServices(final Step step, final long startTB, final long endTB, final String keyword) { + return Collections.emptyList(); + } + + public List getServiceInstances(final Step step, final long startTB, final long endTB, + final String id) { + return Collections.emptyList(); + } + + public List searchEndpoint(final String keyword, final String serviceId, final int limit) { + return Collections.emptyList(); + } + + public Service searchService(final Step step, final long startTB, final long endTB, final String serviceCode) { + return new Service(); + } +} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java index 4c8a84182..1e9c21709 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java @@ -29,6 +29,7 @@ import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.annotation.ValueColumnIds; import org.apache.skywalking.oap.server.core.storage.query.IMetricQueryDAO; import org.apache.skywalking.oap.server.library.module.*; +import org.apache.skywalking.oap.server.library.module.Service; import org.slf4j.*; /** diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Attribute.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Attribute.java similarity index 93% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Attribute.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Attribute.java index 70d2915bb..aab8fdc85 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Attribute.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Attribute.java @@ -16,7 +16,7 @@ * */ -package org.apache.skywalking.oap.query.graphql.type; +package org.apache.skywalking.oap.server.core.query.entity; public class Attribute { private String name; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/ClusterBrief.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ClusterBrief.java similarity index 91% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/ClusterBrief.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ClusterBrief.java index b5d20a6c4..2588590c0 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/ClusterBrief.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ClusterBrief.java @@ -16,8 +16,12 @@ * */ -package org.apache.skywalking.oap.query.graphql.type; +package org.apache.skywalking.oap.server.core.query.entity; +import lombok.*; + +@Getter +@Setter public class ClusterBrief { private int numOfService; private int numOfEndpoint; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java similarity index 93% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Endpoint.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java index 1b9ae82c4..d0b4b8e48 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Endpoint.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Endpoint.java @@ -16,7 +16,7 @@ * */ -package org.apache.skywalking.oap.query.graphql.type; +package org.apache.skywalking.oap.server.core.query.entity; public class Endpoint { private String id; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Language.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Language.java similarity index 93% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Language.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Language.java index bec5592a9..bd31a6791 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Language.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Language.java @@ -16,7 +16,7 @@ * */ -package org.apache.skywalking.oap.query.graphql.type; +package org.apache.skywalking.oap.server.core.query.entity; public enum Language { UNKNOWN, diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Service.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Service.java similarity index 90% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Service.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Service.java index fbc4d7bb1..a2b112472 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/Service.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/Service.java @@ -16,8 +16,12 @@ * */ -package org.apache.skywalking.oap.query.graphql.type; +package org.apache.skywalking.oap.server.core.query.entity; +import lombok.*; + +@Getter +@Setter public class Service { private String id; private String name; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/ServiceInstance.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ServiceInstance.java similarity index 84% rename from oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/ServiceInstance.java rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ServiceInstance.java index 725a1c628..5acedd221 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/type/ServiceInstance.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/entity/ServiceInstance.java @@ -16,13 +16,16 @@ * */ -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.*; +@Getter +@Setter public class ServiceInstance { private String id; private String name; - private List attributes; + private List attributes = new ArrayList<>(); private Language language; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java new file mode 100644 index 000000000..2101c90fb --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IMetadataQueryDAO.java @@ -0,0 +1,27 @@ +/* + * 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 org.apache.skywalking.oap.server.core.storage.DAO; + +/** + * @author peng-yongsheng + */ +public interface IMetadataQueryDAO extends DAO { +} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/type/StorageDataType.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/type/StorageDataType.java new file mode 100644 index 000000000..4545d9e0f --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/type/StorageDataType.java @@ -0,0 +1,29 @@ +/* + * 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.type; + +/** + * @author peng-yongsheng + */ +public interface StorageDataType { + + String toStorageData(); + + void toObject(String data); +} diff --git a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/Service.java b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/Service.java index 40612025c..ef5805aad 100644 --- a/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/Service.java +++ b/oap-server/server-library/library-module/src/main/java/org/apache/skywalking/oap/server/library/module/Service.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.oap.server.library.module; /** 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 b2e4bfccd..a08904125 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 @@ -55,7 +55,7 @@ public class GraphQLQueryProvider extends ModuleProvider { .file("query-protocol/common.graphqls") .resolvers(new Query(), new Mutation()) .file("query-protocol/metadata.graphqls") - .resolvers(new MetadataQuery()) + .resolvers(new MetadataQuery(getManager())) .file("query-protocol/metric.graphqls") .resolvers(new MetricQuery(getManager())) .file("query-protocol/topology.graphqls") 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 b448113d2..6f5e2f796 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 @@ -19,37 +19,65 @@ package org.apache.skywalking.oap.query.graphql.resolver; import com.coxautodev.graphql.tools.GraphQLQueryResolver; -import java.util.Collections; import java.util.List; -import org.apache.skywalking.oap.query.graphql.type.ClusterBrief; import org.apache.skywalking.oap.query.graphql.type.Duration; -import org.apache.skywalking.oap.query.graphql.type.Endpoint; -import org.apache.skywalking.oap.query.graphql.type.Service; -import org.apache.skywalking.oap.query.graphql.type.ServiceInstance; +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.library.module.ModuleManager; public class MetadataQuery implements GraphQLQueryResolver { + + private final ModuleManager moduleManager; + private MetadataQueryService metadataQueryService; + + public MetadataQuery(ModuleManager moduleManager) { + this.moduleManager = moduleManager; + } + + private MetadataQueryService getMetadataQueryService() { + if (metadataQueryService == null) { + this.metadataQueryService = moduleManager.find(CoreModule.NAME).getService(MetadataQueryService.class); + } + return metadataQueryService; + } + public ClusterBrief getGlobalBrief(final Duration duration) { - return new ClusterBrief(); + long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + + return getMetadataQueryService().getGlobalBrief(duration.getStep(), startTimeBucket, endTimeBucket); } public List getAllServices(final Duration duration) { - return Collections.emptyList(); + long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + + return getMetadataQueryService().getAllServices(duration.getStep(), startTimeBucket, endTimeBucket); } public List searchServices(final Duration duration, final String keyword) { - return Collections.emptyList(); + long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + + return getMetadataQueryService().searchServices(duration.getStep(), startTimeBucket, endTimeBucket, keyword); } public List getServiceInstances(final Duration duration, final String id) { - return Collections.emptyList(); + long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + + return getMetadataQueryService().getServiceInstances(duration.getStep(), startTimeBucket, endTimeBucket, id); } public List searchEndpoint(final String keyword, final String serviceId, final int limit) { - return Collections.emptyList(); + return getMetadataQueryService().searchEndpoint(keyword, serviceId, limit); } - public Service searchService(final Duration duration, final String serviceCode) { - return new Service(); + long startTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long endTimeBucket = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + + return getMetadataQueryService().searchService(duration.getStep(), startTimeBucket, endTimeBucket, serviceCode); } } diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/ColumnTypeEsMapping.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/ColumnTypeEsMapping.java index 0647eeae8..37c3db840 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/ColumnTypeEsMapping.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/ColumnTypeEsMapping.java @@ -18,7 +18,7 @@ package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base; -import java.util.List; +import org.apache.skywalking.oap.server.core.analysis.indicator.IntKeyLongValueArray; import org.apache.skywalking.oap.server.core.storage.model.DataTypeMapping; /** @@ -35,7 +35,7 @@ public class ColumnTypeEsMapping implements DataTypeMapping { return "double"; } else if (String.class.equals(type)) { return "keyword"; - } else if (List.class.equals(type)) { + } else if (IntKeyLongValueArray.class.equals(type)) { return "keyword"; } else { throw new IllegalArgumentException("Unsupported data type: " + type.getName()); diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/IndicatorEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/IndicatorEsDAO.java index 37b4d4791..8bfb6d46b 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/IndicatorEsDAO.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/IndicatorEsDAO.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.Map; import org.apache.skywalking.oap.server.core.analysis.indicator.Indicator; import org.apache.skywalking.oap.server.core.storage.*; +import org.apache.skywalking.oap.server.core.storage.type.StorageDataType; import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; @@ -54,7 +55,12 @@ public class IndicatorEsDAO extends EsDAO implements IIndicatorDAO axisYValues = new ArrayList<>(); + for (int i = 0; i < numOfSteps; i++) { + axisYValues.add(0L); + } + + for (IntKeyLongValue intKeyLongValue : intKeyLongValues) { + axisYValues.set(intKeyLongValue.getKey(), intKeyLongValue.getValue()); + } + thermodynamic.getNodes().add(axisYValues); } return thermodynamic;