You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by jo...@apache.org on 2022/08/08 11:45:12 UTC

[sling-org-apache-sling-commons-metrics] branch master updated: SLING-11502 expose a method to unregister a metric (#7)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 72f00e5  SLING-11502 expose a method to unregister a metric (#7)
72f00e5 is described below

commit 72f00e5afb48452a32e78fea6695322370b2e930
Author: Jörg Hoh <jo...@users.noreply.github.com>
AuthorDate: Mon Aug 8 13:45:09 2022 +0200

    SLING-11502 expose a method to unregister a metric (#7)
---
 .../org/apache/sling/commons/metrics/MetricsService.java   | 14 ++++++++++++++
 .../commons/metrics/internal/BundleMetricsMapper.java      |  3 ++-
 .../metrics/internal/InternalMetricsServiceFactory.java    |  5 +++++
 .../sling/commons/metrics/internal/MetricsServiceImpl.java |  6 ++++++
 .../org/apache/sling/commons/metrics/package-info.java     |  2 +-
 .../sling/commons/metrics/internal/MetricServiceTest.java  | 12 ++++++++++++
 6 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/commons/metrics/MetricsService.java b/src/main/java/org/apache/sling/commons/metrics/MetricsService.java
index f737e86..60f69e3 100644
--- a/src/main/java/org/apache/sling/commons/metrics/MetricsService.java
+++ b/src/main/java/org/apache/sling/commons/metrics/MetricsService.java
@@ -63,6 +63,11 @@ public interface MetricsService {
         public <T> Gauge<T> gauge(String name, Supplier<T> supplier) {
             return null;
         }
+
+        @Override
+        public boolean unregister(String name) {
+            return false;
+        }
     };
 
     /**
@@ -121,5 +126,14 @@ public interface MetricsService {
      * or null if this metric cannot be adapted to the specified type.
      */
     <A> A adaptTo(Class<A> type);
+    
+    
+    /**
+     * Unregister a metric by its name
+     * @param name the name of the metric
+     * @return true if the metric was correctly unregistered, false otherwise.
+     */
+    public boolean unregister (String name);
+    
 
 }
diff --git a/src/main/java/org/apache/sling/commons/metrics/internal/BundleMetricsMapper.java b/src/main/java/org/apache/sling/commons/metrics/internal/BundleMetricsMapper.java
index f19bc8d..c10d344 100644
--- a/src/main/java/org/apache/sling/commons/metrics/internal/BundleMetricsMapper.java
+++ b/src/main/java/org/apache/sling/commons/metrics/internal/BundleMetricsMapper.java
@@ -51,13 +51,14 @@ class BundleMetricsMapper implements ObjectNameFactory{
         metricToBundleMapping.putIfAbsent(name, bundle);
     }
 
-    public void unregister(Set<String> registeredNames) {
+    public boolean unregister(Set<String> registeredNames) {
         for (String name : registeredNames){
             registry.remove(name);
             metricToBundleMapping.remove(name);
             metricsService.remove(name);
         }
         log.debug("Removed metrics for {}", registeredNames);
+        return true;
     }
 
     @Override
diff --git a/src/main/java/org/apache/sling/commons/metrics/internal/InternalMetricsServiceFactory.java b/src/main/java/org/apache/sling/commons/metrics/internal/InternalMetricsServiceFactory.java
index 5411df8..7056931 100644
--- a/src/main/java/org/apache/sling/commons/metrics/internal/InternalMetricsServiceFactory.java
+++ b/src/main/java/org/apache/sling/commons/metrics/internal/InternalMetricsServiceFactory.java
@@ -107,5 +107,10 @@ class InternalMetricsServiceFactory implements ServiceFactory<MetricsService> {
             return delegate.gauge(name, supplier);
         }
 
+        @Override
+        public boolean unregister(String name) {
+            return metricsMapper.unregister(Collections.singleton(name));
+        }
+
     }
 }
diff --git a/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java b/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
index e9c00ed..4387394 100644
--- a/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
+++ b/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
@@ -137,6 +137,12 @@ public class MetricsServiceImpl implements MetricsService {
         }
         return null;
     }
+    
+    @Override
+    public boolean unregister (String name) {
+        return registry.remove(name);
+    }
+    
 
     void remove(String name) {
         metrics.remove(name);
diff --git a/src/main/java/org/apache/sling/commons/metrics/package-info.java b/src/main/java/org/apache/sling/commons/metrics/package-info.java
index 13586eb..3fa3d08 100644
--- a/src/main/java/org/apache/sling/commons/metrics/package-info.java
+++ b/src/main/java/org/apache/sling/commons/metrics/package-info.java
@@ -22,7 +22,7 @@
  *
  * @version 1.0
  */
-@Version("1.3.0")
+@Version("1.4.0")
 package org.apache.sling.commons.metrics;
 
 
diff --git a/src/test/java/org/apache/sling/commons/metrics/internal/MetricServiceTest.java b/src/test/java/org/apache/sling/commons/metrics/internal/MetricServiceTest.java
index 12a44c8..c031e1d 100644
--- a/src/test/java/org/apache/sling/commons/metrics/internal/MetricServiceTest.java
+++ b/src/test/java/org/apache/sling/commons/metrics/internal/MetricServiceTest.java
@@ -176,6 +176,18 @@ public class MetricServiceTest {
         reg.unregister();
         assertFalse(getRegistry().getGauges().containsKey("foo"));
     }
+    
+    
+    @Test
+    public void unregisterMetric() {
+        activate();
+        Gauge<Long> gauge = service.gauge("gauge",() -> 42L);
+        assertNotNull(gauge);
+        assertTrue(getRegistry().getGauges().containsKey("gauge"));
+        service.unregister("gauge");
+        assertFalse(getRegistry().getGauges().containsKey("gauge"));
+    }
+    
 
     private MetricRegistry getRegistry(){
         return context.getService(MetricRegistry.class);