
ratpack.zipkin.internal.DefaultServerTracingHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ratpack-zipkin Show documentation
Show all versions of ratpack-zipkin Show documentation
Zipkin support for Ratpack
package ratpack.zipkin.internal;
import brave.Span;
import brave.Tracer;
import brave.Tracing;
import brave.http.HttpServerHandler;
import brave.http.HttpTracing;
import brave.propagation.TraceContext;
import javax.inject.Inject;
import ratpack.handling.Context;
import ratpack.handling.Handler;
import ratpack.http.Request;
import ratpack.http.Response;
import ratpack.zipkin.ServerTracingHandler;
/**
* {@link Handler} for Zipkin tracing.
*/
public final class DefaultServerTracingHandler implements ServerTracingHandler {
private final Tracing tracing;
private final HttpServerHandler handler;
private final TraceContext.Extractor extractor;
@Inject
public DefaultServerTracingHandler(HttpTracing httpTracing) {
this.tracing = httpTracing.tracing();
this.handler = HttpServerHandler.create(httpTracing, new HttpAdapter());
this.extractor = tracing.propagation().extractor((Request r, String name) -> r.getHeaders().get(name));
}
@Override
public void handle(Context ctx) throws Exception {
Request request = ctx.getRequest();
final Span span = handler.handleReceive(extractor, request);
final Tracer.SpanInScope scope = tracing.tracer().withSpanInScope(span);
ctx.getResponse().beforeSend(response -> {
handler.handleSend(response, null, span);
span.finish();
scope.close();
});
span.start();
ctx.next();
}
static final class HttpAdapter extends brave.http.HttpServerAdapter {
@Override public String method(Request request) {
return request.getMethod().getName();
}
@Override public String path(Request request) {
return request.getPath();
}
@Override public String url(Request request) {
return request.getUri();
}
@Override public String requestHeader(Request request, String name) {
return request.getHeaders().get(name);
}
@Override public Integer statusCode(Response response) {
return response.getStatus().getCode();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy