/** * Returns the value of the {@code traceparent} header for downstream services. */ public StringBuilder getOutgoingTraceParentHeader() { if (outgoingHeader.length() == 0) { // for unsampled traces, propagate the ID of the transaction in calls to downstream services // such that the parentID of those transactions point to a transaction that exists // remember that we do report unsampled transactions fillTraceParentHeader(outgoingHeader, isSampled() ? id : transactionId); } return outgoingHeader; }
public boolean isSampled() { return getTraceContext().isSampled(); }
@Test void testSetSampled() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); traceContext.asRootSpan(ConstantSampler.of(false)); assertThat(traceContext.isSampled()).isFalse(); traceContext.setRecorded(true); assertThat(traceContext.isSampled()).isTrue(); traceContext.setRecorded(false); assertThat(traceContext.isSampled()).isFalse(); }
@Test void parseFromTraceParentHeader_notSampled() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-00"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.isSampled()).isFalse(); assertThat(traceContext.getIncomingTraceParentHeader()).isEqualTo(header); }
@Test void parseFromTraceParentHeaderUnsupportedFlag() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-03"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.isSampled()).isTrue(); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).endsWith("-03"); }
@Test void parseFromTraceParentHeaderRecorded() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.isSampled()).isTrue(); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).endsWith("-01"); }
@Test void parseFromTraceParentHeaderNotRecorded() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-00"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.isSampled()).isFalse(); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).endsWith("-00"); }
@Test void outgoingHeaderRootSpan() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); traceContext.asRootSpan(ConstantSampler.of(true)); assertThat(traceContext.isSampled()).isTrue(); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).hasSize(55); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).startsWith("00-"); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).endsWith("-01"); }