Package brave.http
Class HttpServerHandler<Req,Resp>
- java.lang.Object
-
- brave.http.HttpServerHandler<Req,Resp>
-
- Type Parameters:
Req- the native http request type of the server.Resp- the native http response type of the server.
public final class HttpServerHandler<Req,Resp> extends Object
This standardizes a way to instrument http servers, particularly in a way that encourages use of portable customizations viaHttpRequestParserandHttpResponseParser.Synchronous interception is the most straight forward instrumentation.
You generally need to:
- Extract any trace IDs from headers and start the span
- Put the span in scope so things like log integration works
- Process the request
- If there was a Throwable, add it to the span
- Complete the span
HttpServerRequestWrapper requestWrapper = new HttpServerRequestWrapper(request); Span span = handler.handleReceive(requestWrapper); // 1. HttpServerResponse response = null; Throwable error = null; try (Scope scope = currentTraceContext.newScope(span.context())) { // 2. return response = process(request); // 3. } catch (Throwable e) { error = e; // 4. throw e; } finally { HttpServerResponseWrapper responseWrapper = new HttpServerResponseWrapper(requestWrapper, response, error); handler.handleSend(responseWrapper, span); // 5. }- Since:
- 4.3
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static HttpServerHandler<HttpServerRequest,HttpServerResponse>create(HttpTracing httpTracing)brave.SpanhandleReceive(HttpServerRequest request)Conditionally joins a span, or starts a new trace, depending on if a trace context was extracted from the request.voidhandleSend(HttpServerResponse response, brave.Span span)Finishes the server span after assigning it tags according to the response or error.
-
-
-
Method Detail
-
create
public static HttpServerHandler<HttpServerRequest,HttpServerResponse> create(HttpTracing httpTracing)
- Since:
- 5.7
-
handleReceive
public brave.Span handleReceive(HttpServerRequest request)
Conditionally joins a span, or starts a new trace, depending on if a trace context was extracted from the request. Tags are added before the span is started.This is typically called before the request is processed by the actual library.
- Since:
- 5.7
- See Also:
HttpTracing.serverRequestSampler(),HttpTracing.serverRequestParser()
-
handleSend
public void handleSend(HttpServerResponse response, brave.Span span)
Finishes the server span after assigning it tags according to the response or error.This is typically called once the response headers are sent, and after the span is
no longer in scope.Note: It is valid to have a
HttpServerResponsethat only includes an error. However, it is better to also include the request.- Since:
- 5.12
- See Also:
HttpResponseParser.parse(HttpResponse, TraceContext, SpanCustomizer)
-
-