From 7a314430530f85798ec3436b5d99a32a31727243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E9=9B=A8=E8=BD=A9?= <18373391@buaa.edu.cn> Date: Tue, 13 Jul 2021 14:40:02 +0800 Subject: [PATCH] update dropwizard --- .../dropwizard/DropwizardMetricManager.java | 75 +++++++++++++++++++ .../dropwizard/DropwizardMetricReporter.java | 38 +++++++++- .../micrometer/MicrometerMetricManager.java | 21 ------ 3 files changed, 109 insertions(+), 25 deletions(-) diff --git a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java index a6994677de9f..4e8f89cda7c4 100644 --- a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java +++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java @@ -21,6 +21,7 @@ import org.apache.iotdb.metrics.KnownMetric; import org.apache.iotdb.metrics.MetricManager; +import org.apache.iotdb.metrics.MetricReporter; import org.apache.iotdb.metrics.config.MetricConfig; import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.dropwizard.type.DropwizardCounter; @@ -67,10 +68,12 @@ public class DropwizardMetricManager implements MetricManager { com.codahale.metrics.MetricRegistry metricRegistry; MetricConfig metricConfig = MetricConfigDescriptor.getInstance().getMetricConfig(); + MetricReporter metricReporter; /** init the field with dropwizard library. */ public DropwizardMetricManager() { metricRegistry = new MetricRegistry(); + metricReporter = new DropwizardMetricReporter(); isEnable = metricConfig.getEnableMetric(); currentMeters = new ConcurrentHashMap<>(); } @@ -258,6 +261,51 @@ public void timer(long delta, TimeUnit timeUnit, String metric, String... tags) .update(delta, timeUnit); } + @Override + public void removeCounter(String metric, String... tags) { + if (!isEnable) { + return; + } + MetricName name = new MetricName(metric, tags); + currentMeters.remove(name); + } + + @Override + public void removeGauge(String metric, String... tags) { + if (!isEnable) { + return; + } + MetricName name = new MetricName(metric, tags); + currentMeters.remove(name); + } + + @Override + public void removeRate(String metric, String... tags) { + if (!isEnable) { + return; + } + MetricName name = new MetricName(metric, tags); + currentMeters.remove(name); + } + + @Override + public void removeHistogram(String metric, String... tags) { + if (!isEnable) { + return; + } + MetricName name = new MetricName(metric, tags); + currentMeters.remove(name); + } + + @Override + public void removeTimer(String metric, String... tags) { + if (!isEnable) { + return; + } + MetricName name = new MetricName(metric, tags); + currentMeters.remove(name); + } + @Override public List getAllMetricKeys() { if (!isEnable) { @@ -363,9 +411,36 @@ private void enableJvmMetrics() { @Override public boolean init() { + logger.info("DropWizard init registry"); + List reporters = metricConfig.getMetricReporterList(); + for(String report: reporters){ + if(!startReporter(report)){ + return false; + } + } return true; } + @Override + public boolean stop() { + return metricReporter.stop(); + } + + @Override + public boolean startReporter(String reporterName) { + return metricReporter.start(reporterName); + } + + @Override + public boolean stopReporter(String reporterName) { + return metricReporter.stop(reporterName); + } + + @Override + public void setReporter(MetricReporter metricReporter) { + this.metricReporter = metricReporter; + } + @Override public String getName() { return "DropwizardMetricManager"; diff --git a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricReporter.java b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricReporter.java index 3636e48dbdda..819a259a0065 100644 --- a/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricReporter.java +++ b/metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricReporter.java @@ -57,6 +57,23 @@ public boolean start() { return false; } + @Override + public boolean start(String reporter) { + switch (ReporterType.get(reporter)) { + case JMX: + startJmxReporter(); + break; + case IOTDB: + break; + case PROMETHEUS: + break; + default: + logger.warn("Dropwizard don't support reporter type {}", reporter); + return false; + } + return true; + } + private void startJmxReporter() { jmxReporter = JmxReporter.forRegistry( @@ -65,10 +82,6 @@ private void startJmxReporter() { jmxReporter.start(); } - @Override - public void setMetricManager(MetricManager metricManager) { - dropwizardMetricManager = metricManager; - } @Override public boolean stop() { @@ -89,6 +102,23 @@ public boolean stop() { return true; } + @Override + public boolean stop(String reporter) { + switch (ReporterType.get(reporter)) { + case JMX: + stopJmxReporter(jmxReporter); + break; + case IOTDB: + break; + case PROMETHEUS: + break; + default: + logger.warn("Dropwizard don't support reporter type {}", reporter); + return false; + } + return true; + } + private void stopJmxReporter(JmxReporter jmxReporter) { if (jmxReporter != null) { jmxReporter.stop(); diff --git a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java index 098d5a870b4b..b2da76fb069b 100644 --- a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java +++ b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java @@ -551,27 +551,6 @@ public String getName() { return "MicrometerMetricManager"; } - /** - * bind metric to Reporter - * - * @param metric - * @param reporterName global for all - * @return - */ - @Override - public boolean bind(IMetric metric, String reporterName) { - Set meterRegistrySet = getMeterRegistries(reporterName); - for(MeterRegistry meterRegistry: meterRegistrySet){ - if(metric instanceof MicrometerCounter){ - ((MicrometerCounter) metric).bindTo(meterRegistry); - System.out.println("Bind"); - }else{ - return false; - } - } - return true; - } - public MeterRegistry getMeterRegistry() { return meterRegistry; }