/** * @return this span's *current* status relative to {@link Tracer} on the current thread at the time this method is * called. This status is recalculated every time this method is called and is only relevant/correct until {@link * Tracer}'s state is modified (i.e. by starting a subspan, completing a span, using any of the asynchronous helper * methods to modify the span stack in any way, etc), so it should only be considered relevant for the moment the * call is made. * * <p>NOTE: Most app-level developers should not need to worry about this at all. */ public TracerManagedSpanStatus getCurrentTracerManagedSpanStatus() { return Tracer.getInstance().getCurrentManagedStatusForSpan(this); }
@Test public void getCurrentManagedStatusForSpan_works_as_expected_for_managed_noncurrent() { // given Span nonCurrentRootSpan = Tracer.getInstance().startRequestWithRootSpan("root"); Span nonCurrentSubspan = Tracer.getInstance().startSubSpan("subspan1", SpanPurpose.LOCAL_ONLY); Span currentSubspan = Tracer.getInstance().startSubSpan("subspan2", SpanPurpose.LOCAL_ONLY); // expect assertThat(Tracer.getInstance().getCurrentManagedStatusForSpan(nonCurrentRootSpan)) .isEqualTo(TracerManagedSpanStatus.MANAGED_NON_CURRENT_ROOT_SPAN); assertThat(Tracer.getInstance().getCurrentManagedStatusForSpan(nonCurrentSubspan)) .isEqualTo(TracerManagedSpanStatus.MANAGED_NON_CURRENT_SUB_SPAN); }
@Test public void getCurrentManagedStatusForSpan_works_as_expected_for_managed_current() { { // given Span currentRootSpan = Tracer.getInstance().startRequestWithRootSpan("root"); // when TracerManagedSpanStatus tmss = Tracer.getInstance().getCurrentManagedStatusForSpan(currentRootSpan); // then assertThat(tmss).isEqualTo(TracerManagedSpanStatus.MANAGED_CURRENT_ROOT_SPAN); } { // and given Span currentSubspan = Tracer.getInstance().startSubSpan("subspan", SpanPurpose.LOCAL_ONLY); // when TracerManagedSpanStatus tmss = Tracer.getInstance().getCurrentManagedStatusForSpan(currentSubspan); // then assertThat(tmss).isEqualTo(TracerManagedSpanStatus.MANAGED_CURRENT_SUB_SPAN); } }
@Test public void getCurrentManagedStatusForSpan_works_as_expected_for_unmanaged() { // given Span manuallyCreatedSpan = Span.newBuilder("manuallyCreatedSpan", SpanPurpose.LOCAL_ONLY).build(); Span completedSpan = Tracer.getInstance().startRequestWithRootSpan("completedSpan"); Tracer.getInstance().completeRequestSpan(); // when TracerManagedSpanStatus tmssManual = Tracer.getInstance().getCurrentManagedStatusForSpan(manuallyCreatedSpan); TracerManagedSpanStatus tmssCompleted = Tracer.getInstance().getCurrentManagedStatusForSpan(completedSpan); // then assertThat(tmssManual).isEqualTo(TracerManagedSpanStatus.UNMANAGED_SPAN); assertThat(tmssCompleted).isEqualTo(TracerManagedSpanStatus.UNMANAGED_SPAN); }
TracerManagedSpanStatus currentManagedState = getCurrentManagedStatusForSpan(span); switch(currentManagedState) { case MANAGED_CURRENT_ROOT_SPAN: