@Override public void finish() { this.tracingOptions.customizeSpan(span); span.finish(); }
@Override public void caught(Throwable exception) { onError(exception, span); span.finish(); } }
void finishSpan(Exception error) { Span span = this.threadLocalSpan.remove(); if (span == null || span.isNoop()) return; if (error != null) { // an error occurred, adding error to span String message = error.getMessage(); if (message == null) message = error.getClass().getSimpleName(); span.tag("error", message); } span.finish(); }
@Override public void onException(Message message, Exception exception) { try { delegate.onException(message, exception); span.error(exception); } finally { span.finish(); } } }
@RequestMapping("/traced") public String traced() throws InterruptedException { Span span = this.tracer.nextSpan().name("http:customTraceEndpoint").start(); int millis = this.random.nextInt(1000); log.info(String.format("Sleeping for [%d] millis", millis)); Thread.sleep(millis); this.tracer.currentSpan().tag("random-sleep-millis", String.valueOf(millis)); String s = this.restTemplate .getForObject("http://localhost:" + this.port + "/call", String.class); span.finish(); return "traced/" + s; }
@Override public <T extends Resultset> T postProcess(String sql, Statement interceptedStatement, T originalResultSet, int warningCount, boolean noIndexUsed, boolean noGoodIndexUsed, Exception statementException) { Span span = ThreadLocalSpan.CURRENT_TRACER.remove(); if (span == null || span.isNoop()) return null; if (statementException instanceof SQLException) { span.tag("error", Integer.toString(((SQLException) statementException).getErrorCode())); } span.finish(); return null; }
/** Clears the scope to prevent remote reporters from accidentally tracing */ void finishInNullScope(Span span) { Scope ws = currentTraceContext.maybeScope(null); try { span.finish(); } finally { ws.close(); } } }
@Override public <T extends Resultset> T postProcess(Supplier<String> sql, Query interceptedQuery, T originalResultSet, ServerSession serverSession) { if (interceptingExceptions && originalResultSet == null) { // Error case, the span will be finished in TracingExceptionInterceptor. return null; } Span span = ThreadLocalSpan.CURRENT_TRACER.remove(); if (span == null || span.isNoop()) return null; span.finish(); return null; }
@Override public void onAfterAnyExecute(StatementInformation info, long elapsed, SQLException e) { Span span = ThreadLocalSpan.CURRENT_TRACER.remove(); if (span == null || span.isNoop()) return; if (e != null) { span.tag("error", Integer.toString(e.getErrorCode())); } span.finish(); }
@Override public void onCompletion(RecordMetadata metadata, @Nullable Exception exception) { if (exception != null) span.error(exception); span.finish(); } }
@Override public ResultSetInternalMethods postProcess(String sql, Statement interceptedStatement, ResultSetInternalMethods originalResultSet, Connection connection, int warningCount, boolean noIndexUsed, boolean noGoodIndexUsed, SQLException statementException) { Span span = ThreadLocalSpan.CURRENT_TRACER.remove(); if (span == null || span.isNoop()) return null; if (statementException != null) { span.tag("error", Integer.toString(statementException.getErrorCode())); } span.finish(); return null; }
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { tracer.nextSpan().name("child").start().finish(); resp.setStatus(200); } }
/** * Adds logging tags to the provided {@link Span} and closes it when the log is finished. * The span cannot be used further after this method has been called. */ public static void closeSpan(Span span, RequestLog log) { SpanTags.addTags(span, log); span.finish(wallTimeMicros(log, log.responseEndTimeNanos())); }
@Override public void onCompletion(Message message) { try (Scope ws = current.maybeScope(span.context())) { delegate.onCompletion(message); } finally { span.finish(); } }
@Override public void close(Status status, Metadata trailers) { try { super.close(status, trailers); parser.onClose(status, trailers, span.customizer()); } catch (RuntimeException | Error e) { span.error(e); throw e; } finally { span.finish(); } } }
@Override public void onMessage(Message message) { Span listenerSpan = startMessageListenerSpan(message); try (SpanInScope ws = tracer.withSpanInScope(listenerSpan)) { delegate.onMessage(message); } catch (Throwable t) { listenerSpan.error(t); throw t; } finally { listenerSpan.finish(); } }
@Override public void onClose(Status status, Metadata trailers) { SpanInScope scope = tracer.withSpanInScope(span); try { super.onClose(status, trailers); parser.onClose(status, trailers, span.customizer()); } finally { scope.close(); span.finish(); } } }
void newChildWithSpanInScope(Tracer tracer, TraceContext context) { Span span = tracer.newChild(context).name("encode").start(); try (Tracer.SpanInScope scope = tracer.withSpanInScope(span)) { span.tag("foo", "bar"); span.tag("baz", "qux"); } finally { span.finish(); } }
void joinWithSpanInScope(Tracer tracer, TraceContext context) { Span span = tracer.joinSpan(context).name("encode").start(); try (Tracer.SpanInScope scope = tracer.withSpanInScope(span)) { span.tag("foo", "bar"); span.tag("baz", "qux"); } finally { span.finish(); } }
void nextWithSpanInScope(Tracer tracer, TraceContextOrSamplingFlags extracted) { Span span = tracer.nextSpan(extracted).name("encode").start(); try (Tracer.SpanInScope scope = tracer.withSpanInScope(span)) { span.tag("foo", "bar"); span.tag("baz", "qux"); } finally { span.finish(); } }