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

[iotdb] branch monitor_tool created (now 39745a6)

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

geniuspig pushed a change to branch monitor_tool
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


      at 39745a6  add license

This branch includes the following new commits:

     new a86668a  add show configuration add client
     new 533dc0a  add \n
     new 39745a6  add license

The 3 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.



[iotdb] 03/03: add license

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

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

commit 39745a61bc9924d8831c35f0962b31fdccf26052
Author: Boris <96...@qq.com>
AuthorDate: Mon Dec 28 18:10:02 2020 +0800

    add license
---
 .../main/java/org/apache/iotdb/tool/MonitorTool.java   | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java b/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java
index 78152b7..692073f 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java
@@ -1,3 +1,21 @@
+/*
+ * 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.tool;
 
 import com.sun.management.OperatingSystemMXBean;


[iotdb] 01/03: add show configuration add client

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

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

commit a86668ad00ab3d01c008db12fdc5c670f9576643
Author: Boris <96...@qq.com>
AuthorDate: Mon Dec 28 18:07:02 2020 +0800

    add show configuration add client
---
 .../antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4   |   8 +
 .../java/org/apache/iotdb/tool/MonitorTool.java    | 162 +++++++++++++++++++++
 .../iotdb/cluster/query/ClusterPlanExecutor.java   |   3 +-
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |   1 +
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |   2 +
 .../apache/iotdb/db/qp/executor/IPlanExecutor.java |   4 +-
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  56 ++++++-
 .../db/qp/logical/sys/ShowConfigOperator.java      |  28 ++++
 .../iotdb/db/qp/physical/sys/ShowConfigPlan.java   |  27 ++++
 .../apache/iotdb/db/qp/physical/sys/ShowPlan.java  |   2 +-
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    |  13 ++
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |   5 +
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  10 +-
 .../iotdb/db/engine/storagegroup/TTLTest.java      |   3 +-
 .../iotdb/db/query/dataset/ListDataSetTest.java    |   8 +-
 .../iotdb/db/query/dataset/SingleDataSetTest.java  |  10 +-
 16 files changed, 326 insertions(+), 16 deletions(-)

diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
index 1f86f1e..50052fd 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlBase.g4
@@ -79,12 +79,14 @@ statement
     | SHOW CHILD PATHS prefixPath? #showChildPaths
     | SHOW DEVICES prefixPath? #showDevices
     | SHOW MERGE #showMergeStatus
+    | SHOW CONFIGURATION #showConf
     | TRACING ON #tracingOn
     | TRACING OFF #tracingOff
     | COUNT TIMESERIES prefixPath? (GROUP BY LEVEL OPERATOR_EQ INT)? #countTimeseries
     | COUNT DEVICES prefixPath? #countDevices
     | COUNT STORAGE GROUP prefixPath? #countStorageGroup
     | COUNT NODES prefixPath LEVEL OPERATOR_EQ INT #countNodes
+    | COUNT CLIENTS #countClients
     | LOAD CONFIGURATION (MINUS GLOBAL)? #loadConfigurationStatement
     | LOAD stringLiteral autoCreateSchema?#loadFiles
     | REMOVE stringLiteral #removeFile
@@ -507,6 +509,7 @@ nodeName
     | PARTITION
     | DESC
     | ASC
+    | CLIENTS
     ;
 
 nodeNameWithoutStar
@@ -619,6 +622,7 @@ nodeNameWithoutStar
     | PARTITION
     | DESC
     | ASC
+    | CLIENTS
     ;
 
 dataType
@@ -1197,6 +1201,10 @@ LIKE
 TOLERANCE
     : T O L E R A N C E
     ;
+
+CLIENTS
+    : C L I E N T S
+    ;
 //============================
 // End of the keywords list
 //============================
diff --git a/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java b/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java
new file mode 100644
index 0000000..71fd8ed
--- /dev/null
+++ b/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java
@@ -0,0 +1,162 @@
+package org.apache.iotdb.tool;
+
+import com.sun.management.OperatingSystemMXBean;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.management.ManagementFactory;
+import java.net.NetworkInterface;
+import java.nio.file.FileStore;
+import java.nio.file.FileSystems;
+import java.util.Enumeration;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.session.Session;
+import org.apache.iotdb.session.SessionDataSet;
+import org.apache.iotdb.tsfile.read.common.RowRecord;
+
+public class MonitorTool {
+
+  private static String url;
+
+  public static void main(String[] args) throws ParseException, IoTDBConnectionException {
+    int port = 6667;
+    String password = "root";
+    Options options = new Options();
+    Option opt_help = new Option("help", "help", false, "print help message");
+    opt_help.setRequired(false);
+    options.addOption(opt_help);
+
+    Option opt_port = new Option("p", "port", true, "port");
+    opt_port.setRequired(false);
+    options.addOption(opt_port);
+
+    Option opt_password = new Option("pw", "password", true, "password");
+    opt_password.setRequired(false);
+    options.addOption(opt_password);
+
+    HelpFormatter hf=new HelpFormatter();
+    hf.setWidth(110);
+
+    CommandLine commandLine;
+    CommandLineParser parser=new DefaultParser();
+
+    commandLine = parser.parse(options,args);
+
+    if(commandLine.hasOption("help")){
+      hf.printHelp("correctionTest",options,true);
+    } else {
+      if(commandLine.hasOption("p")) {
+        port = Integer.parseInt(commandLine.getOptionValue("p"));
+      }
+      if(commandLine.hasOption("pw")) {
+        password = commandLine.getOptionValue("pw");
+      }
+      Session session = new Session("127.0.0.1", port, "root", password);
+      session.open();
+
+      url = System.getProperty("IOTDB_HOME", null);
+
+      if(url == null) {
+        url = MonitorTool.class.getResource("/").toString();
+      }
+    }
+
+  }
+
+  public static void generateOsFile() throws IOException {
+
+    BufferedWriter writer = new BufferedWriter(new FileWriter(new File(url + "/os.txt")));
+    //operate system name
+    String osName = System.getProperty("os.name");
+    writer.write("operate system: " + osName + "\n");
+
+    //jvm memory size in mb
+    long freeMemory = Runtime.getRuntime().freeMemory() / (1024 * 1024);
+    long maxMemory = Runtime.getRuntime().maxMemory() / (1024 * 1024);
+    long totalMemory = Runtime.getRuntime().totalMemory() / (1024 * 1024);
+    long usedMemory = totalMemory - freeMemory;
+    writer.write("jvm max memory: " + maxMemory + "mb"+ "\n");
+    writer.write("jvm total memory: " + totalMemory + "mb" + "\n");
+    writer.write("jvm used memory: " + usedMemory + "mb" + "\n");
+    writer.write("jvm free memory: " + freeMemory + "mb" + "\n");
+
+    // underlying file stores size in mb
+    for (FileStore store : FileSystems.getDefault().getFileStores()) {
+      writer.write("file store name: " + store.name());
+      long total = store.getTotalSpace() / (1024 * 1024);
+      long used = (store.getTotalSpace() - store.getUnallocatedSpace()) / (1024 * 1024);
+      long avail = store.getUsableSpace() / (1024 * 1024);
+      writer.write("---- " + store.name() + "'s total space: " + total + "mb" + "\n");
+      writer.write("---- " + store.name() + "'s used space: " + used + "mb" + "\n");
+      writer.write("---- " + store.name() + "'s avail space: " + avail + "mb" + "\n");
+    }
+
+    //network interface name
+    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
+
+    writer.write("network interface name: " + "\n");
+    while (interfaces.hasMoreElements())
+    {
+      NetworkInterface networkInterface = interfaces.nextElement();
+      String interfacesName = networkInterface.getDisplayName();
+      writer.write("---- " + interfacesName + "\n");
+    }
+
+    //jdk version
+    String jdk = System.getProperty("java.version");
+    writer.write("jdk version: " + jdk + "\n");
+
+    //operate system memory size in mb
+    OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(
+        OperatingSystemMXBean.class);
+
+    long freeSystemMemory = osBean.getFreePhysicalMemorySize() / (1024 * 1024);
+    long totalSystemMemory = osBean.getTotalPhysicalMemorySize() / (1024 * 1024);
+    long usedSystemMemory = totalSystemMemory - freeSystemMemory / (1024 * 1024);
+
+    writer.write("free system memory: " + freeSystemMemory);
+    writer.write("total system memory: " + totalSystemMemory);
+    writer.write("used system memory: " + usedSystemMemory);
+
+    writer.write("Thread info: ");
+    for(Thread thread : Thread.getAllStackTraces().keySet()) {
+      writer.write("---- " + thread.getName());
+    }
+
+    writer.close();
+  }
+
+  public static void generateIoTDBRuntimeFile(int port, String password)
+      throws IoTDBConnectionException, StatementExecutionException, IOException {
+    BufferedWriter writer = new BufferedWriter(new FileWriter(new File(url + "/iotdb.txt")));
+    Session session = new Session("127.0.0.1", port, "root", password);
+    session.open();
+    SessionDataSet dataSet = session.executeQueryStatement("count timeseries root");
+    RowRecord record = dataSet.next();
+    writer.write("number of sensors: " + record.getFields().get(0).getLongV() + "\n");
+    dataSet = session.executeQueryStatement("count devices root");
+    record = dataSet.next();
+    writer.write("number of devices: " + record.getFields().get(0).getLongV() + "\n");
+    dataSet = session.executeQueryStatement("count storage group root");
+    record = dataSet.next();
+    writer.write("number of storage group: " + record.getFields().get(0).getLongV() + "\n");
+    dataSet = session.executeQueryStatement("count clients");
+    record = dataSet.next();
+    writer.write("number of clients: " + record.getFields().get(0).getLongV() + "\n");
+    dataSet = session.executeQueryStatement("show configuration");
+    while(dataSet.hasNext()) {
+      record = dataSet.next();
+      writer.write(record.getFields().get(0).getBinaryV().toString() + ": ");
+      writer.write(record.getFields().get(1).getBinaryV().toString());
+    }
+  }
+}
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
index 8b7116b..d6885e3 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterPlanExecutor.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.cluster.query;
 
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -93,7 +94,7 @@ public class ClusterPlanExecutor extends PlanExecutor {
   @Override
   public QueryDataSet processQuery(PhysicalPlan queryPlan, QueryContext context)
       throws IOException, StorageEngineException, QueryFilterOptimizationException, QueryProcessException,
-      MetadataException {
+      MetadataException, InvocationTargetException, IllegalAccessException {
     if (queryPlan instanceof QueryPlan) {
       logger.debug("Executing a query: {}", queryPlan);
       return processDataQuery((QueryPlan) queryPlan, context);
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
index e176dcf..9172a47 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
@@ -72,6 +72,7 @@ public class IoTDBConstant {
   public static final String COLUMN_COUNT = "count";
   public static final String COLUMN_TAGS = "tags";
   public static final String COLUMN_ATTRIBUTES = "attributes";
+  public static final String COLUMN_KEY = "key";
 
   public static final String COLUMN_ROLE = "role";
   public static final String COLUMN_USER = "user";
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
index f1003b8..9f3c2c8 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
@@ -157,6 +157,8 @@ public class SQLConstant {
 
   public static final int TOK_COUNT_DEVICES = 92;
   public static final int TOK_COUNT_STORAGE_GROUP = 93;
+  public static final int TOK_COUNT_CLIENT = 94;
+  public static final int TOK_CONFIG = 95;
 
   public static final Map<Integer, String> tokenSymbol = new HashMap<>();
   public static final Map<Integer, String> tokenNames = new HashMap<>();
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java
index 5febac6..85d9420 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java
@@ -18,7 +18,9 @@
  */
 package org.apache.iotdb.db.qp.executor;
 
