This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 16db06d91ae10e60bf3288db41e0271ac658d4c4 Author: Adriano Machado <60320+ammach...@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 <admac...@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)); } }