SLING-11502 expose a method to unregister a metric
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 <T> Gauge<T> gauge(String name, Supplier<T> supplier) {
return null;
}
+
+ @Override
+ public boolean unregister(String name) {
+ return false;
+ }
};
/**
@@ -121,5 +126,14 @@
* 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 @@
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 @@
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 @@
}
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 @@
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);