package com.github.rojanu.contact.rest; import com.github.kristofa.brave.Brave; import com.github.kristofa.brave.EmptySpanCollectorImpl; import com.github.kristofa.brave.FixedSampleRateTraceFilter; import com.github.kristofa.brave.ServerRequestInterceptor; import com.github.kristofa.brave.ServerResponseInterceptor; import com.github.kristofa.brave.ServerTracer; import com.github.kristofa.brave.SpanCollector; import com.github.kristofa.brave.TraceFilter; import com.github.kristofa.brave.http.DefaultSpanNameProvider; import com.github.kristofa.brave.http.SpanNameProvider; import com.github.kristofa.brave.jaxrs2.BraveContainerRequestFilter; import com.github.kristofa.brave.jaxrs2.BraveContainerResponseFilter; import com.github.kristofa.brave.zipkin.ZipkinSpanCollector; import com.github.rojanu.contact.rest.config.ContactRestServerConfig; import com.github.rojanu.contact.rest.resource.ContactResource; import com.google.common.collect.ImmutableList; import io.dropwizard.Application; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; public class ContactRestServer extends Application<ContactRestServerConfig> { public static void main(String[] args) throws Exception { new ContactRestServer().run(args); } @Override public void initialize(Bootstrap<ContactRestServerConfig> bootstrap) { } @Override public void run(ContactRestServerConfig contactRestServerConfig, Environment environment) throws Exception { contactRestServerConfig.client.tracingConfig = contactRestServerConfig.tracingConfig; ServerTracer serverTracer = getServerTracer(contactRestServerConfig, environment); environment.jersey().register(new ContactResource(contactRestServerConfig.client, serverTracer)); } private ServerTracer getServerTracer(ContactRestServerConfig contactRestServerConfig, Environment environment) { SpanCollector spanCollector; if(contactRestServerConfig.tracingConfig != null ) { spanCollector = new ZipkinSpanCollector( contactRestServerConfig.tracingConfig.server, contactRestServerConfig.tracingConfig.port); } else { spanCollector = new EmptySpanCollectorImpl(); } int sampleRate = 0; try { sampleRate = Math.round(1 / contactRestServerConfig.tracingConfig.sampleRate); } catch (Exception ignored) {} ImmutableList<TraceFilter> traceFilters = ImmutableList.of((TraceFilter) new FixedSampleRateTraceFilter(sampleRate)); Brave brave = new Brave.Builder("contact-rest") .spanCollector(spanCollector) .traceFilters(traceFilters) .build(); ServerTracer serverTracer = brave.serverTracer(); ServerRequestInterceptor requestInterceptor = new ServerRequestInterceptor(serverTracer); SpanNameProvider spanNameProvider = new DefaultSpanNameProvider(); BraveContainerRequestFilter containerRequestFilter = new BraveContainerRequestFilter(requestInterceptor, spanNameProvider); environment.jersey().register(containerRequestFilter); ServerResponseInterceptor responseInterceptor = new ServerResponseInterceptor(serverTracer); BraveContainerResponseFilter containerResponseFilter = new BraveContainerResponseFilter(responseInterceptor); environment.jersey().register(containerResponseFilter); return serverTracer; } }