diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProvider.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProvider.java new file mode 100644 index 000000000..67d97c883 --- /dev/null +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProvider.java @@ -0,0 +1,23 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed 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.springframework.cloud.sleuth.instrument.web; + +import java.util.regex.Pattern; + +interface SkipPatternProvider { + Pattern skipPattern(); +} \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java index 5c0385039..5c404a134 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java @@ -119,8 +119,8 @@ public class TraceFilter extends GenericFilterBean { private static Pattern skipPattern(BeanFactory beanFactory) { try { - TraceWebAutoConfiguration.SkipPatternProvider patternProvider = beanFactory - .getBean(TraceWebAutoConfiguration.SkipPatternProvider.class); + SkipPatternProvider patternProvider = beanFactory + .getBean(SkipPatternProvider.class); // the null value will not happen on production but might happen in tests if (patternProvider != null) { return patternProvider.skipPattern(); diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceHttpAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceHttpAutoConfiguration.java index 7ecd2bd28..a49b0c3a9 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceHttpAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceHttpAutoConfiguration.java @@ -17,15 +17,19 @@ package org.springframework.cloud.sleuth.instrument.web; import java.util.regex.Pattern; +import org.springframework.boot.actuate.autoconfigure.ManagementServerProperties; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.sleuth.TraceKeys; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.util.StringUtils; /** * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration Auto-configuration} @@ -48,8 +52,8 @@ public class TraceHttpAutoConfiguration { @Bean @ConditionalOnMissingBean - public HttpSpanExtractor httpSpanExtractor(SleuthWebProperties sleuthWebProperties) { - return new ZipkinHttpSpanExtractor(Pattern.compile(sleuthWebProperties.getSkipPattern())); + public HttpSpanExtractor httpSpanExtractor(SkipPatternProvider skipPatternProvider) { + return new ZipkinHttpSpanExtractor(skipPatternProvider.skipPattern()); } @Bean @@ -57,4 +61,74 @@ public class TraceHttpAutoConfiguration { public HttpSpanInjector httpSpanInjector() { return new ZipkinHttpSpanInjector(); } + + @Configuration + @ConditionalOnClass(ManagementServerProperties.class) + @ConditionalOnMissingBean(SkipPatternProvider.class) + @EnableConfigurationProperties(SleuthWebProperties.class) + protected static class SkipPatternProviderConfig { + + @Bean + @ConditionalOnBean(ManagementServerProperties.class) + public SkipPatternProvider skipPatternForManagementServerProperties( + final ManagementServerProperties managementServerProperties, + final SleuthWebProperties sleuthWebProperties) { + return new SkipPatternProvider() { + @Override + public Pattern skipPattern() { + return getPatternForManagementServerProperties( + managementServerProperties, + sleuthWebProperties); + } + }; + } + + /** + * Sets or appends {@link ManagementServerProperties#getContextPath()} to the skip + * pattern. If neither is available then sets the default one + */ + static Pattern getPatternForManagementServerProperties( + ManagementServerProperties managementServerProperties, + SleuthWebProperties sleuthWebProperties) { + String skipPattern = sleuthWebProperties.getSkipPattern(); + if (StringUtils.hasText(skipPattern) + && StringUtils.hasText(managementServerProperties.getContextPath())) { + return Pattern.compile(skipPattern + "|" + + managementServerProperties.getContextPath() + ".*"); + } + else if (StringUtils.hasText(managementServerProperties.getContextPath())) { + return Pattern + .compile(managementServerProperties.getContextPath() + ".*"); + } + return defaultSkipPattern(skipPattern); + } + + @Bean + @ConditionalOnMissingBean(ManagementServerProperties.class) + public SkipPatternProvider defaultSkipPatternBeanIfManagementServerPropsArePresent(SleuthWebProperties sleuthWebProperties) { + return defaultSkipPatternProvider(sleuthWebProperties.getSkipPattern()); + } + } + + @Bean + @ConditionalOnMissingClass("org.springframework.boot.actuate.autoconfigure.ManagementServerProperties") + @ConditionalOnMissingBean(SkipPatternProvider.class) + public SkipPatternProvider defaultSkipPatternBean(SleuthWebProperties sleuthWebProperties) { + return defaultSkipPatternProvider(sleuthWebProperties.getSkipPattern()); + } + + private static SkipPatternProvider defaultSkipPatternProvider( + final String skipPattern) { + return new SkipPatternProvider() { + @Override + public Pattern skipPattern() { + return defaultSkipPattern(skipPattern); + } + }; + } + + private static Pattern defaultSkipPattern(String skipPattern) { + return StringUtils.hasText(skipPattern) ? Pattern.compile(skipPattern) + : Pattern.compile(SleuthWebProperties.DEFAULT_SKIP_PATTERN); + } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java index 267e5e3c4..8d5748152 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAutoConfiguration.java @@ -15,18 +15,13 @@ */ package org.springframework.cloud.sleuth.instrument.web; -import java.util.regex.Pattern; - import org.springframework.beans.factory.BeanFactory; -import org.springframework.boot.actuate.autoconfigure.ManagementServerProperties; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.cloud.sleuth.ErrorParser; import org.springframework.cloud.sleuth.SpanNamer; @@ -35,7 +30,6 @@ import org.springframework.cloud.sleuth.Tracer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.util.StringUtils; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import static javax.servlet.DispatcherType.ASYNC; @@ -101,77 +95,4 @@ public class TraceWebAutoConfiguration { return new TraceFilter(beanFactory, skipPatternProvider.skipPattern()); } - @Configuration - @ConditionalOnClass(ManagementServerProperties.class) - @ConditionalOnMissingBean(SkipPatternProvider.class) - @EnableConfigurationProperties(SleuthWebProperties.class) - protected static class SkipPatternProviderConfig { - - @Bean - @ConditionalOnBean(ManagementServerProperties.class) - public SkipPatternProvider skipPatternForManagementServerProperties( - final ManagementServerProperties managementServerProperties, - final SleuthWebProperties sleuthWebProperties) { - return new SkipPatternProvider() { - @Override - public Pattern skipPattern() { - return getPatternForManagementServerProperties( - managementServerProperties, - sleuthWebProperties); - } - }; - } - - /** - * Sets or appends {@link ManagementServerProperties#getContextPath()} to the skip - * pattern. If neither is available then sets the default one - */ - static Pattern getPatternForManagementServerProperties( - ManagementServerProperties managementServerProperties, - SleuthWebProperties sleuthWebProperties) { - String skipPattern = sleuthWebProperties.getSkipPattern(); - if (StringUtils.hasText(skipPattern) - && StringUtils.hasText(managementServerProperties.getContextPath())) { - return Pattern.compile(skipPattern + "|" - + managementServerProperties.getContextPath() + ".*"); - } - else if (StringUtils.hasText(managementServerProperties.getContextPath())) { - return Pattern - .compile(managementServerProperties.getContextPath() + ".*"); - } - return defaultSkipPattern(skipPattern); - } - - @Bean - @ConditionalOnMissingBean(ManagementServerProperties.class) - public SkipPatternProvider defaultSkipPatternBeanIfManagementServerPropsArePresent(SleuthWebProperties sleuthWebProperties) { - return defaultSkipPatternProvider(sleuthWebProperties.getSkipPattern()); - } - } - - @Bean - @ConditionalOnMissingClass("org.springframework.boot.actuate.autoconfigure.ManagementServerProperties") - @ConditionalOnMissingBean(SkipPatternProvider.class) - public SkipPatternProvider defaultSkipPatternBean(SleuthWebProperties sleuthWebProperties) { - return defaultSkipPatternProvider(sleuthWebProperties.getSkipPattern()); - } - - private static SkipPatternProvider defaultSkipPatternProvider( - final String skipPattern) { - return new SkipPatternProvider() { - @Override - public Pattern skipPattern() { - return defaultSkipPattern(skipPattern); - } - }; - } - - private static Pattern defaultSkipPattern(String skipPattern) { - return StringUtils.hasText(skipPattern) ? Pattern.compile(skipPattern) - : Pattern.compile(SleuthWebProperties.DEFAULT_SKIP_PATTERN); - } - - interface SkipPatternProvider { - Pattern skipPattern(); - } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/ZipkinHttpSpanExtractor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/ZipkinHttpSpanExtractor.java index 19512f78d..0af116726 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/ZipkinHttpSpanExtractor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/ZipkinHttpSpanExtractor.java @@ -36,7 +36,6 @@ public class ZipkinHttpSpanExtractor implements HttpSpanExtractor { @Override public Span joinTrace(SpanTextMap textMap) { Map carrier = SPAN_CARRIER_MAPPER.convert(textMap); - boolean debug = Span.SPAN_SAMPLED.equals(carrier.get(Span.SPAN_FLAGS)); boolean idToBeGenerated = debug && onlySpanIdIsPresent(carrier); // we're only generating Trace ID since if there's no Span ID will assume diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java index cf113b2f9..f6b167584 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java @@ -20,7 +20,7 @@ import java.util.regex.Pattern; import org.junit.Test; import org.springframework.boot.actuate.autoconfigure.ManagementServerProperties; -import org.springframework.cloud.sleuth.instrument.web.TraceWebAutoConfiguration.SkipPatternProviderConfig; +import org.springframework.cloud.sleuth.instrument.web.TraceHttpAutoConfiguration.SkipPatternProviderConfig; import static org.assertj.core.api.BDDAssertions.then; diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java index 85e3fcd81..7dc01b6c8 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterAlwaysSamplerIntegrationTests.java @@ -70,7 +70,7 @@ public class TraceFilterAlwaysSamplerIntegrationTests extends AbstractMvcIntegra private BeanFactory beanFactory() { BeanFactory beanFactory = Mockito.mock(BeanFactory.class); - BDDMockito.given(beanFactory.getBean(TraceWebAutoConfiguration.SkipPatternProvider.class)) + BDDMockito.given(beanFactory.getBean(SkipPatternProvider.class)) .willThrow(new NoSuchBeanDefinitionException("foo")); BDDMockito.given(beanFactory.getBean(SleuthProperties.class)).willReturn(this.properties); BDDMockito.given(beanFactory.getBean(Tracer.class)).willReturn(this.tracer); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java index 82f594797..4b716c92a 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java @@ -561,7 +561,7 @@ public class TraceFilterTests { } private BeanFactory beanFactory() { - BDDMockito.given(beanFactory.getBean(TraceWebAutoConfiguration.SkipPatternProvider.class)) + BDDMockito.given(beanFactory.getBean(SkipPatternProvider.class)) .willThrow(new NoSuchBeanDefinitionException("foo")); BDDMockito.given(beanFactory.getBean(SleuthProperties.class)).willReturn(this.properties); BDDMockito.given(beanFactory.getBean(Tracer.class)).willReturn(this.tracer);