Skip to content

Commit

Permalink
edit
Browse files Browse the repository at this point in the history
  • Loading branch information
usfalami committed Jul 4, 2023
1 parent ae1b151 commit e8b4a73
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 14 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.oneteme.traceapi</groupId>
<artifactId>traceapi-core</artifactId>
<version>0.0.3</version>
<version>0.0.4</version>
<packaging>jar</packaging>
<name>traceapi-core</name>
<description>traceapi-core</description>
Expand Down
30 changes: 19 additions & 11 deletions src/main/java/org/usf/traceapi/core/IncomingRequestFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static java.net.URI.create;
import static java.time.Instant.ofEpochMilli;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
import static java.util.Optional.ofNullable;
import static java.util.function.Predicate.not;
import static java.util.stream.Collectors.joining;
Expand All @@ -20,14 +21,15 @@

import java.io.IOException;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collector;
import java.util.stream.Stream;

import jakarta.servlet.Filter;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.filter.OncePerRequestFilter;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
Expand All @@ -40,22 +42,23 @@
*/
@Slf4j
@RequiredArgsConstructor
public final class IncomingRequestFilter implements Filter {
public final class IncomingRequestFilter extends OncePerRequestFilter {

static final Collector<CharSequence, ?, String> joiner = joining("_");
static final String TRACE_HEADER = "tracert";

private final TraceSender traceSender;
private final String[] excludeUrlPatterns;

private final AntPathMatcher matcher = new AntPathMatcher();

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
var req = (HttpServletRequest) request;
var res = (HttpServletResponse) response;
protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) throws IOException, ServletException {
var in = synchronizedIncomingRequest(ofNullable(req.getHeader(TRACE_HEADER)).orElseGet(idProvider));
localTrace.set(in);
var beg = currentTimeMillis();
try {
chain.doFilter(request, response);
filterChain.doFilter(req, res);
}
finally {
var fin = currentTimeMillis();
Expand Down Expand Up @@ -87,17 +90,22 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
}
catch(Exception e) {
//do not catch exception
log.warn("error while tracing : {}", request, e);
log.warn("error while tracing : {}", req, e);
}
}
}

@Override
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
return nonNull(excludeUrlPatterns) && Stream.of(excludeUrlPatterns)
.anyMatch(p -> matcher.match(p, request.getServletPath()));
}

@SuppressWarnings("unchecked")
private static String defaultEndpointName(HttpServletRequest req) {
var arr = req.getRequestURI().split("/");
var arr = req.getRequestURI().substring(1).split("/");
var map = (Map<String, String>) req.getAttribute(URI_TEMPLATE_VARIABLES_ATTRIBUTE);
return map == null ? join("_", arr) : Stream.of(arr)
.filter(not(String::isEmpty))
.filter(not(map.values()::contains))
.collect(joiner);
}
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/org/usf/traceapi/core/TraceConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
import static org.usf.traceapi.core.Helper.application;

import java.net.UnknownHostException;
import java.util.Collection;

import javax.sql.DataSource;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
Expand Down Expand Up @@ -48,8 +50,8 @@ public void addInterceptors(InterceptorRegistry registry) {
}

@Bean
public IncomingRequestFilter incomingRequestFilter(TraceSender sender) {
return new IncomingRequestFilter(sender);
public IncomingRequestFilter incomingRequestFilter(TraceSender sender, @Value("${api.tracing.exclude}") String[] excludes) {
return new IncomingRequestFilter(sender, excludes);
}

@Bean
Expand Down

0 comments on commit e8b4a73

Please sign in to comment.