You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2019/09/20 10:20:13 UTC

[camel] branch master updated: CAMEL-13982: Handle gauge metrics not being reusable

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

jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new f076af5  CAMEL-13982: Handle gauge metrics not being reusable
f076af5 is described below

commit f076af570e623360e7c067fb7a973f27e4bb6373
Author: James Netherton <ja...@gmail.com>
AuthorDate: Fri Sep 20 11:19:29 2019 +0100

    CAMEL-13982: Handle gauge metrics not being reusable
---
 .../metrics/MicroProfileMetricsGaugeProducer.java             | 10 +++++++++-
 .../microprofile/metrics/MicroProfileMetricsGaugeTest.java    | 11 +++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeProducer.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeProducer.java
index be02e38..7a1373d 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeProducer.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeProducer.java
@@ -26,6 +26,7 @@ import org.eclipse.microprofile.metrics.Metadata;
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Tag;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_GAUGE_VALUE;
+import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsHelper.findMetric;
 
 public class MicroProfileMetricsGaugeProducer extends AbstractMicroProfileMetricsProducer<SimpleGauge> {
 
@@ -45,6 +46,13 @@ public class MicroProfileMetricsGaugeProducer extends AbstractMicroProfileMetric
 
     @Override
     protected Function<MetricRegistry, SimpleGauge> registerMetric(Metadata metadata, List<Tag> tags) {
-        return metricRegistry -> metricRegistry.register(metadata, new SimpleGauge(), tags.toArray(new Tag[0]));
+        return metricRegistry -> {
+            Tag[] tagArray = tags.toArray(new Tag[0]);
+            SimpleGauge existing = findMetric(metricRegistry, metadata.getName(), SimpleGauge.class, tags);
+            if (existing == null) {
+                return metricRegistry.register(metadata, new SimpleGauge(), tagArray);
+            }
+            return existing;
+        };
     }
 }
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeTest.java
index ceffd8d..cdc4835 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeTest.java
@@ -45,6 +45,17 @@ public class MicroProfileMetricsGaugeTest extends MicroProfileMetricsTestSupport
         assertEquals(20, gauge.getValue().intValue());
     }
 
+    @Test
+    public void testGaugeMetricReuse() {
+        template.sendBody("direct:gaugeValue", null);
+        SimpleGauge gauge = getSimpleGauge("test-gauge");
+        assertEquals(10, gauge.getValue().intValue());
+
+        template.sendBodyAndHeader("direct:gaugeValue", null, HEADER_GAUGE_VALUE, 20);
+        gauge = getSimpleGauge("test-gauge");
+        assertEquals(20, gauge.getValue().intValue());
+    }
+
     @Override
     protected RoutesBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {