/** * Handles a client request. * * @param clientRequestAdapter Provides context about the request. * @param serviceNameOverride Optional name of the service the client request calls. In case it is not specified the name * will be derived from the URI of the request. It is important the used service name should be same on client * as on server side. */ public void handle(final ClientRequestAdapter clientRequestAdapter, final Optional<String> serviceNameOverride) { final String spanName = getSpanName(clientRequestAdapter, serviceNameOverride); final SpanId newSpanId = clientTracer.startNewSpan(spanName); ClientRequestHeaders.addTracingHeaders(clientRequestAdapter, newSpanId, spanName); final Optional<String> serviceName = getServiceName(clientRequestAdapter, serviceNameOverride); if (serviceName.isPresent()) { clientTracer.setCurrentClientServiceName(serviceName.get()); } clientTracer.submitBinaryAnnotation(REQUEST_ANNOTATION, clientRequestAdapter.getMethod() + " " + clientRequestAdapter.getUri()); clientTracer.setClientSent(); }
/** * Interface method implementation. Performs client request tracing. * @see com.flipkart.phantom.task.spi.interceptor.RequestInterceptor#process(com.flipkart.phantom.task.spi.RequestWrapper) */ public void process(T request) { // we let trace filter decide if client request tracing is needed. Handler level config takes precedence even if global trace is on. for (final TraceFilter traceFilter : traceFilters) { if (!traceFilter.trace(request.getRequestName())) { return; } } ClientTracer clientTracer = Brave.getClientTracer(this.eventDispatchingSpanCollector, this.traceFilters); String spanName = this.getSpanName(request); SpanId newSpanId = clientTracer.startNewSpan(spanName); this.addTracingHeaders(request, newSpanId, spanName); if (request.getRequestContext().isPresent() && request.getRequestContext().get().getCurrentClientEndpoint() != null) { // override the service name with the value contained in the request clientTracer.setCurrentClientServiceName(request.getRequestContext().get().getCurrentClientEndpoint().getServiceName()); // submit an annotation so that host endpoint is visible in the span clientTracer.submitBinaryAnnotation(HOST_ANNOTATION, request.getRequestContext().get().getCurrentClientEndpoint().getHost() + ":" + request.getRequestContext().get().getCurrentClientEndpoint().getPort()); } final Optional<String> requestMetadata = request.getRequestMetaData(); if (requestMetadata.isPresent()) { clientTracer.submitBinaryAnnotation(REQUEST_ANNOTATION, requestMetadata.get()); } clientTracer.setClientSent(); }
@Override public void renderEnd(ExecuteContext ctx) { if (ctx.type() == ExecuteType.READ) { // Don't log writes (so as to not loop on collector) brave.clientTracer().startNewSpan("query"); brave.clientTracer().setCurrentClientServiceName("zipkin-query"); String[] batchSQL = ctx.batchSQL(); if (!StringUtils.isBlank(ctx.sql())) { brave.clientTracer().submitBinaryAnnotation("jdbc.query", ctx.sql()); } else if (batchSQL.length > 0 && batchSQL[batchSQL.length - 1] != null) { brave.clientTracer().submitBinaryAnnotation("jdbc.query", StringUtils.join(batchSQL, '\n')); } brave.clientTracer().setClientSent(jdbcEndpoint.ipv4, jdbcEndpoint.port, jdbcEndpoint.serviceName); } }