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

hxd pushed a commit to branch feature/metric2021
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/feature/metric2021 by this 
push:
     new e65368a  init metrics
e65368a is described below

commit e65368ac3edaa96b651402d7cb3d6cb9c1f07927
Author: xiangdong huang <[email protected]>
AuthorDate: Mon Feb 8 14:09:32 2021 +0800

    init metrics
---
 metrics/interface/pom.xml                          | 38 +++++++++++
 .../java/org/apache/iotdb/metrics/KnownMetric.java |  7 ++
 .../main/java/org/apache/iotdb/metrics/Metric.java | 26 ++++++++
 .../org/apache/iotdb/metrics/MetricFactory.java    | 20 ++++++
 .../org/apache/iotdb/metrics/MetricManager.java    | 67 ++++++++++++++++++++
 .../org/apache/iotdb/metrics/MetricReporter.java   |  6 ++
 .../iotdb/metrics/impl/DoNothingFactory.java       | 30 +++++++++
 .../apache/iotdb/metrics/impl/DoNothingMetric.java | 74 ++++++++++++++++++++++
 metrics/pom.xml                                    | 41 ++++++++++++
 pom.xml                                            |  1 +
 .../java/org/apache/iotdb/db/service/IoTDB.java    |  4 ++
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  1 -
 tsfile/pom.xml                                     |  5 ++
 13 files changed, 319 insertions(+), 1 deletion(-)

