/** * Returns a new {@code Link}. * * @param context the context of the linked {@code Span}. * @param type the type of the relationship with the linked {@code Span}. * @return a new {@code Link}. * @since 0.5 */ public static Link fromSpanContext(SpanContext context, Type type) { return new AutoValue_Link(context.getTraceId(), context.getSpanId(), type, EMPTY_ATTRIBUTES); }
/** * Returns a new {@code Link}. * * @param context the context of the linked {@code Span}. * @param type the type of the relationship with the linked {@code Span}. * @return a new {@code Link}. */ public static Link fromSpanContext(SpanContext context, Type type) { return new AutoValue_Link(context.getTraceId(), context.getSpanId(), type, EMPTY_ATTRIBUTES); }
@Override public <C /*>>> extends @NonNull Object*/> void inject( SpanContext spanContext, C carrier, Setter<C> setter) { checkNotNull(spanContext, "spanContext"); checkNotNull(setter, "setter"); checkNotNull(carrier, "carrier"); StringBuilder builder = new StringBuilder() .append(spanContext.getTraceId().toLowerBase16()) .append(SPAN_ID_DELIMITER) .append(UnsignedLongs.toString(spanIdToLong(spanContext.getSpanId()))) .append(TRACE_OPTION_DELIMITER) .append(spanContext.getTraceOptions().isSampled() ? SAMPLED : NOT_SAMPLED); setter.put(carrier, HEADER_NAME, builder.toString()); }
@Override public <C /*>>> extends @NonNull Object*/> void inject( SpanContext spanContext, C carrier, Setter<C> setter) { checkNotNull(spanContext, "spanContext"); checkNotNull(setter, "setter"); checkNotNull(carrier, "carrier"); StringBuilder builder = new StringBuilder() .append(spanContext.getTraceId().toLowerBase16()) .append(SPAN_ID_DELIMITER) .append(UnsignedLongs.toString(spanIdToLong(spanContext.getSpanId()))) .append(TRACE_OPTION_DELIMITER) .append(spanContext.getTraceOptions().isSampled() ? SAMPLED : NOT_SAMPLED); setter.put(carrier, HEADER_NAME, builder.toString()); }
@Override public <C /*>>> extends @NonNull Object*/> void inject( SpanContext spanContext, C carrier, Setter<C> setter) { checkNotNull(spanContext, "spanContext"); checkNotNull(setter, "setter"); checkNotNull(carrier, "carrier"); setter.put(carrier, X_B3_TRACE_ID, spanContext.getTraceId().toLowerBase16()); setter.put(carrier, X_B3_SPAN_ID, spanContext.getSpanId().toLowerBase16()); if (spanContext.getTraceOptions().isSampled()) { setter.put(carrier, X_B3_SAMPLED, SAMPLED_VALUE); } }
@Override public byte[] toByteArray(SpanContext spanContext) { checkNotNull(spanContext, "spanContext"); byte[] bytes = new byte[ALL_FORMAT_LENGTH]; bytes[VERSION_ID_OFFSET] = VERSION_ID; bytes[TRACE_ID_FIELD_ID_OFFSET] = TRACE_ID_FIELD_ID; spanContext.getTraceId().copyBytesTo(bytes, TRACE_ID_OFFSET); bytes[SPAN_ID_FIELD_ID_OFFSET] = SPAN_ID_FIELD_ID; spanContext.getSpanId().copyBytesTo(bytes, SPAN_ID_OFFSET); bytes[TRACE_OPTION_FIELD_ID_OFFSET] = TRACE_OPTION_FIELD_ID; spanContext.getTraceOptions().copyBytesTo(bytes, TRACE_OPTIONS_OFFSET); return bytes; }
@Override public <C /*>>> extends @NonNull Object*/> void inject( SpanContext spanContext, C carrier, Setter<C> setter) { checkNotNull(spanContext, "spanContext"); checkNotNull(setter, "setter"); checkNotNull(carrier, "carrier"); setter.put(carrier, X_B3_TRACE_ID, spanContext.getTraceId().toLowerBase16()); setter.put(carrier, X_B3_SPAN_ID, spanContext.getSpanId().toLowerBase16()); if (spanContext.getTraceOptions().isSampled()) { setter.put(carrier, X_B3_SAMPLED, SAMPLED_VALUE); } }
@Override public byte[] toByteArray(SpanContext spanContext) { checkNotNull(spanContext, "spanContext"); byte[] bytes = new byte[ALL_FORMAT_LENGTH]; bytes[VERSION_ID_OFFSET] = VERSION_ID; bytes[TRACE_ID_FIELD_ID_OFFSET] = TRACE_ID_FIELD_ID; spanContext.getTraceId().copyBytesTo(bytes, TRACE_ID_OFFSET); bytes[SPAN_ID_FIELD_ID_OFFSET] = SPAN_ID_FIELD_ID; spanContext.getSpanId().copyBytesTo(bytes, SPAN_ID_OFFSET); bytes[TRACE_OPTION_FIELD_ID_OFFSET] = TRACE_OPTION_FIELD_ID; spanContext.getTraceOptions().copyBytesTo(bytes, TRACE_OPTIONS_OFFSET); return bytes; }
@Test public void link_ToString() { Link link = Link.fromSpanContext(spanContext, Type.CHILD_LINKED_SPAN, attributesMap); assertThat(link.toString()).contains(spanContext.getTraceId().toString()); assertThat(link.toString()).contains(spanContext.getSpanId().toString()); assertThat(link.toString()).contains("CHILD_LINKED_SPAN"); assertThat(link.toString()).contains(attributesMap.toString()); link = Link.fromSpanContext(spanContext, Type.PARENT_LINKED_SPAN, attributesMap); assertThat(link.toString()).contains(spanContext.getTraceId().toString()); assertThat(link.toString()).contains(spanContext.getSpanId().toString()); assertThat(link.toString()).contains("PARENT_LINKED_SPAN"); assertThat(link.toString()).contains(attributesMap.toString()); } }
@Test public void handleStartWithPublicEndpointShouldAddLink() throws Exception { handlerForPublicEndpoint.handleStart(carrier, request); verify(tracer).spanBuilderWithExplicitParent(any(String.class), any(Span.class)); verify(spanWithLocalParent).addLink(captor.capture()); Link link = captor.getValue(); assertThat(link.getSpanId()).isEqualTo(spanContextRemote.getSpanId()); assertThat(link.getTraceId()).isEqualTo(spanContextRemote.getTraceId()); assertThat(link.getType()).isEqualTo(Type.PARENT_LINKED_SPAN); }
@Test public void invalidSpanContext() { assertThat(SpanContext.INVALID.getTraceId()).isEqualTo(TraceId.INVALID); assertThat(SpanContext.INVALID.getSpanId()).isEqualTo(SpanId.INVALID); assertThat(SpanContext.INVALID.getTraceOptions()).isEqualTo(TraceOptions.DEFAULT); }
/** * Puts a {@link SpanContext} into the attachments of the given {@link MeasureMap}. * * <p>{@link TraceId} and {@link SpanId} of the {@link SpanContext} will be encoded in base 16 * lower case encoding. * * @param measureMap the {@code MeasureMap} * @param spanContext the {@code SpanContext} to be put as attachments. * @since 0.16 */ public static void putSpanContextAttachments(MeasureMap measureMap, SpanContext spanContext) { checkNotNull(measureMap, "measureMap"); checkNotNull(spanContext, "spanContext"); measureMap.putAttachment(ATTACHMENT_KEY_TRACE_ID, spanContext.getTraceId().toLowerBase16()); measureMap.putAttachment(ATTACHMENT_KEY_SPAN_ID, spanContext.getSpanId().toLowerBase16()); }
private static void addTracingData( String tracePrefix, SpanContext span, LogEntry.Builder builder) { builder.setTrace(formatTraceId(tracePrefix, span.getTraceId())); builder.setSpanId(span.getSpanId().toLowerBase16()); builder.setTraceSampled(span.getTraceOptions().isSampled()); }
@Test public void fromSpanContext_ParentLink() { Link link = Link.fromSpanContext(spanContext, Type.PARENT_LINKED_SPAN); assertThat(link.getTraceId()).isEqualTo(spanContext.getTraceId()); assertThat(link.getSpanId()).isEqualTo(spanContext.getSpanId()); assertThat(link.getType()).isEqualTo(Type.PARENT_LINKED_SPAN); }
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 fromSpanContext_ChildLink() { Link link = Link.fromSpanContext(spanContext, Type.CHILD_LINKED_SPAN); assertThat(link.getTraceId()).isEqualTo(spanContext.getTraceId()); assertThat(link.getSpanId()).isEqualTo(spanContext.getSpanId()); assertThat(link.getType()).isEqualTo(Type.CHILD_LINKED_SPAN); }
@Test public void fromSpanContext_ParentLink_WithAttributes() { Link link = Link.fromSpanContext(spanContext, Type.PARENT_LINKED_SPAN, attributesMap); assertThat(link.getTraceId()).isEqualTo(spanContext.getTraceId()); assertThat(link.getSpanId()).isEqualTo(spanContext.getSpanId()); assertThat(link.getType()).isEqualTo(Type.PARENT_LINKED_SPAN); assertThat(link.getAttributes()).isEqualTo(attributesMap); }
@Test public void fromSpanContext_ChildLink_WithAttributes() { Link link = Link.fromSpanContext(spanContext, Type.CHILD_LINKED_SPAN, attributesMap); assertThat(link.getTraceId()).isEqualTo(spanContext.getTraceId()); assertThat(link.getSpanId()).isEqualTo(spanContext.getSpanId()); assertThat(link.getType()).isEqualTo(Type.CHILD_LINKED_SPAN); assertThat(link.getAttributes()).isEqualTo(attributesMap); }
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()); } }