You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/11/28 02:52:24 UTC

[iotdb] branch master updated: fix grafana value-time position bug (#2016)

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

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 875817b  fix grafana value-time position bug (#2016)
875817b is described below

commit 875817bf859c45fc4bfb0b7715cbb2906ed6c15f
Author: senhtry <w1...@gmail.com>
AuthorDate: Sat Nov 28 10:52:05 2020 +0800

    fix grafana value-time position bug (#2016)
---
 .../controller/DatabaseConnectController.java      |  4 +-
 .../iotdb/web/grafana/dao/impl/BasicDaoImpl.java   | 29 ++++++++----
 .../web/grafana/dao/impl/BasicDaoImplTest.java     | 55 ++++++++++++++++++++++
 3 files changed, 78 insertions(+), 10 deletions(-)

diff --git a/grafana/src/main/java/org/apache/iotdb/web/grafana/controller/DatabaseConnectController.java b/grafana/src/main/java/org/apache/iotdb/web/grafana/controller/DatabaseConnectController.java
index ac60149..67e50b1 100644
--- a/grafana/src/main/java/org/apache/iotdb/web/grafana/controller/DatabaseConnectController.java
+++ b/grafana/src/main/java/org/apache/iotdb/web/grafana/controller/DatabaseConnectController.java
@@ -165,7 +165,7 @@ public class DatabaseConnectController {
     for (TimeValues tv : timeValues) {
       JsonArray value = new JsonArray();
       value.add(tv.getTime());
-      values.add(GSON.toJsonTree(tv.getValue()));
+      value.add(GSON.toJsonTree(tv.getValue()));
       values.add(value);
     }
 
@@ -182,8 +182,8 @@ public class DatabaseConnectController {
       long time = tv.getTime();
       Object value = tv.getValue();
       JsonArray jsonArray = new JsonArray();
-      jsonArray.add(time);
       jsonArray.add(GSON.toJsonTree(value));
+      jsonArray.add(time);
       dataPoints.add(jsonArray);
     }
     obj.add("datapoints", dataPoints);
diff --git a/grafana/src/main/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImpl.java b/grafana/src/main/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImpl.java
index 1343628..2c2905b 100644
--- a/grafana/src/main/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImpl.java
+++ b/grafana/src/main/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImpl.java
@@ -133,31 +133,44 @@ public class BasicDaoImpl implements BasicDao {
   }
 
   public List<TimeValues> querySeriesInternal(String s, Pair<ZonedDateTime, ZonedDateTime> timeRange, String function) {
-      Long from = zonedCovertToLong(timeRange.left);
+    Long from = zonedCovertToLong(timeRange.left);
     Long to = zonedCovertToLong(timeRange.right);
     final long hours = Duration.between(timeRange.left, timeRange.right).toHours();
+
     String sql = String.format("SELECT %s FROM root.%s WHERE time > %d and time < %d",
         s.substring(s.lastIndexOf('.') + 1), s.substring(0, s.lastIndexOf('.')),
         from * timestampRadioX, to * timestampRadioX);
     String columnName = "root." + s;
-    if (isDownSampling && (hours > 1)) {
-      if (hours < 30 * 24 && hours > 24) {
-        interval = "1h";
-      } else if (hours > 30 * 24) {
-        interval = "1d";
-      }
+
+    String intervalLocal = getInterval(hours);
+    if (!intervalLocal.equals("")) {
       sql = String.format(
           "SELECT " + function
               + "(%s) FROM root.%s WHERE time > %d and time < %d group by ([%d, %d),%s)",
           s.substring(s.lastIndexOf('.') + 1), s.substring(0, s.lastIndexOf('.')),
           from * timestampRadioX, to * timestampRadioX,
-          from * timestampRadioX, to * timestampRadioX, interval);
+          from * timestampRadioX, to * timestampRadioX, intervalLocal);
       columnName = function + "(root." + s + ")";
     }
+
     logger.info(sql);
     return jdbcTemplate.query(sql, new TimeValuesRowMapper(columnName));
   }
 
+  public String getInterval(final long hours) {
+    if (!isDownSampling || !(hours > 1)) {
+      return "";
+    }
+
+    if (hours < 30 * 24 && hours > 24) {
+      return  "1h";
+    } else if (hours > 30 * 24) {
+      return "1d";
+    }
+
+    return this.interval;
+  }
+
   private Long zonedCovertToLong(ZonedDateTime time) {
     return time.toInstant().toEpochMilli();
   }
diff --git a/grafana/src/test/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImplTest.java b/grafana/src/test/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImplTest.java
new file mode 100644
index 0000000..3bdee19
--- /dev/null
+++ b/grafana/src/test/java/org/apache/iotdb/web/grafana/dao/impl/BasicDaoImplTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.iotdb.web.grafana.dao.impl;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.test.util.ReflectionTestUtils;
+
+public class BasicDaoImplTest {
+
+
+    @Before
+    public void setUp() throws Exception {
+    }
+
+    @After
+    public void tearDown() throws Exception {
+    }
+
+    @Test
+    public void getInterval() {
+        BasicDaoImpl impl = new BasicDaoImpl(null);
+        ReflectionTestUtils.setField(impl, "isDownSampling", true);
+        ReflectionTestUtils.setField(impl, "interval", "1m");
+
+        String interval1 = impl.getInterval(0);
+        assert interval1.equals("");
+
+        String interval2 = impl.getInterval(3);
+        assert interval2.equals("1m");
+
+        String interval3 = impl.getInterval(25);
+        assert interval3.equals("1h");
+
+        String interval4 = impl.getInterval(24 * 30 + 1);
+        assert interval4.equals("1d");
+    }
+}
\ No newline at end of file