001/* 002 * Copyright 2012-2018 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.springframework.boot.actuate.autoconfigure.trace.http; 018 019import org.springframework.boot.actuate.trace.http.HttpExchangeTracer; 020import org.springframework.boot.actuate.trace.http.HttpTraceRepository; 021import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository; 022import org.springframework.boot.actuate.web.trace.reactive.HttpTraceWebFilter; 023import org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter; 024import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 025import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 026import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 027import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; 028import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; 029import org.springframework.boot.context.properties.EnableConfigurationProperties; 030import org.springframework.context.annotation.Bean; 031import org.springframework.context.annotation.Configuration; 032 033/** 034 * {@link EnableAutoConfiguration Auto-configuration} for HTTP tracing. 035 * 036 * @author Dave Syer 037 * @since 2.0.0 038 */ 039@Configuration 040@ConditionalOnWebApplication 041@ConditionalOnProperty(prefix = "management.trace.http", name = "enabled", matchIfMissing = true) 042@EnableConfigurationProperties(HttpTraceProperties.class) 043public class HttpTraceAutoConfiguration { 044 045 @Bean 046 @ConditionalOnMissingBean(HttpTraceRepository.class) 047 public InMemoryHttpTraceRepository traceRepository() { 048 return new InMemoryHttpTraceRepository(); 049 } 050 051 @Bean 052 @ConditionalOnMissingBean 053 public HttpExchangeTracer httpExchangeTracer(HttpTraceProperties traceProperties) { 054 return new HttpExchangeTracer(traceProperties.getInclude()); 055 } 056 057 @Configuration 058 @ConditionalOnWebApplication(type = Type.SERVLET) 059 static class ServletTraceFilterConfiguration { 060 061 @Bean 062 @ConditionalOnMissingBean 063 public HttpTraceFilter httpTraceFilter(HttpTraceRepository repository, 064 HttpExchangeTracer tracer) { 065 return new HttpTraceFilter(repository, tracer); 066 } 067 068 } 069 070 @Configuration 071 @ConditionalOnWebApplication(type = Type.REACTIVE) 072 static class ReactiveTraceFilterConfiguration { 073 074 @Bean 075 @ConditionalOnMissingBean 076 public HttpTraceWebFilter httpTraceWebFilter(HttpTraceRepository repository, 077 HttpExchangeTracer tracer, HttpTraceProperties traceProperties) { 078 return new HttpTraceWebFilter(repository, tracer, 079 traceProperties.getInclude()); 080 } 081 082 } 083 084}