@Override public void intercept(HttpRequest request) throws IOException { checkNotNull(request); if (this.interceptor != null) { this.interceptor.intercept(request); } if (propagationTextFormat != null && propagationTextFormatSetter != null) { SpanContext spanContext = tracer.getCurrentSpan().getContext(); if (!SpanContext.INVALID.equals(spanContext)) { propagationTextFormat.inject( spanContext, request.getHeaders(), propagationTextFormatSetter); } } } }
private static SpanContext getCurrentSpanContext() { Span span = ContextUtils.CONTEXT_SPAN_KEY.get(); return span == null ? SpanContext.INVALID : span.getContext(); } }
private static SpanContext getCurrentSpanContext() { Span span = ContextUtils.CONTEXT_SPAN_KEY.get(); return span == null ? SpanContext.INVALID : span.getContext(); }
private static void linkSpans(Span span, List<Span> parentLinks) { if (!parentLinks.isEmpty()) { Link childLink = Link.fromSpanContext(span.getContext(), Type.CHILD_LINKED_SPAN); for (Span linkedSpan : parentLinks) { linkedSpan.addLink(childLink); span.addLink(Link.fromSpanContext(linkedSpan.getContext(), Type.PARENT_LINKED_SPAN)); } } }
private static void linkSpans(Span span, List<Span> parentLinks) { if (!parentLinks.isEmpty()) { Link childLink = Link.fromSpanContext(span.getContext(), Type.CHILD_LINKED_SPAN); for (Span linkedSpan : parentLinks) { linkedSpan.addLink(childLink); span.addLink(Link.fromSpanContext(linkedSpan.getContext(), Type.PARENT_LINKED_SPAN)); } } }
private static boolean isAnyParentLinkSampled(List<Span> parentLinks) { for (Span parentLink : parentLinks) { if (parentLink.getContext().getTraceOptions().isSampled()) { return true; } } return false; }
private static boolean isAnyParentLinkSampled(List<Span> parentLinks) { for (Span parentLink : parentLinks) { if (parentLink.getContext().getTraceOptions().isSampled()) { return true; } } return false; }
@Override public ClientStreamTracer newClientStreamTracer(CallOptions callOptions, Metadata headers) { if (span != BlankSpan.INSTANCE) { headers.discardAll(tracingHeader); headers.put(tracingHeader, span.getContext()); } return new ClientTracer(span); }
@Override public ClientStreamTracer newClientStreamTracer(CallOptions callOptions, Metadata headers) { headers.discardAll(tracingHeader); headers.put(tracingHeader, span.getContext()); return new ClientTracer(span); }
@Override public void intercept(HttpRequest request) throws IOException { checkNotNull(request); if (this.interceptor != null) { this.interceptor.intercept(request); } if (propagationTextFormat != null && propagationTextFormatSetter != null) { SpanContext spanContext = tracer.getCurrentSpan().getContext(); if (!SpanContext.INVALID.equals(spanContext)) { propagationTextFormat.inject( spanContext, request.getHeaders(), propagationTextFormatSetter); } } } }
private static final void assertSpanEquals(io.opencensus.trace.Span span, Span sleuthSpan) { assertThat(span.getContext().isValid()).isTrue(); assertThat(Long.parseLong(span.getContext().getTraceId().toLowerBase16().substring(0, 16), 16)) .isEqualTo(sleuthSpan.getTraceIdHigh()); assertThat(Long.parseLong(span.getContext().getTraceId().toLowerBase16().substring(16, 32), 16)) .isEqualTo(sleuthSpan.getTraceId()); assertThat(Long.parseLong(span.getContext().getSpanId().toLowerBase16(), 16)) .isEqualTo(sleuthSpan.getSpanId()); assertThat(span.getContext().getTraceOptions().isSampled()) .isEqualTo(sleuthSpan.isExportable()); } }
private static void assertSpanEquals( Span span, org.springframework.cloud.sleuth.Span sleuthSpan) { assertThat(Long.parseLong(span.getContext().getTraceId().toLowerBase16().substring(0, 16), 16)) .isEqualTo(sleuthSpan.getTraceIdHigh()); assertThat(Long.parseLong(span.getContext().getTraceId().toLowerBase16().substring(16, 32), 16)) .isEqualTo(sleuthSpan.getTraceId()); assertThat(Long.parseLong(span.getContext().getSpanId().toLowerBase16(), 16)) .isEqualTo(sleuthSpan.getSpanId()); assertThat(span.getContext().getTraceOptions().isSampled()) .isEqualTo(sleuthSpan.isExportable()); } }
@Test public void startRootSpan_WithoutSpecifiedSampler() { // Apply default sampler (always true in the tests) for root spans. Span rootSpan = SpanBuilderImpl.createWithParent(SPAN_NAME, null, spanBuilderOptions).startSpan(); assertThat(rootSpan.getContext().isValid()).isTrue(); assertThat(rootSpan.getContext().getTraceOptions().isSampled()).isTrue(); }
@Test public void getContextAndOptions() { Span span = new NoopSpan(spanContext, spanOptions); assertThat(span.getContext()).isEqualTo(spanContext); assertThat(span.getOptions()).isEqualTo(spanOptions); }
@Test public void startChildSpan_WithoutSpecifiedSampler() { Span rootSpan = SpanBuilderImpl.createWithParent(SPAN_NAME, null, spanBuilderOptions) .setSampler(Samplers.neverSample()) .startSpan(); assertThat(rootSpan.getContext().isValid()).isTrue(); assertThat(rootSpan.getContext().getTraceOptions().isSampled()).isFalse(); // Don't apply the default sampler (always true) for child spans. Span childSpan = SpanBuilderImpl.createWithParent(SPAN_NAME, rootSpan, spanBuilderOptions).startSpan(); assertThat(childSpan.getContext().isValid()).isTrue(); assertThat(childSpan.getContext().getTraceId()).isEqualTo(rootSpan.getContext().getTraceId()); assertThat(childSpan.getContext().getTraceOptions().isSampled()).isFalse(); }
@Test public void startSpanNullParentNoRecordOptions() { Span span = SpanBuilderImpl.createWithParent(SPAN_NAME, null, spanBuilderOptions) .setSampler(Samplers.neverSample()) .startSpan(); assertThat(span.getContext().isValid()).isTrue(); assertThat(span.getOptions().contains(Options.RECORD_EVENTS)).isFalse(); assertThat(span.getContext().getTraceOptions().isSampled()).isFalse(); }
@Test public void startRootSpan_WithSpecifiedSampler() { // Apply given sampler before default sampler for root spans. Span rootSpan = SpanBuilderImpl.createWithParent(SPAN_NAME, null, spanBuilderOptions) .setSampler(Samplers.neverSample()) .startSpan(); assertThat(rootSpan.getContext().isValid()).isTrue(); assertThat(rootSpan.getContext().getTraceOptions().isSampled()).isFalse(); }
@After @Before public void verifyNotTracing() { assertThat(OpenCensusSleuthSpanContextHolder.isTracing()).isFalse(); assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse(); }
@Test public void testFromSleuthSampled() { org.springframework.cloud.sleuth.Span sleuthSpan = createSleuthSpan(21, 22, 23, /* exportable= */ true); OpenCensusSleuthSpanContextHolder.setCurrentSpan(sleuthSpan); assertThat(OpenCensusSleuthSpanContextHolder.isTracing()).isTrue(); assertThat(OpenCensusSleuthSpanContextHolder.getCurrentSpan()).isEqualTo(sleuthSpan); assertSpanEquals(tracer.getCurrentSpan(), sleuthSpan); assertThat(tracer.getCurrentSpan().getContext().getTraceOptions().isSampled()).isTrue(); OpenCensusSleuthSpanContextHolder.close(); }
@Test public void testFromSleuthUnsampled() { org.springframework.cloud.sleuth.Span sleuthSpan = createSleuthSpan(21, 22, 23, /* exportable= */ false); OpenCensusSleuthSpanContextHolder.setCurrentSpan(sleuthSpan); assertThat(OpenCensusSleuthSpanContextHolder.isTracing()).isTrue(); assertThat(OpenCensusSleuthSpanContextHolder.getCurrentSpan()).isEqualTo(sleuthSpan); assertSpanEquals(tracer.getCurrentSpan(), sleuthSpan); assertThat(tracer.getCurrentSpan().getContext().getTraceOptions().isSampled()).isFalse(); OpenCensusSleuthSpanContextHolder.close(); }