Merge pull request #111 from DataDog/tyler/servlet-async

Mark servlet trace filter as async supported
This commit is contained in:
Tyler Benson 2017-08-24 07:47:15 -07:00 committed by GitHub
commit 82a9c73c6b
3 changed files with 20 additions and 9 deletions

View File

@ -3,6 +3,7 @@ package com.datadoghq.trace.agent.integration;
import io.opentracing.contrib.web.servlet.filter.TracingFilter; import io.opentracing.contrib.web.servlet.filter.TracingFilter;
import java.util.EnumSet; import java.util.EnumSet;
import javax.servlet.Filter; import javax.servlet.Filter;
import javax.servlet.FilterRegistration;
import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletContextHandler;
import org.jboss.byteman.rule.Rule; import org.jboss.byteman.rule.Rule;
@ -25,10 +26,10 @@ public class JettyServletHelper extends DDAgentTracingHelper<ServletContextHandl
String[] patterns = {"/*"}; String[] patterns = {"/*"};
Filter filter = new TracingFilter(tracer); Filter filter = new TracingFilter(tracer);
contextHandler FilterRegistration.Dynamic registration =
.getServletContext() contextHandler.getServletContext().addFilter("tracingFilter", filter);
.addFilter("tracingFilter", filter) registration.setAsyncSupported(true);
.addMappingForUrlPatterns( registration.addMappingForUrlPatterns(
EnumSet.allOf(javax.servlet.DispatcherType.class), true, patterns); EnumSet.allOf(javax.servlet.DispatcherType.class), true, patterns);
setState(contextHandler.getServletContext(), 1); setState(contextHandler.getServletContext(), 1);

View File

@ -3,6 +3,7 @@ package com.datadoghq.trace.agent.integration;
import io.opentracing.contrib.web.servlet.filter.TracingFilter; import io.opentracing.contrib.web.servlet.filter.TracingFilter;
import java.util.EnumSet; import java.util.EnumSet;
import javax.servlet.Filter; import javax.servlet.Filter;
import javax.servlet.FilterRegistration;
import org.apache.catalina.core.ApplicationContext; import org.apache.catalina.core.ApplicationContext;
import org.jboss.byteman.rule.Rule; import org.jboss.byteman.rule.Rule;
@ -25,9 +26,9 @@ public class TomcatServletHelper extends DDAgentTracingHelper<ApplicationContext
String[] patterns = {"/*"}; String[] patterns = {"/*"};
Filter filter = new TracingFilter(tracer); Filter filter = new TracingFilter(tracer);
contextHandler FilterRegistration.Dynamic registration = contextHandler.addFilter("tracingFilter", filter);
.addFilter("tracingFilter", filter) registration.setAsyncSupported(true);
.addMappingForUrlPatterns( registration.addMappingForUrlPatterns(
EnumSet.allOf(javax.servlet.DispatcherType.class), true, patterns); EnumSet.allOf(javax.servlet.DispatcherType.class), true, patterns);
return contextHandler; return contextHandler;

View File

@ -14,6 +14,8 @@ import javax.ws.rs.GET;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam; import javax.ws.rs.QueryParam;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import org.bson.Document; import org.bson.Document;
@ -96,6 +98,13 @@ public class SimpleCrudResource {
return books; return books;
} }
@GET
@Path("/async")
public void async(@Suspended AsyncResponse response) {
// not actually async, but useful for testing that codepath.
response.resume("Returned from async");
}
/** /**
* The beforeDB is traced using the annotation @Trace with a custom operationName and a custom * The beforeDB is traced using the annotation @Trace with a custom operationName and a custom
* tag. * tag.