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>