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

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


The following commit(s) were added to refs/heads/main by this push:
     new d09c2e58e8 Micrometer: SimpleMeterRegistry is not created if no other 
registry is defined #5023
d09c2e58e8 is described below

commit d09c2e58e80dd6c5807116bf998e93582ca88d98
Author: JiriOndrusek <ondrusek.j...@gmail.com>
AuthorDate: Wed Jun 28 14:49:56 2023 +0200

    Micrometer: SimpleMeterRegistry is not created if no other registry is 
defined #5023
---
 .../pages/reference/extensions/micrometer.adoc     |  2 +
 .../micrometer/deployment/MicrometerProcessor.java | 16 +++++++
 .../MicrometerSimpleMeterRegistryTest.java         | 50 ++++++++++++++++++++++
 .../micrometer/runtime/src/main/doc/usage.adoc     |  2 +
 .../micrometer/CamelMicrometerRecorder.java        |  9 ++++
 5 files changed, 79 insertions(+)

diff --git a/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc 
b/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc
index 830a2c9648..6c220fca2b 100644
--- a/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/micrometer.adoc
@@ -58,6 +58,8 @@ Your application should declare the following dependency or  
one of the dependen
 </dependency>
 ----
 
+If no dependency is declared, the Micrometer extension creates a 
SimpleMeterRegistry instance, suitable mainly for testing.
+
 
 [id="extensions-micrometer-camel-quarkus-limitations"]
 == Camel Quarkus limitations
diff --git 
a/extensions/micrometer/deployment/src/main/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerProcessor.java
 
b/extensions/micrometer/deployment/src/main/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerProcessor.java
index 2fafc76b26..1bc904c4ed 100644
--- 
a/extensions/micrometer/deployment/src/main/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerProcessor.java
+++ 
b/extensions/micrometer/deployment/src/main/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerProcessor.java
@@ -16,12 +16,16 @@
  */
 package org.apache.camel.quarkus.component.micrometer.deployment;
 
+import java.util.List;
+import java.util.Optional;
+
 import io.micrometer.core.instrument.MeterRegistry;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.annotations.ExecutionTime;
 import io.quarkus.deployment.annotations.Record;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 import io.quarkus.micrometer.deployment.MicrometerProcessor.MicrometerEnabled;
+import io.quarkus.micrometer.deployment.MicrometerRegistryProviderBuildItem;
 import io.quarkus.micrometer.deployment.RootMeterRegistryBuildItem;
 import org.apache.camel.component.micrometer.MicrometerConstants;
 import org.apache.camel.quarkus.component.micrometer.CamelMicrometerConfig;
@@ -65,4 +69,16 @@ class MicrometerProcessor {
         return new RuntimeCamelContextCustomizerBuildItem(
                 recorder.createRuntimeContextCustomizer(config, 
rootMeterRegistryBuildItem.getValue()));
     }
+
+    @Record(ExecutionTime.STATIC_INIT)
+    @BuildStep
+    void configureDefaultRegistry(
+            List<MicrometerRegistryProviderBuildItem> providers,
+            Optional<RootMeterRegistryBuildItem> registry,
+            CamelMicrometerRecorder recorder) {
+        // Register SimpleMeterRegistry to the CompositeMeterRegistry (created 
by Quarkus) if there is no MicrometerRegistryProviderBuildItem
+        if (registry.isPresent() && providers.isEmpty()) {
+            recorder.configureDefaultRegistry(registry.get().getValue());
+        }
+    }
 }
diff --git 
a/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerSimpleMeterRegistryTest.java
 
b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerSimpleMeterRegistryTest.java
new file mode 100644
index 0000000000..7647e31d11
--- /dev/null
+++ 
b/extensions/micrometer/deployment/src/test/java/org/apache/camel/quarkus/component/micrometer/deployment/MicrometerSimpleMeterRegistryTest.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.micrometer.deployment;
+
+import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
+import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
+import io.quarkus.test.QuarkusUnitTest;
+import jakarta.inject.Inject;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.micrometer.MicrometerComponent;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+
+public class MicrometerSimpleMeterRegistryTest {
+
+    @RegisterExtension
+    static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
+            .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
+    @Inject
+    CamelContext context;
+
+    @Test
+    public void testSimpleRegistryRegistration() throws Exception {
+        MicrometerComponent component = context.getComponent("micrometer", 
MicrometerComponent.class);
+        assertInstanceOf(CompositeMeterRegistry.class, 
component.getMetricsRegistry(), "CompositeMeterRegistry");
+        assertEquals(1, ((CompositeMeterRegistry) 
component.getMetricsRegistry()).getRegistries().size(), "! registry");
+        assertInstanceOf(SimpleMeterRegistry.class,
+                ((CompositeMeterRegistry) 
component.getMetricsRegistry()).getRegistries().iterator().next(),
+                "SimpleMeterRegistry");
+    }
+}
diff --git a/extensions/micrometer/runtime/src/main/doc/usage.adoc 
b/extensions/micrometer/runtime/src/main/doc/usage.adoc
index 7170250acd..e4d485e32f 100644
--- a/extensions/micrometer/runtime/src/main/doc/usage.adoc
+++ b/extensions/micrometer/runtime/src/main/doc/usage.adoc
@@ -9,3 +9,5 @@ Your application should declare the following dependency or  
one of the dependen
     <artifactId>micrometer-registry-prometheus</artifactId>
 </dependency>
 ----
+
+If no dependency is declared, the Micrometer extension creates a 
SimpleMeterRegistry instance, suitable mainly for testing.
\ No newline at end of file
diff --git 
a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java
 
b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java
index 5a736502c8..ddc5584c37 100644
--- 
a/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java
+++ 
b/extensions/micrometer/runtime/src/main/java/org/apache/camel/quarkus/component/micrometer/CamelMicrometerRecorder.java
@@ -17,9 +17,11 @@
 package org.apache.camel.quarkus.component.micrometer;
 
 import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
 import org.apache.camel.CamelContext;
+import org.apache.camel.component.micrometer.MicrometerUtils;
 import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier;
 import 
org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifier;
 import 
org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryFactory;
@@ -40,6 +42,13 @@ public class CamelMicrometerRecorder {
         return new RuntimeValue<>(new 
MicrometerRuntimeContextCustomizer(config, meterRegistry.getValue()));
     }
 
+    public void configureDefaultRegistry(RuntimeValue<MeterRegistry> 
rootMeterRegistry) {
+        // Add SimpleMeterRegistry to the Quarkus composite one
+        if (rootMeterRegistry.getValue() instanceof CompositeMeterRegistry) {
+            ((CompositeMeterRegistry) 
rootMeterRegistry.getValue()).add(MicrometerUtils.createMeterRegistry());
+        }
+    }
+
     private static class MicrometerContextCustomizer implements 
CamelContextCustomizer {
         private final CamelMicrometerConfig config;
 

Reply via email to