package brave.jaxrs2;
import brave.Tracing;
import brave.http.HttpServerBenchmarks;
import brave.sampler.Sampler;
import io.undertow.Undertow;
import io.undertow.servlet.api.DeploymentInfo;
import java.net.InetSocketAddress;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.servlet.ServletException;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.TearDown;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import zipkin.reporter.Reporter;
public class JaxRs2ServerBenchmarks extends HttpServerBenchmarks {
@Path("")
public static class Resource {
@GET @Produces("text/plain; charset=UTF-8") public String get() {
return "hello world";
}
}
@ApplicationPath("/nottraced")
public static class App extends Application {
@Override public Set<Object> getSingletons() {
return Collections.singleton(new Resource());
}
}
@ApplicationPath("/unsampled")
public static class Unsampled extends Application {
@Override public Set<Object> getSingletons() {
return new LinkedHashSet<>(Arrays.asList(new Resource(), TracingFeature.create(
Tracing.newBuilder().sampler(Sampler.NEVER_SAMPLE).reporter(Reporter.NOOP).build()
)));
}
}
@ApplicationPath("/traced")
public static class TracedApp extends Application {
@Override public Set<Object> getSingletons() {
return new LinkedHashSet<>(Arrays.asList(new Resource(), TracingFeature.create(
Tracing.newBuilder().reporter(Reporter.NOOP).build()
)));
}
}
PortExposing server;
@Override protected int initServer() throws ServletException {
server = (PortExposing) new PortExposing()
.deploy(App.class)
.deploy(Unsampled.class)
.deploy(TracedApp.class)
.start(Undertow.builder().addHttpListener(8888, "127.0.0.1"));
return server.getPort();
}
static class PortExposing extends UndertowJaxrsServer {
int getPort() {
return ((InetSocketAddress) server.getListenerInfo().get(0).getAddress()).getPort();
}
}
@Override protected void init(DeploymentInfo servletBuilder) {
}
@TearDown(Level.Trial) @Override public void close() throws Exception {
server.stop();
super.close();
}
// Convenience main entry-point
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(".*" + JaxRs2ServerBenchmarks.class.getSimpleName() + ".*")
.build();
new Runner(opt).run();
}
}