public void startServerTracer(String contextPath) throws Exception { if (enabled) { submitEndpoint(contextPath); LOGGER.debug("Received no span state."); serverTracer.setStateUnknown(contextPath); serverTracer.setServerReceived(); } } public void submitEndpoint(String contextPath) throws Exception
private void updateServerState(final HttpServletRequest request) { final Optional<Long> traceId = fromNullable(request.getHeader(BraveHttpHeaders.TraceId.getName())).transform(TO_HEX); final Optional<Long> spanId = fromNullable(request.getHeader(BraveHttpHeaders.SpanId.getName())).transform(TO_HEX); final String spanName = getSpanName(request.getHeader(BraveHttpHeaders.SpanName.getName()), request); if (traceId.isPresent() && spanId.isPresent()) { final Optional<Long> parentSpanId = fromNullable(request.getHeader(BraveHttpHeaders.ParentSpanId.getName())).transform(TO_HEX); serverTracer.setStateCurrentTrace(traceId.get(), spanId.get(), parentSpanId.orNull(), spanName); } else { serverTracer.setStateUnknown(spanName); } }
/** * Interface method implementation. Sets up the ServerTrace current trace and submits the service enpoint details to EndPointSubmitter * @see com.flipkart.phantom.task.spi.interceptor.RequestInterceptor#process(com.flipkart.phantom.task.spi.RequestWrapper) */ public void process(T request) { this.endPointSubmitter.submit(this.serviceHost, this.servicePort, this.serviceName); TraceData traceData = getTraceDataFromHeaders(request); if (Boolean.FALSE.equals(traceData.shouldBeTraced())) { this.serverTracer.setStateNoTracing(); } else { String spanName = this.getSpanName(traceData, request); if (traceData.getTraceId() != null && traceData.getSpanId() != null) { this.serverTracer.setStateCurrentTrace(traceData.getTraceId(), traceData.getSpanId(), traceData.getParentSpanId(), spanName); } else { this.serverTracer.setStateUnknown(spanName); } } final Optional<String> requestMetadata = request.getRequestMetaData(); if (requestMetadata.isPresent()) { this.serverTracer.submitBinaryAnnotation(REQUEST_ANNOTATION, requestMetadata.get()); } this.serverTracer.setServerReceived(); }
} else { LOGGER.fine("Received no span state."); serverTracer.setStateUnknown(adapter.getSpanName());
@Test public void usesExistingTraceId_server() throws Exception { server.enqueue(new MockResponse()); brave.serverTracer().setStateUnknown("test"); ServerSpan parent = brave.serverSpanThreadBinder().getCurrentServerSpan(); try { get(client, "/foo"); } finally { brave.serverTracer().clearCurrentSpan(); } RecordedRequest request = server.takeRequest(); assertThat(request.getHeader("x-b3-traceId")) .endsWith(IdConversion.convertToString(parent.getSpan().getTrace_id())); assertThat(request.getHeader("x-b3-parentspanid")) .endsWith(IdConversion.convertToString(parent.getSpan().getId())); }
@Test public void usesParentFromInvocationTime_server() throws Exception { server.enqueue(new MockResponse().setBodyDelay(1, TimeUnit.SECONDS)); server.enqueue(new MockResponse()); brave.serverTracer().setStateUnknown("test"); ServerSpan parent = brave.serverSpanThreadBinder().getCurrentServerSpan(); try { getAsync(client, "/foo"); getAsync(client, "/foo"); } finally { brave.serverTracer().clearCurrentSpan(); } // changing the server span after the fact! brave.serverTracer().setStateUnknown("test"); try { for (int i = 0; i < 2; i++) { RecordedRequest request = server.takeRequest(); assertThat(request.getHeader("x-b3-traceId")) .endsWith(IdConversion.convertToString(parent.getSpan().getTrace_id())); assertThat(request.getHeader("x-b3-parentspanid")) .endsWith(IdConversion.convertToString(parent.getSpan().getId())); } } finally { brave.serverTracer().clearCurrentSpan(); } }