@Override public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) { requestInterceptor.handle(new HttpServerRequestAdapter(new HttpServerRequest() { @Override public String getHttpHeaderValue(String headerName) { return request.getHeader(headerName); } @Override public URI getUri() { try { return new URI(request.getRequestURI()); } catch (URISyntaxException e) { throw new RuntimeException(e); } } @Override public String getHttpMethod() { return request.getMethod(); } }, spanNameProvider)); return true; }
@Override public TraceData getTraceData() { // try to extract single-header format String b3String = request.getHttpHeaderValue("b3"); if (b3String != null) { TraceData extracted = B3SingleFormat.parseB3SingleFormat(b3String); if (extracted != null) return extracted; } String sampled = request.getHttpHeaderValue(BraveHttpHeaders.Sampled.getName()); String parentSpanId = request.getHttpHeaderValue(BraveHttpHeaders.ParentSpanId.getName()); String traceId = request.getHttpHeaderValue(BraveHttpHeaders.TraceId.getName()); String spanId = request.getHttpHeaderValue(BraveHttpHeaders.SpanId.getName()); // Official sampled value is 1, though some old instrumentation send true Boolean parsedSampled = sampled != null ? sampled.equals("1") || sampled.equalsIgnoreCase("true") : null; if (traceId != null && spanId != null) { return TraceData.create(getSpanId(traceId, spanId, parentSpanId, parsedSampled)); } else if (parsedSampled == null) { return TraceData.EMPTY; } else if (parsedSampled) { return TraceData.SAMPLED; } else { return TraceData.NOT_SAMPLED; } }
@Override public TraceData getTraceData() { final String sampled = serverRequest.getHttpHeaderValue(BraveHttpHeaders.Sampled.getName()); if (sampled != null) { if (sampled.equals("0") || sampled.toLowerCase().equals("false")) { return TraceData.builder().sample(false).build(); } else { final String parentSpanId = serverRequest.getHttpHeaderValue(BraveHttpHeaders.ParentSpanId.getName()); final String traceId = serverRequest.getHttpHeaderValue(BraveHttpHeaders.TraceId.getName()); final String spanId = serverRequest.getHttpHeaderValue(BraveHttpHeaders.SpanId.getName()); if (traceId != null && spanId != null) { SpanId span = getSpanId(traceId, spanId, parentSpanId); return TraceData.builder().sample(true).spanId(span).build(); } } } return TraceData.builder().build(); }
@Override public void filter(ContainerRequestContext containerRequestContext) throws IOException { HttpServerRequest request = new JaxRs2HttpServerRequest(containerRequestContext); requestInterceptor.handle(new HttpServerRequestAdapter(request, spanNameProvider)); }
@Override public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) { if (request.getAttribute(HTTP_SERVER_SPAN_ATTRIBUTE) != null) return true; // already handled requestInterceptor.handle(new HttpServerRequestAdapter(new ServletHttpServerRequest(request), spanNameProvider)); if (maybeAddClientAddressFromRequest != null) { maybeAddClientAddressFromRequest.accept(request); } return true; }
final Servlet25ServerResponseAdapter servlet25ServerResponseAdapter = new Servlet25ServerResponseAdapter((HttpServletResponse) response); requestInterceptor.handle(new HttpServerRequestAdapter(new ServletHttpServerRequest(httpRequest), spanNameProvider));
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { String alreadyFilteredAttributeName = getAlreadyFilteredAttributeName(); boolean hasAlreadyFilteredAttribute = request.getAttribute(alreadyFilteredAttributeName) != null; if (hasAlreadyFilteredAttribute) { // Proceed without invoking this filter... filterChain.doFilter(request, response); } else { final StatusExposingServletResponse statusExposingServletResponse = new StatusExposingServletResponse((HttpServletResponse) response); requestInterceptor.handle(new HttpServerRequestAdapter(new ServletHttpServerRequest((HttpServletRequest) request), spanNameProvider)); try { filterChain.doFilter(request, statusExposingServletResponse); } finally { responseInterceptor.handle(new HttpServerResponseAdapter(new HttpResponse() { @Override public int getHttpStatusCode() { return statusExposingServletResponse.getStatus(); } })); } } }
/** * Intercepts the server request flow and extract request information * to be published to the Zipkin server for tracing. */ @Override public boolean preCall(Request request, Response responder, ServiceMethodInfo serviceMethodInfo) throws Exception { serviceMethodInfo.setAttribute(RESPONDER_ATTRIBUTE, responder); HttpServerRequest req = new TraceableHttpServerRequest(request); HttpServerRequestAdapter reqAdapter = new HttpServerRequestAdapter(req, new DefaultSpanNameProvider()); reqInterceptor.handle(reqAdapter); return true; }
requestInterceptor.handle(new HttpServerRequestAdapter(new ServletHttpServerRequest(httpRequest), spanNameProvider));