Reverse the order of tracing and metrics handlers

Closes gh-32463

Co-authored-by: Jonatan Ivanov <jonatan.ivanov@gmail.com>
This commit is contained in:
Andy Wilkinson 2022-09-21 11:34:23 +01:00
parent 78a64d7f61
commit b084019d34
2 changed files with 19 additions and 20 deletions

View File

@ -30,11 +30,10 @@ import io.micrometer.tracing.handler.TracingObservationHandler;
* {@link ObservationHandlerGrouping} used by {@link ObservationAutoConfiguration} if * {@link ObservationHandlerGrouping} used by {@link ObservationAutoConfiguration} if
* micrometer-tracing is on the classpath. * micrometer-tracing is on the classpath.
* *
* Groups all {@link MeterObservationHandler} into a * Groups all {@link TracingObservationHandler} into a
* {@link FirstMatchingCompositeObservationHandler}, and all * {@link FirstMatchingCompositeObservationHandler}, and {@link MeterObservationHandler}
* {@link TracingObservationHandler} into a * into a {@link FirstMatchingCompositeObservationHandler}. All other handlers are added
* {@link FirstMatchingCompositeObservationHandler}. All other handlers are added to the * to the {@link ObservationConfig} directly.
* {@link ObservationConfig} directly.
* *
* @author Moritz Halbritter * @author Moritz Halbritter
*/ */
@ -45,22 +44,22 @@ class TracingObservationHandlerGrouping implements ObservationHandlerGrouping {
List<ObservationHandler<?>> meterObservationHandlers = new ArrayList<>(); List<ObservationHandler<?>> meterObservationHandlers = new ArrayList<>();
List<ObservationHandler<?>> tracingObservationHandlers = new ArrayList<>(); List<ObservationHandler<?>> tracingObservationHandlers = new ArrayList<>();
for (ObservationHandler<?> handler : handlers) { for (ObservationHandler<?> handler : handlers) {
if (handler instanceof MeterObservationHandler<?>) { if (handler instanceof TracingObservationHandler<?>) {
meterObservationHandlers.add(handler);
}
else if (handler instanceof TracingObservationHandler<?>) {
tracingObservationHandlers.add(handler); tracingObservationHandlers.add(handler);
} }
else if (handler instanceof MeterObservationHandler<?>) {
meterObservationHandlers.add(handler);
}
else { else {
config.observationHandler(handler); config.observationHandler(handler);
} }
} }
if (!meterObservationHandlers.isEmpty()) {
config.observationHandler(new FirstMatchingCompositeObservationHandler(meterObservationHandlers));
}
if (!tracingObservationHandlers.isEmpty()) { if (!tracingObservationHandlers.isEmpty()) {
config.observationHandler(new FirstMatchingCompositeObservationHandler(tracingObservationHandlers)); config.observationHandler(new FirstMatchingCompositeObservationHandler(tracingObservationHandlers));
} }
if (!meterObservationHandlers.isEmpty()) {
config.observationHandler(new FirstMatchingCompositeObservationHandler(meterObservationHandlers));
}
} }
} }

View File

@ -144,18 +144,18 @@ class ObservationAutoConfigurationTests {
assertThat(handlers).hasSize(3); assertThat(handlers).hasSize(3);
// Regular handlers are registered first // Regular handlers are registered first
assertThat(handlers.get(0)).isInstanceOf(CustomObservationHandler.class); assertThat(handlers.get(0)).isInstanceOf(CustomObservationHandler.class);
// Multiple MeterObservationHandler are wrapped in
// FirstMatchingCompositeObservationHandler, which calls only the first
// one
assertThat(handlers.get(1)).isInstanceOf(CustomMeterObservationHandler.class);
assertThat(((CustomMeterObservationHandler) handlers.get(1)).getName())
.isEqualTo("customMeterObservationHandler1");
// Multiple TracingObservationHandler are wrapped in // Multiple TracingObservationHandler are wrapped in
// FirstMatchingCompositeObservationHandler, which calls only the first // FirstMatchingCompositeObservationHandler, which calls only the first
// one // one
assertThat(handlers.get(2)).isInstanceOf(CustomTracingObservationHandler.class); assertThat(handlers.get(1)).isInstanceOf(CustomTracingObservationHandler.class);
assertThat(((CustomTracingObservationHandler) handlers.get(2)).getName()) assertThat(((CustomTracingObservationHandler) handlers.get(1)).getName())
.isEqualTo("customTracingHandler1"); .isEqualTo("customTracingHandler1");
// Multiple MeterObservationHandler are wrapped in
// FirstMatchingCompositeObservationHandler, which calls only the first
// one
assertThat(handlers.get(2)).isInstanceOf(CustomMeterObservationHandler.class);
assertThat(((CustomMeterObservationHandler) handlers.get(2)).getName())
.isEqualTo("customMeterObservationHandler1");
}); });
} }