diff --git a/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegisterConfigurationBuilder.java b/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegisterConfigurationBuilder.java new file mode 100644 index 000000000000..4257f9b3a60b --- /dev/null +++ b/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegisterConfigurationBuilder.java @@ -0,0 +1,70 @@ +package org.infinispan.metrics.config; + +import java.util.Objects; + +import org.infinispan.commons.configuration.Builder; +import org.infinispan.configuration.global.GlobalConfigurationBuilder; + +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.prometheus.PrometheusMeterRegistry; + +/** + * Builder to inject an instance of {@link MeterRegistry}. + *
+ * If not configured, Infinispan will create a new instance of {@link PrometheusMeterRegistry}.
+ *
+ * @since 15.0
+ */
+public class MicrometerMeterRegisterConfigurationBuilder implements Builder
+ * If set to {@code null}, Infinispan will create a new instance of {@link PrometheusMeterRegistry}.
+ *
+ * @param registry The {@link MeterRegistry} to use or {@code null}.
+ */
+ public MicrometerMeterRegisterConfigurationBuilder meterRegistry(MeterRegistry registry) {
+ meterRegistry = registry;
+ return this;
+ }
+
+ @Override
+ public MicrometerMeterRegistryConfiguration create() {
+ return new MicrometerMeterRegistryConfiguration(meterRegistry);
+ }
+
+ @Override
+ public MicrometerMeterRegisterConfigurationBuilder read(MicrometerMeterRegistryConfiguration template) {
+ meterRegistry(template.meterRegistry());
+ return this;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof MicrometerMeterRegisterConfigurationBuilder)) return false;
+
+ MicrometerMeterRegisterConfigurationBuilder that = (MicrometerMeterRegisterConfigurationBuilder) o;
+
+ return Objects.equals(meterRegistry, that.meterRegistry);
+ }
+
+ @Override
+ public int hashCode() {
+ return meterRegistry != null ? meterRegistry.hashCode() : 0;
+ }
+
+ @Override
+ public String toString() {
+ return "MicrometerMeterRegisterConfigurationBuilder{" +
+ "meterRegistry=" + meterRegistry +
+ '}';
+ }
+}
diff --git a/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegistryConfiguration.java b/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegistryConfiguration.java
new file mode 100644
index 000000000000..0e61e129705c
--- /dev/null
+++ b/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegistryConfiguration.java
@@ -0,0 +1,51 @@
+package org.infinispan.metrics.config;
+
+import java.util.Objects;
+
+import org.infinispan.configuration.serializing.SerializedWith;
+
+import io.micrometer.core.instrument.MeterRegistry;
+
+/**
+ * A configuration class to inject a custom {@link MeterRegistry} instance.
+ *
+ * @since 15.0
+ */
+@SerializedWith(MicrometerMeterRegistryConfigurationSerializer.class)
+public class MicrometerMeterRegistryConfiguration {
+
+ private final MeterRegistry registry;
+
+ public MicrometerMeterRegistryConfiguration(MeterRegistry registry) {
+ this.registry = registry;
+ }
+
+ /**
+ * @return The {@link MeterRegistry} instance injected or {@code null} if not configured.
+ */
+ public MeterRegistry meterRegistry() {
+ return registry;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof MicrometerMeterRegistryConfiguration)) return false;
+
+ MicrometerMeterRegistryConfiguration that = (MicrometerMeterRegistryConfiguration) o;
+
+ return Objects.equals(registry, that.registry);
+ }
+
+ @Override
+ public int hashCode() {
+ return registry != null ? registry.hashCode() : 0;
+ }
+
+ @Override
+ public String toString() {
+ return "MicrometerMeterRegistryConfiguration{" +
+ "registry=" + registry +
+ '}';
+ }
+}
diff --git a/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegistryConfigurationSerializer.java b/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegistryConfigurationSerializer.java
new file mode 100644
index 000000000000..a5e11c80d77e
--- /dev/null
+++ b/core/src/main/java/org/infinispan/metrics/config/MicrometerMeterRegistryConfigurationSerializer.java
@@ -0,0 +1,18 @@
+package org.infinispan.metrics.config;
+
+import org.infinispan.commons.configuration.io.ConfigurationWriter;
+import org.infinispan.configuration.serializing.ConfigurationSerializer;
+
+/**
+ * A {@link ConfigurationSerializer} implementation to serialize {@link MicrometerMeterRegistryConfiguration}.
+ *
+ * This class is a no-op.
+ *
+ * @since 15.0
+ */
+public class MicrometerMeterRegistryConfigurationSerializer implements ConfigurationSerializer