You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2019/12/03 12:24:03 UTC

[incubator-iotdb] 01/01: add timestamp precision properties

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

lta pushed a commit to branch add_grafana_time_precision
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 5ce657d510fd3a4dff4e51cd3252768c0ba93a15
Author: lta <li...@163.com>
AuthorDate: Tue Dec 3 20:23:40 2019 +0800

    add timestamp precision properties
---
 grafana/conf/application.properties                |  5 ++-
 .../iotdb/web/grafana/dao/impl/BasicDaoImpl.java   | 36 ++++++++++++++++++++--
 2 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/grafana/conf/application.properties b/grafana/conf/application.properties
index 2fb9f49..b2b982f 100644
--- a/grafana/conf/application.properties
+++ b/grafana/conf/application.properties
@@ -21,4 +21,7 @@ spring.datasource.url=jdbc:iotdb://127.0.0.1:6667/
 spring.datasource.username=root
 spring.datasource.password=root
 spring.datasource.driver-class-name=org.apache.iotdb.jdbc.IoTDBDriver
-server.port=8888
\ No newline at end of file
+server.port=8888
+# Use this value to set timestamp precision as "ms", "us" or "ns", which must to be same with the timestamp
+# precision of Apache IoTDB engine.
+timestamp_precision=ms
\ No newline at end of file
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 6bf195c..fe0e12a 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
@@ -18,6 +18,10 @@
  */
 package org.apache.iotdb.web.grafana.dao.impl;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
@@ -25,6 +29,7 @@ import java.sql.SQLException;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
 import org.apache.iotdb.jdbc.Constant;
 import org.apache.iotdb.tsfile.utils.Pair;
 import org.apache.iotdb.web.grafana.bean.TimeValues;
@@ -45,11 +50,34 @@ public class BasicDaoImpl implements BasicDao {
 
   private static final Logger logger = LoggerFactory.getLogger(BasicDaoImpl.class);
 
+  private static final String CONFIG_PROPERTY_FILE = "application.properties";
+
   private final JdbcTemplate jdbcTemplate;
 
+  private static long TIMESTAMP_RADIX = 1L;
+
   @Autowired
   public BasicDaoImpl(JdbcTemplate jdbcTemplate) {
     this.jdbcTemplate = jdbcTemplate;
+    try (InputStream inputStream = new FileInputStream(new File(CONFIG_PROPERTY_FILE))) {
+      Properties properties = new Properties();
+      properties.load(inputStream);
+      String tsPrecision = properties.getProperty("timestamp_precision", "ms");
+      switch (tsPrecision) {
+        case "us":
+          TIMESTAMP_RADIX = 1000;
+          break;
+        case "ns":
+          TIMESTAMP_RADIX = 1000_000;
+          break;
+        default:
+          TIMESTAMP_RADIX = 1;
+      }
+      logger.info("Use timestamp precision {}", tsPrecision);
+    } catch (IOException e) {
+      logger.error("Can not find properties [timestamp_precision], use default value [ms]");
+      TIMESTAMP_RADIX = 1;
+    }
   }
 
   @Override
@@ -57,7 +85,8 @@ public class BasicDaoImpl implements BasicDao {
     ConnectionCallback<Object> connectionCallback = new ConnectionCallback<Object>() {
       public Object doInConnection(Connection connection) throws SQLException {
         DatabaseMetaData databaseMetaData = connection.getMetaData();
-        ResultSet resultSet = databaseMetaData.getColumns(Constant.CATALOG_TIMESERIES, "root.*", "root.*", null);
+        ResultSet resultSet = databaseMetaData
+            .getColumns(Constant.CATALOG_TIMESERIES, "root.*", "root.*", null);
         logger.info("Start to get timeseries");
         List<String> columnsName = new ArrayList<>();
         while (resultSet.next()) {
@@ -75,7 +104,8 @@ public class BasicDaoImpl implements BasicDao {
     Long from = zonedCovertToLong(timeRange.left);
     Long to = zonedCovertToLong(timeRange.right);
     String sql = "SELECT " + s.substring(s.lastIndexOf('.') + 1) + " FROM root."
-        + s.substring(0, s.lastIndexOf('.')) + " WHERE time > " + from + " and time < " + to;
+        + s.substring(0, s.lastIndexOf('.')) + " WHERE time > " + from * TIMESTAMP_RADIX
+        + " and time < " + to * TIMESTAMP_RADIX;
     logger.info(sql);
     List<TimeValues> rows = null;
     try {
@@ -103,7 +133,7 @@ public class BasicDaoImpl implements BasicDao {
     @Override
     public TimeValues mapRow(ResultSet resultSet, int i) throws SQLException {
       TimeValues tv = new TimeValues();
-      tv.setTime(resultSet.getLong("Time"));
+      tv.setTime(resultSet.getLong("Time") / TIMESTAMP_RADIX);
       String valueString = resultSet.getString(columnName);
       if (valueString != null) {
         if (TRUE_STR.equalsIgnoreCase(valueString)) {