From 9e208d048447bc1d41afcd136d518dd83963f6b0 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: Wed, 10 Oct 2018 13:05:40 +0800 Subject: [PATCH] Fixed the bug of the getValues method in metric query. (#1739) --- .../elasticsearch/query/MetricQueryEsDAO.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricQueryEsDAO.java index ba9d192c7..de5048608 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricQueryEsDAO.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricQueryEsDAO.java @@ -31,6 +31,8 @@ import org.elasticsearch.action.get.*; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.*; +import org.elasticsearch.search.aggregations.metrics.avg.Avg; +import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.elasticsearch.search.builder.SearchSourceBuilder; /** @@ -59,13 +61,22 @@ public class MetricQueryEsDAO extends EsDAO implements IMetricQueryDAO { IntValues intValues = new IntValues(); Terms idTerms = response.getAggregations().get(Indicator.ENTITY_ID); for (Terms.Bucket idBucket : idTerms.getBuckets()) { - Terms valueTerms = idBucket.getAggregations().get(valueCName); - for (Terms.Bucket valueBucket : valueTerms.getBuckets()) { - KVInt value = new KVInt(); - value.setId(idBucket.getKeyAsString()); - value.setValue(valueBucket.getKeyAsNumber().intValue()); - intValues.getValues().add(value); + int value = 0; + switch (function) { + case Sum: + Sum sum = idBucket.getAggregations().get(valueCName); + value = (int)sum.getValue(); + break; + case Avg: + Avg avg = idBucket.getAggregations().get(valueCName); + value = (int)avg.getValue(); + break; } + + KVInt kvInt = new KVInt(); + kvInt.setId(idBucket.getKeyAsString()); + kvInt.setValue(value); + intValues.getValues().add(kvInt); } return intValues; }