package com.github.kristofa.brave.sparkjava;
import com.github.kristofa.brave.Brave;
import com.github.kristofa.brave.ServerRequestInterceptor;
import com.github.kristofa.brave.ServerResponseInterceptor;
import com.github.kristofa.brave.ServerSpanThreadBinder;
import com.github.kristofa.brave.ServerTracer;
import com.github.kristofa.brave.http.DefaultSpanNameProvider;
import com.github.kristofa.brave.http.HttpServerRequestAdapter;
import com.github.kristofa.brave.http.HttpServerResponseAdapter;
import com.github.kristofa.brave.http.SpanNameProvider;
import com.github.kristofa.brave.servlet.internal.MaybeAddClientAddressFromRequest;
import spark.ExceptionHandler;
import spark.Filter;
import spark.Request;
import spark.Response;
import zipkin.Constants;
import static com.github.kristofa.brave.internal.Util.checkNotNull;
/**
* @deprecated Replaced by {@code SparkTracing} from brave-instrumentation-sparkjava
*/
@Deprecated
public final class BraveTracing {
public static BraveTracing create(Brave brave) {
return new BraveTracing.Builder(brave).build();
}
public static BraveTracing.Builder builder(Brave brave) {
return new BraveTracing.Builder(brave);
}
public static final class Builder {
final Brave brave;
SpanNameProvider spanNameProvider = new DefaultSpanNameProvider();
Builder(Brave brave) { // intentionally hidden
this.brave = checkNotNull(brave, "brave");
}
public BraveTracing.Builder spanNameProvider(SpanNameProvider spanNameProvider) {
this.spanNameProvider = checkNotNull(spanNameProvider, "spanNameProvider");
return this;
}
public BraveTracing build() {
return new BraveTracing(this);
}
}
private final ServerRequestInterceptor requestInterceptor;
private final ServerResponseInterceptor responseInterceptor;
private final ServerSpanThreadBinder serverThreadBinder;
private final SpanNameProvider spanNameProvider;
private final ServerTracer serverTracer;
private final MaybeAddClientAddressFromRequest maybeAddClientAddressFromRequest;
BraveTracing(BraveTracing.Builder b) { // intentionally hidden
this.requestInterceptor = b.brave.serverRequestInterceptor();
this.responseInterceptor = b.brave.serverResponseInterceptor();
this.serverThreadBinder = b.brave.serverSpanThreadBinder();
this.spanNameProvider = b.spanNameProvider;
this.serverTracer = b.brave.serverTracer();
maybeAddClientAddressFromRequest = MaybeAddClientAddressFromRequest.create(b.brave);
}
public Filter before() {
return new Filter() {
@Override
public void handle(Request request, Response response) throws Exception {
requestInterceptor.handle(
new HttpServerRequestAdapter(new SparkHttpServerRequest(request), spanNameProvider));
maybeAddClientAddressFromRequest.accept(request.raw());
}
};
}
public Filter afterAfter() {
return new Filter() {
@Override
public void handle(Request request, Response response) throws Exception {
responseInterceptor.handle(
new HttpServerResponseAdapter(new SparkHttpServerResponse(response)));
}
};
}
public ExceptionHandler exception(ExceptionHandler delegate) {
return new ExceptionHandler() {
@Override public void handle(Exception exception, Request request, Response response) {
try {
String message = exception.getMessage();
if (message == null) message = exception.getClass().getSimpleName();
serverTracer.submitBinaryAnnotation(Constants.ERROR, message);
} finally {
delegate.handle(exception, request, response);
}
}
};
}
}