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/05 16:29:22 UTC
[sling-org-apache-sling-commons-metrics] 01/01: SLING-11502 expose a method to unregister a metric
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 <jo...@apache.org>
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);