You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by li...@apache.org on 2019/11/20 11:59:55 UTC

[incubator-iotdb] branch monitor created (now 5bf9d12)

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

liurui pushed a change to branch monitor
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at 5bf9d12  feat(statMonitor): add back statMonitor metrics

This branch includes the following new commits:

     new fe2a040  refactor(IStatistic): remove unused interface
     new 5bf9d12  feat(statMonitor): add back statMonitor metrics

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



[incubator-iotdb] 02/02: feat(statMonitor): add back statMonitor metrics

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

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

commit 5bf9d125d55b9029f7c46c741733b2e58d13b686
Author: liuruiyiyang <24...@qq.com>
AuthorDate: Wed Nov 20 19:59:32 2019 +0800

    feat(statMonitor): add back statMonitor metrics
---
 .../org/apache/iotdb/db/engine/StorageEngine.java  |  73 ++++++--
 .../org/apache/iotdb/db/metadata/MManager.java     |   2 +-
 .../org/apache/iotdb/db/monitor/IStatistic.java    |  11 +-
 .../apache/iotdb/db/monitor/MonitorConstants.java  |  74 ++++----
 .../org/apache/iotdb/db/monitor/StatMonitor.java   | 201 ++++++---------------
 .../iotdb/db/monitor/collector/FileSize.java       |  51 ++----
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  78 +++++++-
 .../iotdb/db/monitor/collector/FileSizeTest.java   |   8 +-
 8 files changed, 262 insertions(+), 236 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
index 4a8eeb1..62074bd 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
@@ -23,6 +23,8 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.ConcurrentModificationException;
+import java.util.EnumMap;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -38,6 +40,7 @@ import java.util.concurrent.atomic.AtomicLong;
 import org.apache.commons.io.FileUtils;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 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.fileSystem.SystemFileFactory;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
@@ -54,6 +57,8 @@ import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.metadata.MNode;
 import org.apache.iotdb.db.monitor.IStatistic;
 import org.apache.iotdb.db.monitor.MonitorConstants;
+import org.apache.iotdb.db.monitor.MonitorConstants.StorageEngineMetrics;
+import org.apache.iotdb.db.monitor.StatMonitor;
 import org.apache.iotdb.db.qp.physical.crud.BatchInsertPlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
@@ -62,6 +67,7 @@ import org.apache.iotdb.db.service.IService;
 import org.apache.iotdb.db.service.ServiceType;
 import org.apache.iotdb.db.utils.FilePathUtils;
 import org.apache.iotdb.db.utils.UpgradeUtils;
