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 <[email protected]>
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);
     }
 }

Reply via email to