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 <[email protected]>
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) {

Reply via email to