+import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -80,12 +86,11 @@ public class StorageEngine implements IService, IStatistic {
   /**
    * the monitored metric's time series path prefix of this class
    */
-  private static final String MONITOR_METRIC_PREFIX = MonitorConstants.STAT_STORAGE_DELTA_NAME;
+  private static final String MONITOR_METRIC_PREFIX = MonitorConstants.STORAGE_ENGINE_METRIC_PREFIX;
+
+  private static AtomicLong okPoint = new AtomicLong(0);
+  private static AtomicLong failPoint = new AtomicLong(0);
 
-  /**
-   *
-   */
-  private static AtomicLong insertPoint = new AtomicLong(0);
 
   /**
    * a folder (system/storage_groups/ by default) that persist system info. Each Storage Processor
@@ -145,6 +150,12 @@ public class StorageEngine implements IService, IStatistic {
         throw new StorageEngineFailureException("StorageEngine failed to recover.", e);
       }
     }
+
+    if (config.isEnableStatMonitor()) {
+      StatMonitor statMonitor = StatMonitor.getInstance();
+      registerStatMetadata();
+      statMonitor.registerStatistics(MONITOR_METRIC_PREFIX, this);
+    }
   }
 
   @Override
@@ -233,13 +244,15 @@ public class StorageEngine implements IService, IStatistic {
     } catch (StorageEngineException e) {
       logger.warn("get StorageGroupProcessor of device {} failed, because {}",
           insertPlan.getDeviceId(), e.getMessage(), e);
+      failPoint.addAndGet(insertPlan.getMeasurements().length);
       throw new StorageEngineException(e);
     }
 
-    // TODO monitor: update statistics
     try {
       storageGroupProcessor.insert(insertPlan);
+      okPoint.addAndGet(insertPlan.getMeasurements().length);
     } catch (QueryProcessException e) {
+      failPoint.addAndGet(insertPlan.getMeasurements().length);
       throw new QueryProcessException(e);
     }
   }
@@ -251,19 +264,24 @@ public class StorageEngine implements IService, IStatistic {
    */
   public Integer[] insertBatch(BatchInsertPlan batchInsertPlan) throws StorageEngineException {
     StorageGroupProcessor storageGroupProcessor;
+    long pointsNumber =
+        (long) batchInsertPlan.getMeasurements().length * batchInsertPlan.getTimes().length;
     try {
       storageGroupProcessor = getProcessor(batchInsertPlan.getDeviceId());
     } catch (StorageEngineException e) {
       logger.warn("get StorageGroupProcessor of device {} failed, because {}",
           batchInsertPlan.getDeviceId(),
           e.getMessage(), e);
+      failPoint.addAndGet(pointsNumber);
       throw new StorageEngineException(e);
     }
 
-    // TODO monitor: update statistics
     try {
-      return storageGroupProcessor.insertBatch(batchInsertPlan);
+      Integer[] result = storageGroupProcessor.insertBatch(batchInsertPlan);
+      okPoint.addAndGet(pointsNumber);
+      return result;
     } catch (QueryProcessException e) {
+      failPoint.addAndGet(pointsNumber);
       throw new StorageEngineException(e);
     }
   }
@@ -453,16 +471,47 @@ public class StorageEngine implements IService, IStatistic {
 
   @Override
   public Map<String, TSRecord> getAllStatisticsValue() {
-    return null;
+    long curTime = System.currentTimeMillis();
+    TSRecord tsRecord = StatMonitor
+        .convertToTSRecord(getStatParamsHashMap(), MONITOR_METRIC_PREFIX,
+            curTime);
+    HashMap<String, TSRecord> ret = new HashMap<>();
+    ret.put(MONITOR_METRIC_PREFIX, tsRecord);
+    return ret;
   }
 
   @Override
   public void registerStatMetadata() {
-
+    Map<String, String> hashMap = new HashMap<>();
+    for (StorageEngineMetrics kind : StorageEngineMetrics.values()) {
+      String seriesPath = MONITOR_METRIC_PREFIX
+          + IoTDBConstant.PATH_SEPARATOR
+          + kind.name();
+      hashMap.put(seriesPath, MonitorConstants.DATA_TYPE_INT64);
+      Path path = new Path(seriesPath);
+      try {
+        addTimeSeries(path, TSDataType.valueOf(MonitorConstants.DATA_TYPE_INT64),
+            TSEncoding.valueOf("RLE"), CompressionType.valueOf(
+                TSFileDescriptor.getInstance().getConfig().getCompressor()),
+            Collections.emptyMap());
+      } catch (StorageEngineException e) {
+        logger.error("Register {} into Monitor Failed.", this.getClass().getName(), e);
+      }
+    }
+    StatMonitor.getInstance().registerStatStorageGroup(hashMap);
   }
 
   @Override
-  public Map<String, AtomicLong> getStatParamsHashMap() {
-    return null;
+  public Map<String, Object> getStatParamsHashMap() {
+    Map<StorageEngineMetrics, Long> fileSizeMap = new EnumMap<>(StorageEngineMetrics.class);
+    fileSizeMap.put(StorageEngineMetrics.OK_POINTS, okPoint.get());
+    fileSizeMap.put(StorageEngineMetrics.FAIL_POINTS, failPoint.get());
+    okPoint.set(0);
+    failPoint.set(0);
+    Map<String, Object> statParamsMap = new HashMap<>();
+    for (StorageEngineMetrics kind : MonitorConstants.StorageEngineMetrics.values()) {
+      statParamsMap.put(kind.name(), new AtomicLong(fileSizeMap.get(kind)));
+    }
+    return statParamsMap;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index cc9922a..e7154ad 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -466,7 +466,7 @@ public class MManager {
           throw new MetadataException(e);
         }
 
-        if (MonitorConstants.STAT_STORAGE_GROUP_PREFIX.equals(storageGroupName)) {
+        if (MonitorConstants.MONITOR_STORAGE_GROUP.equals(storageGroupName)) {
           continue;
         }
         newSubPaths.add(eachSubPath);
diff --git a/server/src/main/java/org/apache/iotdb/db/monitor/IStatistic.java b/server/src/main/java/org/apache/iotdb/db/monitor/IStatistic.java
index af0d736..5d87030 100644
--- a/server/src/main/java/org/apache/iotdb/db/monitor/IStatistic.java
+++ b/server/src/main/java/org/apache/iotdb/db/monitor/IStatistic.java
@@ -19,18 +19,16 @@
 
 package org.apache.iotdb.db.monitor;
 
-import java.util.List;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicLong;
-
 import org.apache.iotdb.tsfile.write.record.TSRecord;
 
 public interface IStatistic {
 
   /**
    * Get A HashMap that contains the module seriesPaths and their statistics measurement.
-   * @return A HashMap that contains the module seriesPath like: root.stats.write.global,
-   *        and its value is TSRecord format contains all statistics measurement
+   *
+   * @return A HashMap that contains the module seriesPath like: root.stats.write.global, and its
+   * value is TSRecord format contains all statistics measurement
    */
   Map<String, TSRecord> getAllStatisticsValue();
 
@@ -41,7 +39,8 @@ public interface IStatistic {
 
   /**
    * Get a HashMap contains the names and values of the statistics parameters.
+   *
    * @return a HashMap contains the names and values of the statistics parameters
    */
-  Map<String, AtomicLong> getStatParamsHashMap();
+  Map<String, Object> getStatParamsHashMap();
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/monitor/MonitorConstants.java b/server/src/main/java/org/apache/iotdb/db/monitor/MonitorConstants.java
index 490743c..ab1cb5f 100644
--- a/server/src/main/java/org/apache/iotdb/db/monitor/MonitorConstants.java
+++ b/server/src/main/java/org/apache/iotdb/db/monitor/MonitorConstants.java
@@ -23,30 +23,32 @@ import java.io.File;
 import java.util.HashMap;
 import java.util.concurrent.atomic.AtomicLong;
 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.monitor.collector.FileSize;
 
 public class MonitorConstants {
 
   private static IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
   public static final String DATA_TYPE_INT64 = "INT64";
-  public static final String STAT_STORAGE_GROUP_PREFIX = "root.stats";
-  static final String FILENODE_PROCESSOR_CONST = "FILENODE_PROCESSOR_CONST";
-  private static final String FILENODE_MANAGER_CONST = "FILENODE_MANAGER_CONST";
-  static final String FILE_SIZE_CONST = "FILE_SIZE_CONST";
-  public static final String MONITOR_PATH_SEPARATOR = ".";
-  // statistic for file size statistic module
-  private static final String FILE_SIZE = "file_size";
-  public static final String FILE_SIZE_STORAGE_GROUP_NAME = STAT_STORAGE_GROUP_PREFIX
-      + MONITOR_PATH_SEPARATOR + FILE_SIZE;
-  // statistic for insert module
-  static final String FILE_NODE_MANAGER_PATH = "write.global";
-  public static final String FILE_NODE_PATH = "write";
+  public static final String MONITOR_STORAGE_GROUP = "root.monitor";
+
+  /**
+   * statistic for file size statistic module
+   */
+  public static final String FILE_SIZE_METRIC_PREFIX = MONITOR_STORAGE_GROUP
+      + IoTDBConstant.PATH_SEPARATOR + "fileSize";
+
+  /**
+   * insert point count monitor metrics prefix
+   */
+  public static final String STORAGE_ENGINE_METRIC_PREFIX = MONITOR_STORAGE_GROUP
+      + IoTDBConstant.PATH_SEPARATOR + "write.global";
+
   /**
-   * Stat information.
+   * request count monitor metrics prefix
    */
-  public static final String STAT_STORAGE_DELTA_NAME = STAT_STORAGE_GROUP_PREFIX
-      + MONITOR_PATH_SEPARATOR + FILE_NODE_MANAGER_PATH;
+  public static final String REQUEST_METRIC_PREFIX = MONITOR_STORAGE_GROUP
+      + IoTDBConstant.PATH_SEPARATOR + "request";
 
   /**
    * function for initializing stats values.
@@ -54,45 +56,44 @@ public class MonitorConstants {
    * @param constantsType produce initialization values for Statistics Params
    * @return HashMap contains all the Statistics Params
    */
-  static HashMap<String, AtomicLong> initValues(String constantsType) {
-    HashMap<String, AtomicLong> hashMap = new HashMap<>();
+  static HashMap<String, Object> initValues(String constantsType) {
+    HashMap<String, Object> hashMap = new HashMap<>();
     switch (constantsType) {
-      case FILENODE_PROCESSOR_CONST:
-        for (FileNodeProcessorStatConstants statConstant : FileNodeProcessorStatConstants
-            .values()) {
-          hashMap.put(statConstant.name(), new AtomicLong(0));
+      case MonitorConstants.STORAGE_ENGINE_METRIC_PREFIX:
+        for (StorageEngineMetrics metrics : StorageEngineMetrics.values()) {
+          hashMap.put(metrics.name(), new AtomicLong(0));
         }
         break;
-      case FILENODE_MANAGER_CONST:
-        hashMap = (HashMap<String, AtomicLong>) FileSize.getInstance().getStatParamsHashMap();
+      case MonitorConstants.FILE_SIZE_METRIC_PREFIX:
+        for (FileSizeMetrics kinds : FileSizeMetrics.values()) {
+          hashMap.put(kinds.name(), new AtomicLong(0));
+        }
         break;
-      case FILE_SIZE_CONST:
-        for (FileSizeConstants kinds : FileSizeConstants.values()) {
+      case MonitorConstants.REQUEST_METRIC_PREFIX:
+        for (TSServiceImplMetrics kinds : TSServiceImplMetrics.values()) {
           hashMap.put(kinds.name(), new AtomicLong(0));
         }
         break;
       default:
-
-        break;
     }
     return hashMap;
   }
 
-  public enum FileNodeManagerStatConstants {
-    TOTAL_POINTS, TOTAL_REQ_SUCCESS, TOTAL_REQ_FAIL, TOTAL_POINTS_SUCCESS, TOTAL_POINTS_FAIL
+  public enum StorageEngineMetrics {
+    OK_POINTS, FAIL_POINTS
   }
 
-  public enum FileNodeProcessorStatConstants {
-    TOTAL_REQ_SUCCESS, TOTAL_REQ_FAIL, TOTAL_POINTS_SUCCESS, TOTAL_POINTS_FAIL
+  public enum TSServiceImplMetrics {
+    TOTAL_REQ
   }
 
-  public enum OsStatConstants {
+  public enum OsMetrics {
     NETWORK_REC, NETWORK_SEND, CPU_USAGE, MEM_USAGE, IOTDB_MEM_SIZE, DISK_USAGE, DISK_READ_SPEED,
     DISK_WRITE_SPEED, DISK_TPS
   }
 
-  public enum FileSizeConstants {
-    // TODO add multi data dir monitor
+  public enum FileSizeMetrics {
+    // need add multi data dir monitor
     WAL(new File(config.getWalFolder()).getAbsolutePath()),
     SYS(new File(config.getSystemDir()).getAbsolutePath());
 
@@ -102,8 +103,9 @@ public class MonitorConstants {
 
     private String path;
 
-    FileSizeConstants(String path) {
+    FileSizeMetrics(String path) {
       this.path = path;
     }
   }
+
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/monitor/StatMonitor.java b/server/src/main/java/org/apache/iotdb/db/monitor/StatMonitor.java
index 0ed54c6..c1a6993 100644
--- a/server/src/main/java/org/apache/iotdb/db/monitor/StatMonitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/monitor/StatMonitor.java
@@ -31,15 +31,15 @@ import org.apache.iotdb.db.concurrent.ThreadName;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.StartupException;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.path.PathException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.db.monitor.MonitorConstants.FileNodeManagerStatConstants;
-import org.apache.iotdb.db.monitor.MonitorConstants.FileNodeProcessorStatConstants;
-import org.apache.iotdb.db.monitor.collector.FileSize;
+import org.apache.iotdb.db.monitor.MonitorConstants.FileSizeMetrics;
+import org.apache.iotdb.db.monitor.MonitorConstants.StorageEngineMetrics;
+import org.apache.iotdb.db.monitor.MonitorConstants.TSServiceImplMetrics;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.service.IService;
 import org.apache.iotdb.db.service.ServiceType;
@@ -68,14 +68,6 @@ public class StatMonitor implements IService {
   private final HashMap<String, IStatistic> statisticMap;
   private ScheduledExecutorService service;
 
-  /**
-   * stats params.
-   */
-  private AtomicLong numBackLoop = new AtomicLong(0);
-  private AtomicLong numInsert = new AtomicLong(0);
-  private AtomicLong numPointsInsert = new AtomicLong(0);
-  private AtomicLong numInsertError = new AtomicLong(0);
-
   private StatMonitor() {
     initTemporaryStatList();
     MManager mmanager = MManager.getInstance();
@@ -86,7 +78,7 @@ public class StatMonitor implements IService {
     backLoopPeriod = config.getBackLoopPeriodSec();
     if (config.isEnableStatMonitor()) {
       try {
-        String prefix = MonitorConstants.STAT_STORAGE_GROUP_PREFIX;
+        String prefix = MonitorConstants.MONITOR_STORAGE_GROUP;
         if (!mmanager.pathExist(prefix)) {
           mmanager.setStorageGroupToMTree(prefix);
         }
@@ -97,11 +89,14 @@ public class StatMonitor implements IService {
   }
 
   private void initTemporaryStatList() {
-    for (FileNodeManagerStatConstants constants : FileNodeManagerStatConstants.values()) {
-      temporaryStatList.add(constants.name());
+    for (StorageEngineMetrics metrics : StorageEngineMetrics.values()) {
+      temporaryStatList.add(metrics.name());
+    }
+    for (TSServiceImplMetrics metrics : TSServiceImplMetrics.values()) {
+      temporaryStatList.add(metrics.name());
     }
-    for (FileNodeProcessorStatConstants constants : FileNodeProcessorStatConstants.values()) {
-      temporaryStatList.add(constants.name());
+    for (FileSizeMetrics metrics : FileSizeMetrics.values()) {
+      temporaryStatList.add(metrics.name());
     }
   }
 
@@ -112,44 +107,22 @@ public class StatMonitor implements IService {
   /**
    * generate TSRecord.
    *
-   * @param hashMap key is statParams name, values is AtomicLong type
+   * @param hashMap key is the stat name, values is the stat value object
    * @param statGroupDeltaName is the deviceId seriesPath of this module
    * @param curTime current time stamp
    * @return TSRecord contains the DataPoints of a statGroupDeltaName
    */
-  public static TSRecord convertToTSRecord(Map<String, AtomicLong> hashMap,
+  public static TSRecord convertToTSRecord(Map<String, Object> hashMap,
       String statGroupDeltaName, long curTime) {
     TSRecord tsRecord = new TSRecord(curTime, statGroupDeltaName);
     tsRecord.dataPointList = new ArrayList<>();
-    for (Map.Entry<String, AtomicLong> entry : hashMap.entrySet()) {
-      AtomicLong value = entry.getValue();
-      tsRecord.dataPointList.add(new LongDataPoint(entry.getKey(), value.get()));
-    }
-    return tsRecord;
-  }
-
-  public long getNumPointsInsert() {
-    return numPointsInsert.get();
-  }
-
-  public long getNumInsert() {
-    return numInsert.get();
-  }
-
-  public long getNumInsertError() {
-    return numInsertError.get();
-  }
-
-  void registerStatStorageGroup() {
-    MManager mManager = MManager.getInstance();
-    String prefix = MonitorConstants.STAT_STORAGE_GROUP_PREFIX;
-    try {
-      if (!mManager.pathExist(prefix)) {
-        mManager.setStorageGroupToMTree(prefix);
+    for (Map.Entry<String, Object> entry : hashMap.entrySet()) {
+      if(entry.getValue() instanceof AtomicLong){
+        AtomicLong value = (AtomicLong) entry.getValue();
+        tsRecord.dataPointList.add(new LongDataPoint(entry.getKey(), value.get()));
       }
-    } catch (Exception e) {
-      logger.error("MManager cannot set storage group to MTree.", e);
     }
+    return tsRecord;
   }
 
   /**
@@ -181,21 +154,13 @@ public class StatMonitor implements IService {
     // // restore the FildeNode Manager TOTAL_POINTS statistics info
   }
 
-  void activate() {
+  private void activate() {
     service = IoTDBThreadPoolFactory.newScheduledThreadPool(1,
         ThreadName.STAT_MONITOR.getName());
     service.scheduleAtFixedRate(
         new StatBackLoop(), 1, backLoopPeriod, TimeUnit.SECONDS);
   }
 
-  void clearIStatisticMap() {
-    statisticMap.clear();
-  }
-
-  public long getNumBackLoop() {
-    return numBackLoop.get();
-  }
-
   /**
    * register class which implemented IStatistic interface into statisticMap
    *
@@ -210,83 +175,6 @@ public class StatMonitor implements IService {
   }
 
   /**
-   * deregister statistics.
-   */
-  public void deregisterStatistics(String path) {
-    logger.debug("Deregister {} in StatMonitor for stopping statistics service", path);
-    synchronized (statisticMap) {
-      if (statisticMap.containsKey(path)) {
-        statisticMap.put(path, null);
-      }
-    }
-  }
-
-  /**
-   * This function is not used and need to complete the query key concept.
-   *
-   * @return TSRecord, query statistics params
-   */
-  public Map<String, TSRecord> getOneStatisticsValue(String key) {
-    // queryPath like fileNode seriesPath: root.stats.car1,
-    // or StorageEngine seriesPath:StorageEngine
-    String queryPath;
-    if (key.contains("\\.")) {
-      queryPath =
-          MonitorConstants.STAT_STORAGE_GROUP_PREFIX + MonitorConstants.MONITOR_PATH_SEPARATOR
-              + key.replaceAll("\\.", "_");
-    } else {
-      queryPath = key;
-    }
-    if (statisticMap.containsKey(queryPath)) {
-      return statisticMap.get(queryPath).getAllStatisticsValue();
-    } else {
-      long currentTimeMillis = System.currentTimeMillis();
-      HashMap<String, TSRecord> hashMap = new HashMap<>();
-      TSRecord tsRecord = convertToTSRecord(
-          MonitorConstants.initValues(MonitorConstants.FILENODE_PROCESSOR_CONST), queryPath,
-          currentTimeMillis);
-      hashMap.put(queryPath, tsRecord);
-      return hashMap;
-    }
-  }
-
-  /**
-   * get all statistics.
-   */
-  public Map<String, TSRecord> gatherStatistics() {
-    synchronized (statisticMap) {
-      long currentTimeMillis = System.currentTimeMillis();
-      HashMap<String, TSRecord> tsRecordHashMap = new HashMap<>();
-      for (Map.Entry<String, IStatistic> entry : statisticMap.entrySet()) {
-        if (entry.getValue() == null) {
-          switch (entry.getKey()) {
-            case MonitorConstants.STAT_STORAGE_DELTA_NAME:
-              tsRecordHashMap.put(entry.getKey(),
-                  convertToTSRecord(
-                      MonitorConstants.initValues(MonitorConstants.FILENODE_PROCESSOR_CONST),
-                      entry.getKey(), currentTimeMillis));
-              break;
-            case MonitorConstants.FILE_SIZE_STORAGE_GROUP_NAME:
-              tsRecordHashMap.put(entry.getKey(),
-                  convertToTSRecord(
-                      MonitorConstants.initValues(MonitorConstants.FILE_SIZE_CONST),
-                      entry.getKey(), currentTimeMillis));
-              break;
-            default:
-          }
-        } else {
-          tsRecordHashMap.putAll(entry.getValue().getAllStatisticsValue());
-        }
-      }
-      for (TSRecord value : tsRecordHashMap.values()) {
-        value.time = currentTimeMillis;
-      }
-      return tsRecordHashMap;
-    }
-  }
-
-
-  /**
    * close statistic service.
    */
   public void close() {
@@ -339,8 +227,6 @@ public class StatMonitor implements IService {
 
   class StatBackLoop implements Runnable {
 
-    FileSize fileSize = FileSize.getInstance();
-
     @Override
     public void run() {
       try {
@@ -353,13 +239,12 @@ public class StatMonitor implements IService {
         }
         Map<String, TSRecord> tsRecordHashMap = gatherStatistics();
         insert(tsRecordHashMap);
-        numBackLoop.incrementAndGet();
       } catch (Exception e) {
         logger.error("Error occurred in Stat Monitor thread", e);
       }
     }
 
-    public void cleanOutDated() {
+    private void cleanOutDated() {
       long currentTimeMillis = System.currentTimeMillis();
       try {
         StorageEngine fManager = StorageEngine.getInstance();
@@ -379,19 +264,49 @@ public class StatMonitor implements IService {
     }
 
     public void insert(Map<String, TSRecord> tsRecordHashMap) {
-      StorageEngine fManager = StorageEngine.getInstance();
-      int pointNum;
+      StorageEngine storageEngine = StorageEngine.getInstance();
       for (Map.Entry<String, TSRecord> entry : tsRecordHashMap.entrySet()) {
         try {
-          fManager.insert(new InsertPlan(entry.getValue()));
-          numInsert.incrementAndGet();
-          pointNum = entry.getValue().dataPointList.size();
-          numPointsInsert.addAndGet(pointNum);
+          storageEngine.insert(new InsertPlan(entry.getValue()));
         } catch (StorageEngineException | QueryProcessException e) {
-          numInsertError.incrementAndGet();
           logger.error("Inserting stat points error.", e);
         }
       }
     }
+
+    /**
+     * get all statistics.
+     */
+    private Map<String, TSRecord> gatherStatistics() {
+      synchronized (statisticMap) {
+        long currentTimeMillis = System.currentTimeMillis();
+        HashMap<String, TSRecord> tsRecordHashMap = new HashMap<>();
+        for (Map.Entry<String, IStatistic> entry : statisticMap.entrySet()) {
+          if (entry.getValue() == null) {
+            switch (entry.getKey()) {
+              case MonitorConstants.STORAGE_ENGINE_METRIC_PREFIX:
+                tsRecordHashMap.put(entry.getKey(),
+                    convertToTSRecord(
+                        MonitorConstants.initValues(MonitorConstants.STORAGE_ENGINE_METRIC_PREFIX),
+                        entry.getKey(), currentTimeMillis));
+                break;
+              case MonitorConstants.FILE_SIZE_METRIC_PREFIX:
+                tsRecordHashMap.put(entry.getKey(),
+                    convertToTSRecord(
+                        MonitorConstants.initValues(MonitorConstants.FILE_SIZE_METRIC_PREFIX),
+                        entry.getKey(), currentTimeMillis));
+                break;
+              default:
+            }
+          } else {
+            tsRecordHashMap.putAll(entry.getValue().getAllStatisticsValue());
+          }
+        }
+        for (TSRecord value : tsRecordHashMap.values()) {
+          value.time = currentTimeMillis;
+        }
+        return tsRecordHashMap;
+      }
+    }
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/monitor/collector/FileSize.java b/server/src/main/java/org/apache/iotdb/db/monitor/collector/FileSize.java
index 1f52ac7..c3f52f3 100644
--- a/server/src/main/java/org/apache/iotdb/db/monitor/collector/FileSize.java
+++ b/server/src/main/java/org/apache/iotdb/db/monitor/collector/FileSize.java
@@ -20,24 +20,22 @@
 package org.apache.iotdb.db.monitor.collector;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EnumMap;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicLong;
 import org.apache.commons.io.FileUtils;
 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;
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.monitor.IStatistic;
 import org.apache.iotdb.db.monitor.MonitorConstants;
-import org.apache.iotdb.db.monitor.MonitorConstants.FileSizeConstants;
+import org.apache.iotdb.db.monitor.MonitorConstants.FileSizeMetrics;
 import org.apache.iotdb.db.monitor.StatMonitor;
-import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -62,19 +60,19 @@ public class FileSize implements IStatistic {
   public Map<String, TSRecord> getAllStatisticsValue() {
     long curTime = System.currentTimeMillis();
     TSRecord tsRecord = StatMonitor
-        .convertToTSRecord(getStatParamsHashMap(), MonitorConstants.FILE_SIZE_STORAGE_GROUP_NAME,
+        .convertToTSRecord(getStatParamsHashMap(), MonitorConstants.FILE_SIZE_METRIC_PREFIX,
             curTime);
     HashMap<String, TSRecord> ret = new HashMap<>();
-    ret.put(MonitorConstants.FILE_SIZE_STORAGE_GROUP_NAME, tsRecord);
+    ret.put(MonitorConstants.FILE_SIZE_METRIC_PREFIX, tsRecord);
     return ret;
   }
 
   @Override
   public void registerStatMetadata() {
     Map<String, String> hashMap = new HashMap<>();
-    for (FileSizeConstants kind : FileSizeConstants.values()) {
-      String seriesPath = MonitorConstants.FILE_SIZE_STORAGE_GROUP_NAME
-          + MonitorConstants.MONITOR_PATH_SEPARATOR
+    for (FileSizeMetrics kind : FileSizeMetrics.values()) {
+      String seriesPath = MonitorConstants.FILE_SIZE_METRIC_PREFIX
+          + IoTDBConstant.PATH_SEPARATOR
           + kind.name();
       hashMap.put(seriesPath, MonitorConstants.DATA_TYPE_INT64);
       Path path = new Path(seriesPath);
@@ -90,21 +88,10 @@ public class FileSize implements IStatistic {
   }
 
   @Override
-  public List<String> getAllPathForStatistic() {
-    List<String> list = new ArrayList<>();
-    for (FileSizeConstants kind : MonitorConstants.FileSizeConstants.values()) {
-      list.add(
-          MonitorConstants.FILE_SIZE_STORAGE_GROUP_NAME + MonitorConstants.MONITOR_PATH_SEPARATOR
-              + kind.name());
-    }
-    return list;
-  }
-
-  @Override
-  public Map<String, AtomicLong> getStatParamsHashMap() {
-    Map<FileSizeConstants, Long> fileSizeMap = getFileSizesInByte();
-    Map<String, AtomicLong> statParamsMap = new HashMap<>();
-    for (FileSizeConstants kind : MonitorConstants.FileSizeConstants.values()) {
+  public Map<String, Object> getStatParamsHashMap() {
+    Map<FileSizeMetrics, Long> fileSizeMap = getFileSizesInByte();
+    Map<String, Object> statParamsMap = new HashMap<>();
+    for (FileSizeMetrics kind : FileSizeMetrics.values()) {
       statParamsMap.put(kind.name(), new AtomicLong(fileSizeMap.get(kind)));
     }
     return statParamsMap;
@@ -120,7 +107,7 @@ public class FileSize implements IStatistic {
     if (config.isEnableStatMonitor()) {
       StatMonitor statMonitor = StatMonitor.getInstance();
       registerStatMetadata();
-      statMonitor.registerStatistics(MonitorConstants.FILE_SIZE_STORAGE_GROUP_NAME, this);
+      statMonitor.registerStatistics(MonitorConstants.FILE_SIZE_METRIC_PREFIX, this);
     }
   }
 
@@ -129,16 +116,16 @@ public class FileSize implements IStatistic {
   }
 
   /**
-   * Return a map[FileSizeConstants, Long]. The key is the dir type and the value is the dir size in
+   * Return a map[FileSizeMetrics, Long]. The key is the dir type and the value is the dir size in
    * byte.
    *
-   * @return a map[FileSizeConstants, Long] with the dir type and the dir size in byte
+   * @return a map[FileSizeMetrics, Long] with the dir type and the dir size in byte
    */
-  public Map<FileSizeConstants, Long> getFileSizesInByte() {
-    EnumMap<FileSizeConstants, Long> fileSizes = new EnumMap<>(FileSizeConstants.class);
-    for (FileSizeConstants kinds : MonitorConstants.FileSizeConstants.values()) {
+  private Map<FileSizeMetrics, Long> getFileSizesInByte() {
+    EnumMap<FileSizeMetrics, Long> fileSizes = new EnumMap<>(FileSizeMetrics.class);
+    for (FileSizeMetrics kinds : FileSizeMetrics.values()) {
 
-      if (kinds.equals(FileSizeConstants.SYS)) {
+      if (kinds.equals(FileSizeMetrics.SYS)) {
         fileSizes.put(kinds, collectSeqFileSize(fileSizes, kinds));
       } else {
         File file = SystemFileFactory.INSTANCE.getFile(kinds.getPath());
@@ -158,7 +145,7 @@ public class FileSize implements IStatistic {
     return fileSizes;
   }
 
-  private long collectSeqFileSize(EnumMap<FileSizeConstants, Long> fileSizes, FileSizeConstants kinds) {
+  private long collectSeqFileSize(EnumMap<FileSizeMetrics, Long> fileSizes, FileSizeMetrics kinds) {
     long fileSize = INIT_VALUE_IF_FILE_NOT_EXIST;
     for (String sequenceDir : config.getDataDirs()) {
       if (sequenceDir.contains("unsequence")) {
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 b2201b9..2478e15 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
@@ -34,12 +34,15 @@ import java.sql.Statement;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
+import java.util.concurrent.atomic.AtomicLong;
 import org.apache.iotdb.db.auth.AuthException;
 import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.auth.authorizer.IAuthorizer;
@@ -58,6 +61,10 @@ import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.exception.storageGroup.StorageGroupException;
 import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.metrics.server.SqlArgument;
+import org.apache.iotdb.db.monitor.IStatistic;
+import org.apache.iotdb.db.monitor.MonitorConstants;
+import org.apache.iotdb.db.monitor.MonitorConstants.TSServiceImplMetrics;
+import org.apache.iotdb.db.monitor.StatMonitor;
 import org.apache.iotdb.db.qp.QueryProcessor;
 import org.apache.iotdb.db.qp.constant.SQLConstant;
 import org.apache.iotdb.db.qp.executor.QueryProcessExecutor;
@@ -108,6 +115,7 @@ import org.apache.iotdb.service.rpc.thrift.TSSetTimeZoneReq;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
 import org.apache.iotdb.service.rpc.thrift.TSStatusType;
 import org.apache.iotdb.service.rpc.thrift.TS_SessionHandle;
+import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.common.constant.StatisticConstant;
 import org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException;
 import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
@@ -116,6 +124,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
+import org.apache.iotdb.tsfile.write.record.TSRecord;
 import org.apache.thrift.TException;
 import org.apache.thrift.server.ServerContext;
 import org.slf4j.Logger;
@@ -125,13 +134,16 @@ import org.slf4j.LoggerFactory;
  * Thrift RPC implementation at server side.
  */
 
-public class TSServiceImpl implements TSIService.Iface, ServerContext {
+public class TSServiceImpl implements TSIService.Iface, ServerContext, IStatistic {
 
   private static final Logger logger = LoggerFactory.getLogger(TSServiceImpl.class);
   private static final String INFO_NOT_LOGIN = "{}: Not login.";
   private static final int MAX_SIZE = 200;
   private static final int DELETE_SIZE = 50;
   public static Vector<SqlArgument> sqlArgumentsList = new Vector<>();
+  private static AtomicLong requestNum = new AtomicLong(0);
+  private static final String METRIC_PREFIX = MonitorConstants.REQUEST_METRIC_PREFIX;
+  private StorageEngine storageEngine;
 
   protected QueryProcessor processor;
   // Record the username for every rpc connection. Username.get() is null if
@@ -154,6 +166,12 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
 
   public TSServiceImpl() {
     processor = new QueryProcessor(new QueryProcessExecutor());
+    storageEngine = StorageEngine.getInstance();
+    if (config.isEnableStatMonitor()) {
+      StatMonitor statMonitor = StatMonitor.getInstance();
+      registerStatMetadata();
+      statMonitor.registerStatistics(METRIC_PREFIX, this);
+    }
   }
 
   @Override
@@ -521,6 +539,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   @Override
   public TSExecuteBatchStatementResp executeBatchStatement(TSExecuteBatchStatementReq req) {
     long t1 = System.currentTimeMillis();
+    requestNum.incrementAndGet();
     List<Integer> result = new ArrayList<>();
     try {
       if (!checkLogin()) {
@@ -593,6 +612,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
   @Override
   public TSExecuteStatementResp executeStatement(TSExecuteStatementReq req) {
     long startTime = System.currentTimeMillis();
+    requestNum.incrementAndGet();
     TSExecuteStatementResp resp;
     SqlArgument sqlArgument;
     try {
@@ -683,7 +703,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
       return getTSExecuteStatementResp(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
     }
-
+    requestNum.incrementAndGet();
     String statement = req.getStatement();
     PhysicalPlan physicalPlan;
     try {
@@ -992,6 +1012,8 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
         return getTSExecuteStatementResp(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
       }
+
+      requestNum.incrementAndGet();
       String statement = req.getStatement();
       return executeUpdateStatement(statement);
     } catch (Exception e) {
@@ -1147,6 +1169,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       return getTSExecuteStatementResp(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
     }
 
+    requestNum.incrementAndGet();
     long stmtId = req.getStmtId();
     InsertPlan plan = (InsertPlan) operationStatus.get()
         .computeIfAbsent(stmtId, k -> new InsertPlan());
@@ -1181,6 +1204,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       return new TSStatus(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
     }
 
+    requestNum.incrementAndGet();
     InsertPlan plan = new InsertPlan();
     plan.setDeviceId(req.getDeviceId());
     plan.setTime(req.getTimestamp());
@@ -1201,6 +1225,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       return new TSStatus(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
     }
 
+    requestNum.incrementAndGet();
     DeletePlan plan = new DeletePlan();
     plan.setDeleteTime(req.getTimestamp());
     List<Path> paths = new ArrayList<>();
@@ -1225,6 +1250,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
         return getTSBatchExecuteStatementResp(getStatus(TSStatusCode.NOT_LOGIN_ERROR), null);
       }
 
+      requestNum.incrementAndGet();
       BatchInsertPlan batchInsertPlan = new BatchInsertPlan(req.deviceId, req.measurements);
       batchInsertPlan.setTimes(QueryDataSetUtils.readTimesFromBuffer(req.timestamps, req.size));
       batchInsertPlan.setColumns(QueryDataSetUtils
@@ -1273,6 +1299,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       return new TSStatus(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
     }
 
+    requestNum.incrementAndGet();
     SetStorageGroupPlan plan = new SetStorageGroupPlan(new Path(storageGroup));
     TSStatus status = checkAuthority(plan);
     if (status != null) {
@@ -1287,6 +1314,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
       return new TSStatus(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
     }
+    requestNum.incrementAndGet();
     List<Path> storageGroupList = new ArrayList<>();
     for (String storageGroup : storageGroups) {
       storageGroupList.add(new Path(storageGroup));
@@ -1305,6 +1333,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
       return new TSStatus(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
     }
+    requestNum.incrementAndGet();
     CreateTimeSeriesPlan plan = new CreateTimeSeriesPlan(new Path(req.getPath()),
         TSDataType.values()[req.getDataType()], TSEncoding.values()[req.getEncoding()],
         CompressionType.values()[req.compressor], new HashMap<>());
@@ -1321,6 +1350,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       logger.info(INFO_NOT_LOGIN, IoTDBConstant.GLOBAL_DB_NAME);
       return new TSStatus(getStatus(TSStatusCode.NOT_LOGIN_ERROR));
     }
+    requestNum.incrementAndGet();
     List<Path> pathList = new ArrayList<>();
     for (String path : paths) {
       pathList.add(new Path(path));
@@ -1353,6 +1383,50 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
     return null;
   }
 
+  @Override
+  public Map<String, TSRecord> getAllStatisticsValue() {
+    long curTime = System.currentTimeMillis();
+    TSRecord tsRecord = StatMonitor
+        .convertToTSRecord(getStatParamsHashMap(), METRIC_PREFIX,
+            curTime);
+    HashMap<String, TSRecord> ret = new HashMap<>();
+    ret.put(METRIC_PREFIX, tsRecord);
+    return ret;
+  }
+
+  @Override
+  public void registerStatMetadata() {
+    Map<String, String> hashMap = new HashMap<>();
+    for (TSServiceImplMetrics kind : TSServiceImplMetrics.values()) {
+      String seriesPath = METRIC_PREFIX
+          + IoTDBConstant.PATH_SEPARATOR
+          + kind.name();
+      hashMap.put(seriesPath, MonitorConstants.DATA_TYPE_INT64);
+      Path path = new Path(seriesPath);
+      try {
+        storageEngine.addTimeSeries(path, TSDataType.valueOf(MonitorConstants.DATA_TYPE_INT64),
+            TSEncoding.valueOf("RLE"), CompressionType.valueOf(
+                TSFileDescriptor.getInstance().getConfig().getCompressor()),
+            Collections.emptyMap());
+      } catch (StorageEngineException e) {
+        logger.error("Register File Size Stats into storageEngine Failed.", e);
+      }
+    }
+    StatMonitor.getInstance().registerStatStorageGroup(hashMap);
+  }
+
+  @Override
+  public Map<String, Object> getStatParamsHashMap() {
+    Map<TSServiceImplMetrics, Long> fileSizeMap = new EnumMap<>(TSServiceImplMetrics.class);
+    fileSizeMap.put(TSServiceImplMetrics.TOTAL_REQ, requestNum.get());
+    requestNum.set(0);
+    Map<String, Object> statParamsMap = new HashMap<>();
+    for (TSServiceImplMetrics kind : MonitorConstants.TSServiceImplMetrics.values()) {
+      statParamsMap.put(kind.name(), new AtomicLong(fileSizeMap.get(kind)));
+    }
+    return statParamsMap;
+  }
+
   private TSStatus executePlan(PhysicalPlan plan) {
     boolean execRet;
     try {
diff --git a/server/src/test/java/org/apache/iotdb/db/monitor/collector/FileSizeTest.java b/server/src/test/java/org/apache/iotdb/db/monitor/collector/FileSizeTest.java
index 4266ded..ae9c4ba 100644
--- a/server/src/test/java/org/apache/iotdb/db/monitor/collector/FileSizeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/monitor/collector/FileSizeTest.java
@@ -25,7 +25,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.file.Files;
-import org.apache.iotdb.db.monitor.MonitorConstants.FileSizeConstants;
+import org.apache.iotdb.db.monitor.MonitorConstants.FileSizeMetrics;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -36,7 +36,7 @@ public class FileSizeTest {
 
   private static final String TEST_FILE_CONTENT = "FileSize UT test file";
   private static final String TEST_FILE_PATH =
-      FileSizeConstants.SYS.getPath() + File.separatorChar + "schemaFile";
+      FileSizeMetrics.SYS.getPath() + File.separatorChar + "schemaFile";
 
   @Before
   public void setUp() throws Exception {
@@ -71,7 +71,7 @@ public class FileSizeTest {
       e.printStackTrace();
     }
 
-    dataSizeBefore = FileSize.getInstance().getFileSizesInByte().get(FileSizeConstants.SYS);
+    dataSizeBefore = FileSize.getInstance().getFileSizesInByte().get(FileSizeMetrics.SYS);
     byte[] contentInBytes = TEST_FILE_CONTENT.getBytes();
     // insert something into the test file under data dir
     try (FileOutputStream fileOutputStream = new FileOutputStream(testFile)) {
@@ -82,7 +82,7 @@ public class FileSizeTest {
       e.printStackTrace();
     }
     // calculate the delta of data dir file size
-    dataSizeAfter = FileSize.getInstance().getFileSizesInByte().get(FileSizeConstants.SYS);
+    dataSizeAfter = FileSize.getInstance().getFileSizesInByte().get(FileSizeMetrics.SYS);
     long deltaSize = dataSizeAfter - dataSizeBefore;
 
     if (isWriteSuccess) {


[incubator-iotdb] 01/02: refactor(IStatistic): remove unused interface

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

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

commit fe2a040ed8bacb5cde27917dad57d5c900a3b596
Author: liuruiyiyang <24...@qq.com>
AuthorDate: Wed Nov 20 15:48:31 2019 +0800

    refactor(IStatistic): remove unused interface
---
 .../org/apache/iotdb/db/engine/StorageEngine.java  | 30 +++++++++++++++++++++-
 .../org/apache/iotdb/db/monitor/IStatistic.java    |  7 -----
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
index 392fdc1..4a8eeb1 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
@@ -34,6 +34,7 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
 import org.apache.commons.io.FileUtils;
 import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
@@ -51,6 +52,8 @@ import org.apache.iotdb.db.exception.storageGroup.StorageGroupException;
 import org.apache.iotdb.db.exception.storageGroup.StorageGroupProcessorException;
 import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.metadata.MNode;
+import org.apache.iotdb.db.monitor.IStatistic;
+import org.apache.iotdb.db.monitor.MonitorConstants;
 import org.apache.iotdb.db.qp.physical.crud.BatchInsertPlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
@@ -64,16 +67,27 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.expression.impl.SingleSeriesExpression;
+import org.apache.iotdb.tsfile.write.record.TSRecord;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class StorageEngine implements IService {
+public class StorageEngine implements IService, IStatistic {
 
   private final Logger logger;
   private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
   private static final long TTL_CHECK_INTERVAL = 60 * 1000;
 
   /**
+   * the monitored metric's time series path prefix of this class
+   */
+  private static final String MONITOR_METRIC_PREFIX = MonitorConstants.STAT_STORAGE_DELTA_NAME;
+
+  /**
+   *
+   */
+  private static AtomicLong insertPoint = new AtomicLong(0);
+
+  /**
    * a folder (system/storage_groups/ by default) that persist system info. Each Storage Processor
    * will have a subfolder under the systemDir.
    */
@@ -437,4 +451,18 @@ public class StorageEngine implements IService {
     getProcessor(deletedTsfile.getParentFile().getName()).deleteTsfile(deletedTsfile);
   }
 
+  @Override
+  public Map<String, TSRecord> getAllStatisticsValue() {
+    return null;
+  }
+
+  @Override
+  public void registerStatMetadata() {
+
+  }
+
+  @Override
+  public Map<String, AtomicLong> getStatParamsHashMap() {
+    return null;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/monitor/IStatistic.java b/server/src/main/java/org/apache/iotdb/db/monitor/IStatistic.java
index f032571..af0d736 100644
--- a/server/src/main/java/org/apache/iotdb/db/monitor/IStatistic.java
+++ b/server/src/main/java/org/apache/iotdb/db/monitor/IStatistic.java
@@ -40,13 +40,6 @@ public interface IStatistic {
   void registerStatMetadata();
 
   /**
-   * Get all module's statistics parameters as a time-series seriesPath.
-   *
-   * @return a list of string like "root.stats.xxx.statisticsParams",
-   */
-  List<String> getAllPathForStatistic();
-
-  /**
    * Get a HashMap contains the names and values of the statistics parameters.
    * @return a HashMap contains the names and values of the statistics parameters
    */