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 <[email protected]>
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;