You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2020/04/25 07:47:59 UTC

[skywalking] branch support-default-value created (now 448355b)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a change to branch support-default-value
in repository https://gitbox.apache.org/repos/asf/skywalking.git.


      at 448355b  Support default value in labeled-value and heatmap query.

This branch includes the following new commits:

     new 448355b  Support default value in labeled-value and heatmap query.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[skywalking] 01/01: Support default value in labeled-value and heatmap query.

Posted by wu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch support-default-value
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 448355ba8f805f7440bd1778e4da2b174bdfdd39
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Sat Apr 25 15:47:03 2020 +0800

    Support default value in labeled-value and heatmap query.
---
 .../oap/server/core/analysis/metrics/DataTable.java      |  4 ++++
 .../server/core/analysis/metrics/HistogramMetrics.java   |  2 +-
 .../skywalking/oap/server/core/query/type/HeatMap.java   | 16 ++++++++++------
 .../plugin/elasticsearch/query/MetricsQueryEsDAO.java    | 13 +++++++++----
 .../storage/plugin/influxdb/query/MetricsQuery.java      | 14 ++++++++++----
 .../storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java    | 16 ++++++++++++----
 6 files changed, 46 insertions(+), 19 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/DataTable.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/DataTable.java
index 8216f69..92c7eec 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/DataTable.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/DataTable.java
@@ -71,6 +71,10 @@ public class DataTable implements StorageDataComplexObject<DataTable> {
         return !data.isEmpty();
     }
 
