You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/03/13 06:31:18 UTC

[camel] branch camel-3.x updated: Favor CompositeMeterRegistry instances in Camel registry before looking for MeterRegistry instances. (#9513)

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

davsclaus pushed a commit to branch camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.x by this push:
     new 6e51d8c6879 Favor CompositeMeterRegistry instances in Camel registry before looking for MeterRegistry instances. (#9513)
6e51d8c6879 is described below

commit 6e51d8c6879b0f1d79606a3c86230548d490c2a1
Author: Adriano Machado <60...@users.noreply.github.com>
AuthorDate: Mon Mar 13 02:31:11 2023 -0400

    Favor CompositeMeterRegistry instances in Camel registry before looking for MeterRegistry instances. (#9513)
    
    Co-authored-by: Adriano Machado <ad...@redhat.com>
---
 .../component/micrometer/MicrometerUtils.java      | 27 ++++++++---
 .../micrometer/MicrometerComponentTest.java        | 53 +++++++++++++++++++++-
 2 files changed, 72 insertions(+), 8 deletions(-)

diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerUtils.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerUtils.java
index 84c62179918..3a43725818b 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerUtils.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerUtils.java
@@ -20,6 +20,7 @@ import java.util.Set;
 
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Registry;
@@ -74,19 +75,31 @@ public final class MicrometerUtils {
     }
 
     public static MeterRegistry getMeterRegistryFromCamelRegistry(Registry camelRegistry, String registryName) {
-        MeterRegistry registry = camelRegistry.lookupByNameAndType(registryName, MeterRegistry.class);
+        MeterRegistry registry = getMeterRegistryFromCamelRegistry(camelRegistry, registryName,
+                CompositeMeterRegistry.class);
         if (registry != null) {
             return registry;
-        } else {
-            Set<MeterRegistry> registries = camelRegistry.findByType(MeterRegistry.class);
-            if (registries.size() == 1) {
-                return registries.iterator().next();
-            }
         }
-        return null;
+
+        return getMeterRegistryFromCamelRegistry(camelRegistry, registryName, MeterRegistry.class);
     }
 
     public static MeterRegistry createMeterRegistry() {
         return new SimpleMeterRegistry();
     }
+
+    private static MeterRegistry getMeterRegistryFromCamelRegistry(
+            Registry camelRegistry, String registryName,
+            Class<? extends MeterRegistry> registryType) {
+        MeterRegistry registry = camelRegistry.lookupByNameAndType(registryName, registryType);
+        if (registry != null) {
+            return registry;
+        } else {
+            Set<? extends MeterRegistry> registries = camelRegistry.findByType(registryType);
+            if (registries != null && registries.size() == 1) {
+                return registryType.cast(registries.iterator().next());
+            }
+        }
+        return null;
+    }
 }
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
index db3a7f5003c..e26f78d0621 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
@@ -21,6 +21,8 @@ import java.util.Collections;
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tags;
+import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
+import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.RuntimeCamelException;
@@ -37,6 +39,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.isA;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.Mockito.times;
@@ -57,6 +60,9 @@ public class MicrometerComponentTest {
     @Mock
     private MeterRegistry metricRegistry;
 
+    @Mock
+    private CompositeMeterRegistry compositeMeterRegistry;
+
     private InOrder inOrder;
 
     private MicrometerComponent component;
@@ -110,36 +116,81 @@ public class MicrometerComponentTest {
 
     @Test
     public void testGetOrCreateMetricRegistryFoundInCamelRegistry() {
+        when(camelRegistry.lookupByNameAndType("name", CompositeMeterRegistry.class)).thenReturn(null);
+        when(camelRegistry.findByType(CompositeMeterRegistry.class)).thenReturn(null);
         when(camelRegistry.lookupByNameAndType("name", MeterRegistry.class)).thenReturn(metricRegistry);
         MeterRegistry result = MicrometerUtils.getOrCreateMeterRegistry(camelRegistry, "name");
         assertThat(result, is(metricRegistry));
+        inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", CompositeMeterRegistry.class);
+        inOrder.verify(camelRegistry, times(1)).findByType(CompositeMeterRegistry.class);
         inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", MeterRegistry.class);
         inOrder.verifyNoMoreInteractions();
     }
 
+    @Test
+    public void testGetOrCreateCompositeMetricRegistryFoundInCamelRegistry() {
+        when(camelRegistry.lookupByNameAndType("name", CompositeMeterRegistry.class))
+                .thenReturn(compositeMeterRegistry);
+        MeterRegistry result = MicrometerUtils.getOrCreateMeterRegistry(camelRegistry, "name");
+        assertThat(result, is(compositeMeterRegistry));
+        inOrder.verify(camelRegistry, times(1))
+                .lookupByNameAndType("name", CompositeMeterRegistry.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
     @Test
     public void testGetOrCreateMetricRegistryFoundInCamelRegistryByType() {
+        when(camelRegistry.lookupByNameAndType("name", CompositeMeterRegistry.class)).thenReturn(null);
+        when(camelRegistry.findByType(CompositeMeterRegistry.class)).thenReturn(Collections.singleton(null));
         when(camelRegistry.lookupByNameAndType("name", MeterRegistry.class)).thenReturn(null);
         when(camelRegistry.findByType(MeterRegistry.class)).thenReturn(Collections.singleton(metricRegistry));
         MeterRegistry result = MicrometerUtils.getOrCreateMeterRegistry(camelRegistry, "name");
         assertThat(result, is(metricRegistry));
+        inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", CompositeMeterRegistry.class);
+        inOrder.verify(camelRegistry, times(1)).findByType(CompositeMeterRegistry.class);
         inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", MeterRegistry.class);
         inOrder.verify(camelRegistry, times(1)).findByType(MeterRegistry.class);
         inOrder.verifyNoMoreInteractions();
     }
 
+    @Test
+    public void testGetOrCreateCompositeMetricRegistryFoundInCamelRegistryByType() {
+        when(camelRegistry.lookupByNameAndType("name", CompositeMeterRegistry.class)).thenReturn(null);
+        when(camelRegistry.findByType(CompositeMeterRegistry.class))
+                .thenReturn(Collections.singleton(compositeMeterRegistry));
+        MeterRegistry result = MicrometerUtils.getOrCreateMeterRegistry(camelRegistry, "name");
+        assertThat(result, is(compositeMeterRegistry));
+        inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", CompositeMeterRegistry.class);
+        inOrder.verify(camelRegistry, times(1)).findByType(CompositeMeterRegistry.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
     @Test
     public void testGetMetricRegistryFromCamelRegistry() {
+        when(camelRegistry.lookupByNameAndType("name", CompositeMeterRegistry.class)).thenReturn(null);
+        when(camelRegistry.findByType(CompositeMeterRegistry.class)).thenReturn(null);
         when(camelRegistry.lookupByNameAndType("name", MeterRegistry.class)).thenReturn(metricRegistry);
         MeterRegistry result = MicrometerUtils.getMeterRegistryFromCamelRegistry(camelRegistry, "name");
         assertThat(result, is(metricRegistry));
+        inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", CompositeMeterRegistry.class);
+        inOrder.verify(camelRegistry, times(1)).findByType(CompositeMeterRegistry.class);
         inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", MeterRegistry.class);
         inOrder.verifyNoMoreInteractions();
     }
 
+    @Test
+    public void testGetCompositeMetricRegistryFromCamelRegistry() {
+        when(camelRegistry.lookupByNameAndType("name", CompositeMeterRegistry.class))
+                .thenReturn(compositeMeterRegistry);
+        MeterRegistry result = MicrometerUtils.getMeterRegistryFromCamelRegistry(camelRegistry, "name");
+        assertThat(result, is(compositeMeterRegistry));
+        inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", CompositeMeterRegistry.class);
+        inOrder.verifyNoMoreInteractions();
+    }
+
     @Test
     public void testCreateMetricRegistry() {
         MeterRegistry registry = MicrometerUtils.createMeterRegistry();
-        assertThat(registry, is(notNullValue()));
+        assertThat(registry, isA(SimpleMeterRegistry.class));
     }
 }