diff --git a/metrics/interface/pom.xml b/metrics/interface/pom.xml
new file mode 100644
index 0000000..c280d16
--- /dev/null
+++ b/metrics/interface/pom.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.iotdb</groupId>
+    <artifactId>iotdb-metrics</artifactId>
+    <version>0.12.0-SNAPSHOT</version>
+    <relativePath>../pom.xml</relativePath>
+  </parent>
+  <artifactId>metrics-interface</artifactId>
+  <name>metric interface</name>
+  <description>Metrics interface for IoTDB</description>
+  <url>https://github.com/thulab/iotdb/tree/master/tsfile</url>
+
+  <dependencies>
+  </dependencies>
+
+</project>
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/KnownMetric.java 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/KnownMetric.java
new file mode 100644
index 0000000..87fde28
--- /dev/null
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/KnownMetric.java
@@ -0,0 +1,7 @@
+package org.apache.iotdb.metrics;
+
+public enum KnownMetric {
+  JVM,
+  SYSTEM,
+  THREAD,
+}
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/Metric.java 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/Metric.java
new file mode 100644
index 0000000..41c3493
--- /dev/null
+++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/Metric.java
@@ -0,0 +1,26 @@
+package org.apache.iotdb.metrics;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+public interface Metric {
+  //metric.counter(5, "insertRecords","interface","insertRecords","sg","sg1");
+  void count(int delta, String metric, String... tags);
+  void count(long delta, String metric, String... tags);
+  void histogram(int value, String metric, String... tags);
+  void histogram(long value, String metric, String... tags);
+  void gauge(int value, String metric, String... tags);
+  void gauge(long value, String metric, String... tags);
+  void meter(int value, String metric, String... tags);
+  void meter(long value, String metric, String... tags);
+  void timer(long delta, TimeUnit timeUnit, String metric, String... tags);
+  void timerStart(String metric, String... tags);
+  void timerEnd(String metric, String... tags);
+
+
+  Map<String, String[]> getAllMetrics();
+  Object getMetricValue (String metric, String... tags);
+  Object getMetricHistogram (String metric, String... tags);
+  Object getMetricTimer (String metric, String... tags);
+
+}
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricFactory.java 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricFactory.java
new file mode 100644
index 0000000..dd3ae3b
--- /dev/null
+++ 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricFactory.java
@@ -0,0 +1,20 @@
+package org.apache.iotdb.metrics;
+
+import java.util.Map;
+
+public interface MetricFactory {
+
+   /**
+    *
+    * repeated calling the method will return the same Object instance.
+    *
+    * @param namespace
+    * @return
+    */
+   Metric getMetric(String namespace);
+
+   void enableKnownMetric(KnownMetric metric);
+   Map<String, Metric> getAllMetrics();
+   boolean isEnable();
+
+}
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManager.java 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManager.java
new file mode 100644
index 0000000..8b0d1fc
--- /dev/null
+++ 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManager.java
@@ -0,0 +1,67 @@
+package org.apache.iotdb.metrics;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.ServiceLoader;
+import org.apache.iotdb.metrics.impl.DoNothingFactory;
+
+public class MetricManager {
+
+ private static List<MetricReporter> reporters = new ArrayList<>();
+
+ private static MetricFactory factory;
+
+ static {
+  init();
+ }
+
+ private static void init() {
+
+  ServiceLoader<MetricReporter> reporter = 
ServiceLoader.load(MetricReporter.class);
+  for (MetricReporter r : reporter) {
+   reporters.add(r);
+   r.start();
+  }
+
+  ServiceLoader<MetricFactory> metricFactories = 
ServiceLoader.load(MetricFactory.class);
+  int size = 0;
+  MetricFactory nothingFactory = null;
+
+  for (MetricFactory mf : metricFactories) {
+   if (mf instanceof DoNothingFactory) {
+    nothingFactory = mf;
+    continue;
+   }
+    size ++;
+    if (size > 1) {
+     throw new RuntimeException("More than one Metric Implementation is 
detected.");
+    }
+   factory = mf;
+  }
+
+  // if no more implementation, we use nothingFactory.
+  if (size == 0) {
+   factory = nothingFactory;
+  }
+ }
+
+ public static void stop() {
+  for (MetricReporter r : reporters) {
+   r.stop();
+  }
+ }
+
+ public static Metric getMetric(String namespace) {
+  return factory.getMetric(namespace);
+ }
+ public static void enableKnownMetric(KnownMetric metric) {
+  factory.enableKnownMetric(metric);
+ }
+ public static Map<String, Metric> getAllMetrics() {
+  return factory.getAllMetrics();
+ }
+ public static boolean isEnable() {
+  return factory.isEnable();
+ }
+}
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricReporter.java 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricReporter.java
new file mode 100644
index 0000000..1a67cfe
--- /dev/null
+++ 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricReporter.java
@@ -0,0 +1,6 @@
+package org.apache.iotdb.metrics;
+
+public interface MetricReporter {
+  boolean start();
+  boolean stop();
+}
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingFactory.java
 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingFactory.java
new file mode 100644
index 0000000..242dc68
--- /dev/null
+++ 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingFactory.java
@@ -0,0 +1,30 @@
+package org.apache.iotdb.metrics.impl;
+
+import java.util.Collections;
+import java.util.Map;
+import org.apache.iotdb.metrics.MetricFactory;
+import org.apache.iotdb.metrics.KnownMetric;
+import org.apache.iotdb.metrics.Metric;
+
+public class DoNothingFactory implements MetricFactory {
+  private DoNothingMetric metric = new DoNothingMetric();
+  @Override
+  public Metric getMetric(String namespace) {
+    return metric;
+  }
+
+  @Override
+  public void enableKnownMetric(KnownMetric metric) {
+
+  }
+
+  @Override
+  public Map<String, Metric> getAllMetrics() {
+    return Collections.emptyMap();
+  }
+
+  @Override
+  public boolean isEnable() {
+    return true;
+  }
+}
diff --git 
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingMetric.java
 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingMetric.java
new file mode 100644
index 0000000..8b4f583
--- /dev/null
+++ 
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingMetric.java
@@ -0,0 +1,74 @@
+package org.apache.iotdb.metrics.impl;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import org.apache.iotdb.metrics.Metric;
+
+public class DoNothingMetric implements Metric {
+
+  @Override
+  public void count(int delta, String metric, String... tags) {
+
+  }
+
+  @Override
+  public void count(long delta, String metric, String... tags) {
+
+  }
+
+  @Override
+  public void histogram(int value, String metric, String... tags) {
+
+  }
+
+  @Override
+  public void histogram(long value, String metric, String... tags) {
+
+  }
+
+  @Override
+  public void gauge(int value, String metric, String... tags) {
+
+  }
+
+  @Override
+  public void gauge(long value, String metric, String... tags) {
+
+  }
+
+  @Override
+  public void meter(int value, String metric, String... tags) {
+
+  }
+
+  @Override
+  public void meter(long value, String metric, String... tags) {
+
+  }
+
+  @Override
+  public void timer(long delta, TimeUnit timeUnit, String metric, String... 
tags) {
+
+  }
+
+  @Override
+  public void timerStart(String metric, String... tags) {
+
+  }
+
+  @Override
+  public void timerEnd(String metric, String... tags) {
+
+  }
+
+  @Override
+  public Map<String, String[]> getAllMetrics() {
+    return Collections.emptyMap();
+  }
+
+  @Override
+  public Object getMetricValue(String metric, String... tags) {
+    return 0;
+  }
+}
diff --git a/metrics/pom.xml b/metrics/pom.xml
new file mode 100644
index 0000000..ae49335
--- /dev/null
+++ b/metrics/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.iotdb</groupId>
+    <artifactId>iotdb-parent</artifactId>
+    <version>0.12.0-SNAPSHOT</version>
+    <relativePath>../pom.xml</relativePath>
+  </parent>
+  <artifactId>iotdb-metrics</artifactId>
+  <packaging>pom</packaging>
+  <name>metric module</name>
+  <description>Metrics interface for IoTDB</description>
+  <url>https://github.com/thulab/iotdb/tree/master/tsfile</url>
+  <modules>
+    <module>interface</module>
+  </modules>
+  <dependencies>
+  </dependencies>
+
+</project>
diff --git a/pom.xml b/pom.xml
index c901853..4d8d0a9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,6 +100,7 @@
         <module>cross-tests</module>
         <module>zeppelin-interpreter</module>
         <module>client-py</module>
+        <module>metrics</module>
     </modules>
     <!-- Properties Management -->
     <properties>
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java 
b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index beb2235..cfeb50d 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -41,6 +41,8 @@ import org.apache.iotdb.db.rescon.SystemInfo;
 import org.apache.iotdb.db.rescon.TVListAllocator;
 import org.apache.iotdb.db.sync.receiver.SyncServerManager;
 import org.apache.iotdb.db.writelog.manager.MultiFileLogNodeManager;
+import org.apache.iotdb.metrics.Metric;
+import org.apache.iotdb.metrics.MetricManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,6 +58,8 @@ public class IoTDB implements IoTDBMBean {
     return IoTDBHolder.INSTANCE;
   }
 
+  public static Metric serverMetric = MetricManager.getMetric("iotdb");
+
   public static void main(String[] args) {
     if (args.length > 0) {
       IoTDBDescriptor.getInstance().replaceProps(args);
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 2262b63..a92d3d2 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
@@ -244,7 +244,6 @@ public class TSServiceImpl implements TSIService.Iface, 
ServerContext {
       status = false;
       loginMessage = e.getMessage();
     }
-
     TSStatus tsStatus;
     long sessionId = -1;
     if (status) {
diff --git a/tsfile/pom.xml b/tsfile/pom.xml
index b5e1370..5274830 100644
--- a/tsfile/pom.xml
+++ b/tsfile/pom.xml
@@ -38,6 +38,11 @@
     </properties>
     <dependencies>
         <dependency>
+            <groupId>org.apache.iotdb</groupId>
+            <artifactId>metrics-interface</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
         </dependency>

Reply via email to