diff --git a/spring-modulith-observability/pom.xml b/spring-modulith-observability/pom.xml index 90d3d9b1..b78cf6ba 100644 --- a/spring-modulith-observability/pom.xml +++ b/spring-modulith-observability/pom.xml @@ -77,6 +77,12 @@ true + + io.micrometer + micrometer-core + true + + io.zipkin.brave brave diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/DefaultModulithObservationConvention.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/DefaultModulithObservationConvention.java index e92e7df0..d42bb4b5 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/DefaultModulithObservationConvention.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/DefaultModulithObservationConvention.java @@ -11,7 +11,7 @@ import org.springframework.modulith.observability.ModulithObservations.LowKeys; * Default implementation of {@link ModulithObservationConvention}. * * @author Marcin Grzejszczak - * @since 1.3 + * @since 1.4 */ public class DefaultModulithObservationConvention implements ModulithObservationConvention { diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEntryInterceptor.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEntryInterceptor.java index d93086c6..f5462a8e 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEntryInterceptor.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEntryInterceptor.java @@ -70,9 +70,10 @@ class ModuleEntryInterceptor implements MethodInterceptor { ModulithObservationConvention custom, Environment environment) { Assert.notNull(module, "ObservedModule must not be null!"); - Assert.notNull(observationRegistry, "Tracer must not be null!"); + Assert.notNull(observationRegistry, "ObservationRegistry must not be null!"); - this.module = module; this.observationRegistry = observationRegistry; + this.module = module; + this.observationRegistry = observationRegistry; this.customModulithObservationConvention = custom; this.environment = environment; } @@ -115,7 +116,6 @@ class ModuleEntryInterceptor implements MethodInterceptor { LOGGER.trace("Entering {} via {}.", module.getDisplayName(), invokedMethod); - // TODO: Good name for metrics ModulithContext modulithContext = new ModulithContext(module, invocation, environment); var observation = Observation.createNotStarted(customModulithObservationConvention, DEFAULT, () -> modulithContext, observationRegistry); diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEventListener.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEventListener.java index a51ab7e0..bb3117ac 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEventListener.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEventListener.java @@ -15,9 +15,10 @@ */ package org.springframework.modulith.observability; +import io.micrometer.core.instrument.Counter; +import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.observation.Observation.Event; import io.micrometer.observation.ObservationRegistry; -import io.micrometer.tracing.Tracer; import java.util.function.Supplier; @@ -35,20 +36,24 @@ public class ModuleEventListener implements ApplicationListener observationRegistry; + private final Supplier meterRegistry; /** - * Creates a new {@link ModuleEventListener} for the given {@link ApplicationModulesRuntime} and {@link Tracer}. + * Creates a new {@link ModuleEventListener} for the given {@link ApplicationModulesRuntime} and {@link ObservationRegistry} and {@link MeterRegistry}. * * @param runtime must not be {@literal null}. * @param observationRegistrySupplier must not be {@literal null}. */ - public ModuleEventListener(ApplicationModulesRuntime runtime, Supplier observationRegistrySupplier) { + public ModuleEventListener(ApplicationModulesRuntime runtime, Supplier observationRegistrySupplier, + Supplier meterRegistrySupplier) { Assert.notNull(runtime, "ApplicationModulesRuntime must not be null!"); - Assert.notNull(observationRegistrySupplier, "Tracer must not be null!"); + Assert.notNull(observationRegistrySupplier, "ObservationRegistry must not be null!"); + Assert.notNull(meterRegistrySupplier, "MeterRegistry must not be null!"); this.runtime = runtime; this.observationRegistry = observationRegistrySupplier; + this.meterRegistry = meterRegistrySupplier; } /* @@ -77,6 +82,14 @@ public class ModuleEventListener implements ApplicationListener { diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ObservedModule.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ObservedModule.java index 096929ac..44a99baf 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ObservedModule.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ObservedModule.java @@ -30,7 +30,7 @@ import org.springframework.modulith.core.ArchitecturallyEvidentType; * Information about observed module. * * @author Oliver Drotbohm - * @since 1.3 + * @since 1.4 */ public interface ObservedModule { @@ -90,7 +90,7 @@ public interface ObservedModule { * method invocation on a Spring bean. * * @param invocation must not be {@literal null}. - * @since 1.3 + * @since 1.4 */ boolean isEventListenerInvocation(MethodInvocation invocation); } diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ObservedModuleType.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ObservedModuleType.java index 06658cc8..6cee98a2 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ObservedModuleType.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ObservedModuleType.java @@ -35,7 +35,7 @@ import org.springframework.util.ReflectionUtils; * Represents a type in an {@link ObservedModule}. * * @author Oliver Drotbohm - * @since 1.3 + * @since 1.4 */ public class ObservedModuleType { diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/SpringDataRestModuleObservabilityBeanPostProcessor.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/SpringDataRestModuleObservabilityBeanPostProcessor.java index da7623dd..c7c8cdf4 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/SpringDataRestModuleObservabilityBeanPostProcessor.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/SpringDataRestModuleObservabilityBeanPostProcessor.java @@ -16,7 +16,6 @@ package org.springframework.modulith.observability; import io.micrometer.observation.ObservationRegistry; -import io.micrometer.tracing.Tracer; import java.util.function.Supplier; @@ -47,7 +46,7 @@ public class SpringDataRestModuleObservabilityBeanPostProcessor extends ModuleOb /** * Creates a new {@link SpringDataRestModuleObservabilityBeanPostProcessor} for the given {@link ApplicationModulesRuntime} - * and {@link Tracer}. + * and {@link ObservationRegistry}. * * @param runtime must not be {@literal null}. * @param observationRegistry must not be {@literal null}. diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java index f15f00e5..2254e43e 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java @@ -18,9 +18,9 @@ package org.springframework.modulith.observability.autoconfigure; import brave.handler.MutableSpan; import brave.handler.SpanHandler; import brave.propagation.TraceContext; +import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.observation.ObservationFilter; import io.micrometer.observation.ObservationRegistry; -import io.micrometer.tracing.Tracer; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; @@ -54,8 +54,8 @@ class ModuleObservabilityAutoConfiguration { @Bean static ModuleEventListener tracingModuleEventListener(ApplicationModulesRuntime runtime, - ObjectProvider observationRegistry) { - return new ModuleEventListener(runtime, observationRegistry::getObject); + ObjectProvider observationRegistry, ObjectProvider meterRegistry) { + return new ModuleEventListener(runtime, observationRegistry::getObject, meterRegistry::getObject); } // TODO: Have a custom thread pool for modulith