This is an automated email from the ASF dual-hosted git repository. joerghoh pushed a commit to branch SLING-11502 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-metrics.git
commit 027a4bbc98be4744c01e164250145c75db57698d Author: Joerg Hoh <[email protected]> AuthorDate: Fri Aug 5 18:29:06 2022 +0200 SLING-11502 expose a method to unregister a metric --- .../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 b412e50..5c238e0 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);
