You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2020/03/16 14:49:53 UTC

[sling-whiteboard] 02/02: metrics-osgi: remove dropwizard metrics on deactivation

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

rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit 73c0482315c38d52602ee031d121932e437d10db
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Mon Mar 16 15:49:42 2020 +0100

    metrics-osgi: remove dropwizard metrics on deactivation
---
 .../impl/dropwizard/DropwizardMetricsListener.java   | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/DropwizardMetricsListener.java b/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/DropwizardMetricsListener.java
index 33f659d..ceaf918 100644
--- a/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/DropwizardMetricsListener.java
+++ b/osgi-metrics/consumers/src/main/java/org/apache/sling/metrics/osgi/consumers/impl/dropwizard/DropwizardMetricsListener.java
@@ -16,6 +16,9 @@
  */
 package org.apache.sling.metrics.osgi.consumers.impl.dropwizard;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.sling.metrics.osgi.StartupMetrics;
 import org.apache.sling.metrics.osgi.StartupMetricsListener;
 import org.osgi.service.component.annotations.Component;
@@ -25,6 +28,7 @@ import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 
 import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Metric;
 import com.codahale.metrics.MetricRegistry;
 
 @Component
@@ -48,20 +52,30 @@ public class DropwizardMetricsListener implements StartupMetricsListener {
     
     private int serviceRestartThreshold;
     private long slowBundleThresholdMillis;
+    private List<String> registeredMetricNames = new ArrayList<>();
     
     protected void activate(Config cfg) {
         this.serviceRestartThreshold = cfg.service_restart_threshold();
         this.slowBundleThresholdMillis = cfg.slow_bundle_threshold_millis();
     }
+
+    protected void deactivate() {
+        registeredMetricNames.forEach( m -> registry.remove(m) );
+    }
     
     @Override
     public void onStartupComplete(StartupMetrics event) {
-        registry.register(APPLICATION_STARTUP_GAUGE_NAME, (Gauge<Long>) () -> event.getStartupTime().toMillis() );
+        register(APPLICATION_STARTUP_GAUGE_NAME, (Gauge<Long>) () -> event.getStartupTime().toMillis() );
         event.getBundleStartDurations().stream()
             .filter( bsd -> bsd.getStartedAfter().toMillis() >= slowBundleThresholdMillis )
-            .forEach( bsd -> registry.register(BUNDLE_STARTUP_GAUGE_NAME_PREFIX + bsd.getSymbolicName(), (Gauge<Long>) () -> bsd.getStartedAfter().toMillis()));
+            .forEach( bsd -> register(BUNDLE_STARTUP_GAUGE_NAME_PREFIX + bsd.getSymbolicName(), (Gauge<Long>) () -> bsd.getStartedAfter().toMillis()));
         event.getServiceRestarts().stream()
             .filter( src -> src.getServiceRestarts() >= serviceRestartThreshold )
-            .forEach( src -> registry.register(SERVICE_RESTART_GAUGE_NAME_PREFIX + src.getServiceIdentifier(), (Gauge<Integer>) src::getServiceRestarts) );
+            .forEach( src -> register(SERVICE_RESTART_GAUGE_NAME_PREFIX + src.getServiceIdentifier(), (Gauge<Integer>) src::getServiceRestarts) );
+    }
+    
+    private void register(String name, Metric metric) {
+        registry.register(name, metric);
+        registeredMetricNames.add(name);
     }
 }