|
1 | 1 | /*
|
2 |
| - * Copyright 2012-2025 the original author or authors. |
| 2 | + * Copyright 2012-2023 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
|
20 | 20 | import io.micrometer.core.instrument.config.MeterFilter;
|
21 | 21 | import io.micrometer.observation.Observation;
|
22 | 22 | import io.micrometer.observation.ObservationRegistry;
|
| 23 | +import jakarta.servlet.DispatcherType; |
23 | 24 |
|
| 25 | +import org.springframework.beans.factory.ObjectProvider; |
24 | 26 | import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
|
25 | 27 | import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
|
26 | 28 | import org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties;
|
|
33 | 35 | import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
34 | 36 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
35 | 37 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
| 38 | +import org.springframework.boot.autoconfigure.web.servlet.ConditionalOnMissingFilterBean; |
36 | 39 | import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
| 40 | +import org.springframework.boot.web.servlet.FilterRegistrationBean; |
37 | 41 | import org.springframework.context.annotation.Bean;
|
38 | 42 | import org.springframework.context.annotation.Configuration;
|
39 |
| -import org.springframework.context.annotation.Import; |
| 43 | +import org.springframework.core.Ordered; |
40 | 44 | import org.springframework.core.annotation.Order;
|
| 45 | +import org.springframework.http.server.observation.DefaultServerRequestObservationConvention; |
| 46 | +import org.springframework.http.server.observation.ServerRequestObservationConvention; |
| 47 | +import org.springframework.web.filter.ServerHttpObservationFilter; |
41 | 48 | import org.springframework.web.servlet.DispatcherServlet;
|
42 | 49 |
|
43 | 50 | /**
|
|
55 | 62 | @ConditionalOnClass({ DispatcherServlet.class, Observation.class })
|
56 | 63 | @ConditionalOnBean(ObservationRegistry.class)
|
57 | 64 | @EnableConfigurationProperties({ MetricsProperties.class, ObservationProperties.class })
|
58 |
| -@Import({ ObservationFilterConfigurations.TracingHeaderObservation.class, |
59 |
| - ObservationFilterConfigurations.DefaultObservation.class }) |
60 | 65 | public class WebMvcObservationAutoConfiguration {
|
61 | 66 |
|
| 67 | + @Bean |
| 68 | + @ConditionalOnMissingFilterBean |
| 69 | + public FilterRegistrationBean<ServerHttpObservationFilter> webMvcObservationFilter(ObservationRegistry registry, |
| 70 | + ObjectProvider<ServerRequestObservationConvention> customConvention, |
| 71 | + ObservationProperties observationProperties) { |
| 72 | + String name = observationProperties.getHttp().getServer().getRequests().getName(); |
| 73 | + ServerRequestObservationConvention convention = customConvention |
| 74 | + .getIfAvailable(() -> new DefaultServerRequestObservationConvention(name)); |
| 75 | + ServerHttpObservationFilter filter = new ServerHttpObservationFilter(registry, convention); |
| 76 | + FilterRegistrationBean<ServerHttpObservationFilter> registration = new FilterRegistrationBean<>(filter); |
| 77 | + registration.setOrder(Ordered.HIGHEST_PRECEDENCE + 1); |
| 78 | + registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC); |
| 79 | + return registration; |
| 80 | + } |
| 81 | + |
62 | 82 | @Configuration(proxyBeanMethods = false)
|
63 | 83 | @ConditionalOnClass(MeterRegistry.class)
|
64 | 84 | @ConditionalOnBean(MeterRegistry.class)
|
|
0 commit comments