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