+    public boolean hasKey(String key) {
+        return data.containsKey(key);
+    }
+
     public int size() {
         return data.size();
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/HistogramMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/HistogramMetrics.java
index 014ccaf..d6957bf 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/HistogramMetrics.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/HistogramMetrics.java
@@ -41,7 +41,7 @@ public abstract class HistogramMetrics extends Metrics {
 
     @Getter
     @Setter
-    @Column(columnName = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true)
+    @Column(columnName = DATASET, dataType = Column.ValueDataType.HISTOGRAM, storageOnly = true, defaultValue = 0)
     private DataTable dataset = new DataTable(30);
 
     /**
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/HeatMap.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/HeatMap.java
index 2ebff0a..a7331cd 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/HeatMap.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/HeatMap.java
@@ -45,7 +45,7 @@ public class HeatMap {
      * @param id      of the row
      * @param rawdata literal string, represent a {@link DataTable}
      */
-    public void buildColumn(String id, String rawdata) {
+    public void buildColumn(String id, String rawdata, int defaultValue) {
         DataTable dataset = new DataTable(rawdata);
 
         final List<String> sortedKeys = dataset.sortedKeys(
@@ -70,12 +70,16 @@ public class HeatMap {
         HeatMap.HeatMapColumn column = new HeatMap.HeatMapColumn();
         column.setId(id);
         sortedKeys.forEach(key -> {
-            column.addValue(dataset.get(key));
+            if (dataset.hasKey(key)) {
+                column.addValue(dataset.get(key));
+            } else {
+                column.addValue((long) defaultValue);
+            }
         });
         values.add(column);
     }
 
-    public void fixMissingColumns(List<String> ids) {
+    public void fixMissingColumns(List<String> ids, int defaultValue) {
         for (int i = 0; i < ids.size(); i++) {
             final String expectedId = ids.get(i);
             boolean found = false;
@@ -85,17 +89,17 @@ public class HeatMap {
                 }
             }
             if (!found) {
-                final HeatMapColumn emptyColumn = buildMissingColumn(expectedId);
+                final HeatMapColumn emptyColumn = buildMissingColumn(expectedId, defaultValue);
                 values.add(i, emptyColumn);
             }
         }
     }
 
-    private HeatMapColumn buildMissingColumn(String id) {
+    private HeatMapColumn buildMissingColumn(String id, int defaultValue) {
         HeatMapColumn column = new HeatMapColumn();
         column.setId(id);
         buckets.forEach(bucket -> {
-            column.addValue(0L);
+            column.addValue((long) defaultValue);
         });
         return column;
     }
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
index 278e19d..c49ca9a 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/MetricsQueryEsDAO.java
@@ -148,14 +148,18 @@ public class MetricsQueryEsDAO extends EsDAO implements IMetricsQueryDAO {
             labeledValues.put(label, labelValue);
         });
 
+        final int defaultValue = ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName());
         for (String id : ids) {
             if (idMap.containsKey(id)) {
                 Map<String, Object> source = idMap.get(id);
                 DataTable multipleValues = new DataTable((String) source.getOrDefault(valueColumnName, ""));
 
                 labels.forEach(label -> {
-                    final Long data = multipleValues.get(label);
                     final IntValues values = labeledValues.get(label).getValues();
+                    Long data = multipleValues.get(label);
+                    if (data == null) {
+                        data = (long) defaultValue;
+                    }
                     KVInt kv = new KVInt();
                     kv.setId(id);
                     kv.setValue(data);
@@ -168,7 +172,7 @@ public class MetricsQueryEsDAO extends EsDAO implements IMetricsQueryDAO {
         return Util.sortValues(
             new ArrayList<>(labeledValues.values()),
             ids,
-            ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName())
+            defaultValue
         );
     }
 
@@ -187,15 +191,16 @@ public class MetricsQueryEsDAO extends EsDAO implements IMetricsQueryDAO {
 
         HeatMap heatMap = new HeatMap();
 
+        final int defaultValue = ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName());
         for (String id : ids) {
             Map<String, Object> source = idMap.get(id);
             if (source != null) {
                 String value = (String) source.get(HistogramMetrics.DATASET);
-                heatMap.buildColumn(id, value);
+                heatMap.buildColumn(id, value, defaultValue);
             }
         }
 
-        heatMap.fixMissingColumns(ids);
+        heatMap.fixMissingColumns(ids, defaultValue);
 
         return heatMap;
     }
diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/MetricsQuery.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/MetricsQuery.java
index 60cde6a..b45749d 100644
--- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/MetricsQuery.java
+++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/MetricsQuery.java
@@ -183,6 +183,7 @@ public class MetricsQuery implements IMetricsQueryDAO {
             labeledValues.put(label, labelValue);
         });
 
+        final int defaultValue = ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName());
         if (!CollectionUtils.isEmpty(series)) {
             series.get(0).getValues().forEach(values -> {
                 final String id = (String) values.get(1);
@@ -190,7 +191,10 @@ public class MetricsQuery implements IMetricsQueryDAO {
                 multipleValues.toObject((String) values.get(2));
 
                 labels.forEach(label -> {
-                    final Long data = multipleValues.get(label);
+                    Long data = multipleValues.get(label);
+                    if (data == null) {
+                        data = (long) defaultValue;
+                    }
                     final IntValues intValues = labeledValues.get(label).getValues();
                     KVInt kv = new KVInt();
                     kv.setId(id);
@@ -203,7 +207,7 @@ public class MetricsQuery implements IMetricsQueryDAO {
         return Util.sortValues(
             new ArrayList<>(labeledValues.values()),
             ids,
-            ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName())
+            defaultValue
         );
     }
 
@@ -229,14 +233,16 @@ public class MetricsQuery implements IMetricsQueryDAO {
             log.debug("SQL: {} result set: {}", query.getCommand(), series);
         }
 
+        final int defaultValue = ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName());
+
         HeatMap heatMap = new HeatMap();
         if (series != null) {
             for (List<Object> values : series.getValues()) {
-                heatMap.buildColumn(values.get(1).toString(), values.get(2).toString());
+                heatMap.buildColumn(values.get(1).toString(), values.get(2).toString(), defaultValue);
             }
         }
 
-        heatMap.fixMissingColumns(ids);
+        heatMap.fixMissingColumns(ids, defaultValue);
 
         return heatMap;
     }
diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
index db5cbfd..84d0ca0 100644
--- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
+++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2MetricsQueryDAO.java
@@ -170,6 +170,8 @@ public class H2MetricsQueryDAO extends H2SQLExecutor implements IMetricsQueryDAO
             labeledValues.put(label, labelValue);
         });
 
+        final int defaultValue = ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName());
+
         try (Connection connection = h2Client.getConnection()) {
             try (ResultSet resultSet = h2Client.executeQuery(
                 connection, sql.toString(), parameters.toArray(new Object[0]))) {
@@ -180,7 +182,10 @@ public class H2MetricsQueryDAO extends H2SQLExecutor implements IMetricsQueryDAO
                     multipleValues.toObject(resultSet.getString(valueColumnName));
 
                     labels.forEach(label -> {
-                        final Long data = multipleValues.get(label);
+                        Long data = multipleValues.get(label);
+                        if (data == null) {
+                            data = (long) defaultValue;
+                        }
                         final IntValues values = labeledValues.get(label).getValues();
                         KVInt kv = new KVInt();
                         kv.setId(id);
@@ -196,7 +201,7 @@ public class H2MetricsQueryDAO extends H2SQLExecutor implements IMetricsQueryDAO
         return Util.sortValues(
             new ArrayList<>(labeledValues.values()),
             ids,
-            ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName())
+            defaultValue
         );
     }
 
@@ -223,17 +228,20 @@ public class H2MetricsQueryDAO extends H2SQLExecutor implements IMetricsQueryDAO
         }
         sql.append(")");
 
+        final int defaultValue = ValueColumnMetadata.INSTANCE.getDefaultValue(condition.getName());
+
         try (Connection connection = h2Client.getConnection()) {
             HeatMap heatMap = new HeatMap();
             try (ResultSet resultSet = h2Client.executeQuery(
                 connection, sql.toString(), parameters.toArray(new Object[0]))) {
 
                 while (resultSet.next()) {
-                    heatMap.buildColumn(resultSet.getString("id"), resultSet.getString("dataset"));
+                    heatMap.buildColumn(
+                        resultSet.getString("id"), resultSet.getString("dataset"), defaultValue);
                 }
             }
 
-            heatMap.fixMissingColumns(ids);
+            heatMap.fixMissingColumns(ids, defaultValue);
 
             return heatMap;
         } catch (SQLException e) {