package brave.sparkjava; import brave.Tracing; import brave.http.HttpServerBenchmarks; import brave.sampler.Sampler; import io.undertow.servlet.api.DeploymentInfo; import io.undertow.servlet.api.FilterInfo; 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 spark.Request; import spark.Response; import spark.Spark; import spark.servlet.SparkApplication; import spark.servlet.SparkFilter; import zipkin.reporter.Reporter; import static javax.servlet.DispatcherType.REQUEST; public class SparkBenchmarks extends HttpServerBenchmarks { public static class NotTraced implements SparkApplication { @Override public void init() { Spark.get("/nottraced", (Request request, Response response) -> "hello world"); } } public static class Unsampled implements SparkApplication { SparkTracing sparkTracing = SparkTracing.create( Tracing.newBuilder().sampler(Sampler.NEVER_SAMPLE).reporter(Reporter.NOOP).build() ); @Override public void init() { Spark.before(sparkTracing.before()); Spark.get("/unsampled", (Request request, Response response) -> "hello world"); Spark.afterAfter(sparkTracing.afterAfter()); } } public static class Traced implements SparkApplication { SparkTracing sparkTracing = SparkTracing.create( Tracing.newBuilder().reporter(Reporter.NOOP).build() ); @Override public void init() { Spark.before(sparkTracing.before()); Spark.get("/traced", (Request request, Response response) -> "hello world"); Spark.afterAfter(sparkTracing.afterAfter()); } } @Override protected void init(DeploymentInfo servletBuilder) { servletBuilder .addFilter(new FilterInfo("NotTraced", SparkFilter.class) .addInitParam("applicationClass", NotTraced.class.getName())) .addFilterUrlMapping("NotTraced", "/*", REQUEST) .addFilter(new FilterInfo("Unsampled", SparkFilter.class) .addInitParam("applicationClass", Unsampled.class.getName())) .addFilterUrlMapping("Unsampled", "/unsampled", REQUEST) .addFilter(new FilterInfo("Traced", SparkFilter.class) .addInitParam("applicationClass", Traced.class.getName())) .addFilterUrlMapping("Traced", "/traced", REQUEST); } // Convenience main entry-point public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder() .include(".*" + SparkBenchmarks.class.getSimpleName() + ".*") .build(); new Runner(opt).run(); } }