+import java.beans.IntrospectionException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.sql.SQLException;
 import org.apache.iotdb.db.exception.BatchProcessException;
 import org.apache.iotdb.db.exception.StorageEngineException;
@@ -45,7 +47,7 @@ public interface IPlanExecutor {
    */
   QueryDataSet processQuery(PhysicalPlan queryPlan, QueryContext context)
       throws IOException, StorageEngineException,
-      QueryFilterOptimizationException, QueryProcessException, MetadataException, SQLException, TException, InterruptedException;
+      QueryFilterOptimizationException, QueryProcessException, MetadataException, SQLException, TException, InterruptedException, IllegalAccessException, IntrospectionException, InvocationTargetException;
 
   /**
    * Process Non-Query Physical plan, including insert/update/delete operation of
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index 68497de..9995b96 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -26,6 +26,7 @@ import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_CREATED_TIME;
 import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_DEVICES;
 import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_DONE;
 import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_ITEM;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_KEY;
 import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_PRIVILEGE;
 import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_PROGRESS;
 import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_ROLE;
@@ -38,6 +39,8 @@ import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.TSFILE_SUFF
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -56,6 +59,7 @@ import org.apache.iotdb.db.auth.authorizer.IAuthorizer;
 import org.apache.iotdb.db.auth.entity.PathPrivilege;
 import org.apache.iotdb.db.auth.entity.Role;
 import org.apache.iotdb.db.auth.entity.User;
+import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
@@ -128,6 +132,7 @@ import org.apache.iotdb.db.query.dataset.SingleDataSet;
 import org.apache.iotdb.db.query.executor.IQueryRouter;
 import org.apache.iotdb.db.query.executor.QueryRouter;
 import org.apache.iotdb.db.service.IoTDB;
+import org.apache.iotdb.db.service.TSServiceImpl;
 import org.apache.iotdb.db.utils.AuthUtils;
 import org.apache.iotdb.db.utils.FileLoaderUtils;
 import org.apache.iotdb.db.utils.UpgradeUtils;
@@ -156,7 +161,7 @@ public class PlanExecutor implements IPlanExecutor {
   // for data query
   protected IQueryRouter queryRouter;
   // for administration
-  private IAuthorizer authorizer;
+  private final IAuthorizer authorizer;
 
   private static final String INSERT_MEASUREMENTS_FAILED_MESSAGE = "failed to insert measurements ";
 
@@ -172,7 +177,7 @@ public class PlanExecutor implements IPlanExecutor {
   @Override
   public QueryDataSet processQuery(PhysicalPlan queryPlan, QueryContext context)
       throws IOException, StorageEngineException, QueryFilterOptimizationException,
-      QueryProcessException, MetadataException {
+      QueryProcessException, MetadataException, IllegalAccessException, InvocationTargetException {
     if (queryPlan instanceof QueryPlan) {
       return processDataQuery((QueryPlan) queryPlan, context);
     } else if (queryPlan instanceof AuthorPlan) {
@@ -394,7 +399,7 @@ public class PlanExecutor implements IPlanExecutor {
   }
 
   protected QueryDataSet processShowQuery(ShowPlan showPlan, QueryContext context)
-      throws QueryProcessException, MetadataException {
+      throws QueryProcessException, MetadataException, InvocationTargetException, IllegalAccessException {
     switch (showPlan.getShowContentType()) {
       case TTL:
         return processShowTTLQuery((ShowTTLPlan) showPlan);
@@ -408,6 +413,8 @@ public class PlanExecutor implements IPlanExecutor {
         return processShowStorageGroup((ShowStorageGroupPlan) showPlan);
       case DEVICES:
         return processShowDevices((ShowDevicesPlan) showPlan);
+      case CONFIG:
+        return processShowConfig();
       case CHILD_PATH:
         return processShowChildPaths((ShowChildPathsPlan) showPlan);
       case COUNT_TIMESERIES:
@@ -422,11 +429,54 @@ public class PlanExecutor implements IPlanExecutor {
         return processCountNodes((CountPlan) showPlan);
       case MERGE_STATUS:
         return processShowMergeStatus();
+      case COUNT_CLIENT:
+        return processCountClients();
       default:
         throw new QueryProcessException(String.format("Unrecognized show plan %s", showPlan));
     }
   }
 
+  private QueryDataSet processCountClients() {
+    return createSingleDataSet(COLUMN_COUNT, TSDataType.INT64,
+        TSServiceImpl.getSessionIdGenerator());
+  }
+
+  private QueryDataSet processShowConfig()
+      throws InvocationTargetException, IllegalAccessException {
+    ListDataSet listDataSet = new ListDataSet(
+        Arrays.asList(new PartialPath(COLUMN_KEY, false), new PartialPath(COLUMN_VALUE, false)),
+        Arrays.asList(TSDataType.TEXT, TSDataType.TEXT));
+    IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
+    Method[] methods = IoTDBConfig.class.getMethods();
+    for (Method method : methods) {
+      boolean needInvoke = false;
+      String methodName = method.getName();
+      if (methodName.startsWith("is")) {
+        methodName = methodName.replace("is", "").toLowerCase();
+        needInvoke = true;
+      } else if (methodName.startsWith("get")) {
+        methodName = methodName.replace("get", "").toLowerCase();
+        needInvoke = true;
+      }
+      if (needInvoke) {
+        RowRecord record = new RowRecord(0);
+        Field field = new Field(TSDataType.TEXT);
+        field.setBinaryV(new Binary(methodName));
+        record.addField(field);
+        Object value = method.invoke(config);
+        field = new Field(TSDataType.TEXT);
+        if(value != null) {
+          field.setBinaryV(new Binary(value.toString()));
+        } else {
+          field.setBinaryV(new Binary("null"));
+        }
+        record.addField(field);
+        listDataSet.putRecord(record);
+      }
+    }
+    return listDataSet;
+  }
+
   private QueryDataSet processCountNodes(CountPlan countPlan) throws MetadataException {
     int num = getNodesNumInGivenLevel(countPlan.getPath(), countPlan.getLevel());
     return createSingleDataSet(COLUMN_COUNT, TSDataType.INT32, num);
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowConfigOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowConfigOperator.java
new file mode 100644
index 0000000..fa600ca
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ShowConfigOperator.java
@@ -0,0 +1,28 @@
+/*
+ * 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.db.qp.logical.sys;
+
+public class ShowConfigOperator extends ShowOperator{
+
+  public ShowConfigOperator(int tokenIntType) {
+    super(tokenIntType);
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowConfigPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowConfigPlan.java
new file mode 100644
index 0000000..8947114
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowConfigPlan.java
@@ -0,0 +1,27 @@
+/*
+ * 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.db.qp.physical.sys;
+
+public class ShowConfigPlan extends ShowPlan{
+
+  public ShowConfigPlan(ShowContentType showContentType) {
+    super(showContentType);
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
index dabb949..d1198ea 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ShowPlan.java
@@ -51,7 +51,7 @@ public class ShowPlan extends PhysicalPlan {
 
   public enum ShowContentType {
     FLUSH_TASK_INFO, TTL, VERSION, TIMESERIES, STORAGE_GROUP, CHILD_PATH, DEVICES,
-    COUNT_TIMESERIES, COUNT_NODE_TIMESERIES, COUNT_NODES, MERGE_STATUS, COUNT_DEVICES, COUNT_STORAGE_GROUP
+    COUNT_TIMESERIES, COUNT_NODE_TIMESERIES, COUNT_NODES, MERGE_STATUS, COUNT_DEVICES, COUNT_STORAGE_GROUP, CONFIG, COUNT_CLIENT
   }
 
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index 980fa64..9730c61 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -78,6 +78,7 @@ import org.apache.iotdb.db.qp.logical.sys.RemoveFileOperator;
 import org.apache.iotdb.db.qp.logical.sys.SetStorageGroupOperator;
 import org.apache.iotdb.db.qp.logical.sys.SetTTLOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowChildPathsOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowConfigOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowDevicesOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowMergeStatusOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowOperator;
@@ -98,6 +99,7 @@ import org.apache.iotdb.db.qp.sql.SqlBaseParser.AttributeClauseContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.AttributeClausesContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.ClearcacheContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.ConstantContext;
+import org.apache.iotdb.db.qp.sql.SqlBaseParser.CountClientsContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.CountDevicesContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.CountNodesContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.CountStorageGroupContext;
@@ -183,6 +185,7 @@ import org.apache.iotdb.db.qp.sql.SqlBaseParser.SetStorageGroupContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.SetTTLStatementContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowAllTTLStatementContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowChildPathsContext;
+import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowConfContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowDevicesContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowFlushTaskInfoContext;
 import org.apache.iotdb.db.qp.sql.SqlBaseParser.ShowMergeStatusContext;
@@ -697,6 +700,16 @@ public class IoTDBSqlVisitor extends SqlBaseBaseVisitor<Operator> {
   }
 
   @Override
+  public Operator visitShowConf(ShowConfContext ctx) {
+    return new ShowConfigOperator(SQLConstant.TOK_CONFIG);
+  }
+
+  @Override
+  public Operator visitCountClients(CountClientsContext ctx) {
+    return new CountOperator(SQLConstant.TOK_COUNT_CLIENT, null);
+  }
+
+  @Override
   public Operator visitShowTimeseries(ShowTimeseriesContext ctx) {
     boolean orderByHeat = ctx.LATEST() != null;
     ShowTimeSeriesOperator showTimeSeriesOperator;
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index 5e71f72..31db477 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -101,6 +101,7 @@ import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan;
 import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowChildPathsPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowConfigPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowMergeStatusPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
@@ -269,6 +270,10 @@ public class PhysicalGenerator {
           case SQLConstant.TOK_CHILD_PATHS:
             return new ShowChildPathsPlan(
                 ShowContentType.CHILD_PATH, ((ShowChildPathsOperator) operator).getPath());
+          case SQLConstant.TOK_COUNT_CLIENT:
+            return new CountPlan(ShowContentType.COUNT_CLIENT, null);
+          case SQLConstant.TOK_CONFIG:
+            return new ShowConfigPlan(ShowContentType.CONFIG);
           default:
             throw new LogicalOperatorException(
                 String.format(
diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index 6e75bfb..abcad63 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -18,7 +18,9 @@
  */
 package org.apache.iotdb.db.service;
 
+import java.beans.IntrospectionException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.nio.ByteBuffer;
 import java.sql.SQLException;
 import java.time.ZoneId;
@@ -171,7 +173,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   private Map<Long, ZoneId> sessionIdZoneIdMap = new ConcurrentHashMap<>();
 
   // The sessionId is unique in one IoTDB instance.
-  private AtomicLong sessionIdGenerator = new AtomicLong();
+  private final static AtomicLong sessionIdGenerator = new AtomicLong();
   // The statementId is unique in one IoTDB instance.
   private AtomicLong statementIdGenerator = new AtomicLong();
 
@@ -1087,7 +1089,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
    */
   private QueryDataSet createQueryDataSet(long queryId, PhysicalPlan physicalPlan)
       throws QueryProcessException, QueryFilterOptimizationException, StorageEngineException,
-      IOException, MetadataException, SQLException, TException, InterruptedException {
+      IOException, MetadataException, SQLException, TException, InterruptedException, IllegalAccessException, IntrospectionException, InvocationTargetException {
 
     QueryContext context = genQueryContext(queryId);
     QueryDataSet queryDataSet = executor.processQuery(physicalPlan, context);
@@ -1829,4 +1831,8 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   public static int getDefaultFetchSize() {
     return DEFAULT_FETCH_SIZE;
   }
+
+  public static long getSessionIdGenerator() {
+    return sessionIdGenerator.get();
+  }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
index 45e6619..e751b10 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
@@ -27,6 +27,7 @@ import static org.junit.Assert.fail;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -355,7 +356,7 @@ public class TTLTest {
   @Test
   public void testShowTTL()
       throws IOException, QueryProcessException, QueryFilterOptimizationException,
-      StorageEngineException, MetadataException {
+      StorageEngineException, MetadataException, InvocationTargetException, IllegalAccessException {
     IoTDB.metaManager.setTTL(new PartialPath(sg1), ttl);
 
     ShowTTLPlan plan = new ShowTTLPlan(Collections.emptyList());
diff --git a/server/src/test/java/org/apache/iotdb/db/query/dataset/ListDataSetTest.java b/server/src/test/java/org/apache/iotdb/db/query/dataset/ListDataSetTest.java
index f03209b..ffb2b5c 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/dataset/ListDataSetTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/dataset/ListDataSetTest.java
@@ -18,7 +18,9 @@
  */
 package org.apache.iotdb.db.query.dataset;
 
+import java.beans.IntrospectionException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.sql.SQLException;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
@@ -69,7 +71,7 @@ public class ListDataSetTest {
 
   @Test
   public void showStorageGroups()
-      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException {
+      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException, IllegalAccessException, IntrospectionException, InvocationTargetException {
     String[] results = new String [] {"0\troot.test", "0\troot.vehicle"};
     PhysicalPlan plan = processor
         .parseSQLToPhysicalPlan(
@@ -88,7 +90,7 @@ public class ListDataSetTest {
 
   @Test
   public void showChildPaths()
-      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException {
+      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException, IllegalAccessException, IntrospectionException, InvocationTargetException {
     String[] results = new String [] {"0\troot.test.d0", "0\troot.test.d1"};
     PhysicalPlan plan = processor
         .parseSQLToPhysicalPlan(
@@ -107,7 +109,7 @@ public class ListDataSetTest {
 
   @Test
   public void showDevices()
-      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException {
+      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException, IllegalAccessException, IntrospectionException, InvocationTargetException {
     String[] results = new String [] {"0\troot.test.d0", "0\troot.test.d1", "0\troot.vehicle.d0"};
     PhysicalPlan plan = processor
         .parseSQLToPhysicalPlan(
diff --git a/server/src/test/java/org/apache/iotdb/db/query/dataset/SingleDataSetTest.java b/server/src/test/java/org/apache/iotdb/db/query/dataset/SingleDataSetTest.java
index f2cc8c8..b217a02 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/dataset/SingleDataSetTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/dataset/SingleDataSetTest.java
@@ -18,7 +18,9 @@
  */
 package org.apache.iotdb.db.query.dataset;
 
+import java.beans.IntrospectionException;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.sql.SQLException;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
@@ -68,7 +70,7 @@ public class SingleDataSetTest {
 
   @Test
   public void countDevice()
-      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException {
+      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException, IllegalAccessException, IntrospectionException, InvocationTargetException {
     PhysicalPlan plan = processor
         .parseSQLToPhysicalPlan(
             "count devices");
@@ -84,7 +86,7 @@ public class SingleDataSetTest {
 
   @Test
   public void countTimeSeries()
-      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException {
+      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException, IllegalAccessException, IntrospectionException, InvocationTargetException {
     PhysicalPlan plan = processor
         .parseSQLToPhysicalPlan(
             "count TimeSeries");
@@ -100,7 +102,7 @@ public class SingleDataSetTest {
 
   @Test
   public void countStorageGroup()
-      throws TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException, QueryProcessException {
+      throws TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException, QueryProcessException, IllegalAccessException, IntrospectionException, InvocationTargetException {
     PhysicalPlan plan = processor
         .parseSQLToPhysicalPlan(
             "count storage group");
@@ -116,7 +118,7 @@ public class SingleDataSetTest {
 
   @Test
   public void countNodes()
-      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException {
+      throws QueryProcessException, TException, StorageEngineException, QueryFilterOptimizationException, MetadataException, IOException, InterruptedException, SQLException, IllegalAccessException, IntrospectionException, InvocationTargetException {
     PhysicalPlan plan = processor
         .parseSQLToPhysicalPlan(
             "count nodes root.test level=2");


[iotdb] 02/03: add \n

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

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

commit 533dc0ab787baabd064288e7ffe4d99acb924114
Author: Boris <96...@qq.com>
AuthorDate: Mon Dec 28 18:07:53 2020 +0800

    add \n
---
 cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java b/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java
index 71fd8ed..78152b7 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/MonitorTool.java
@@ -156,7 +156,7 @@ public class MonitorTool {
     while(dataSet.hasNext()) {
       record = dataSet.next();
       writer.write(record.getFields().get(0).getBinaryV().toString() + ": ");
-      writer.write(record.getFields().get(1).getBinaryV().toString());
+      writer.write(record.getFields().get(1).getBinaryV().toString() + "\n");
     }
   }
 }