static List<SpanRef> buildReferences(List<Reference> references) { List<SpanRef> thriftReferences = new ArrayList<SpanRef>(references.size()); for (Reference reference: references) { SpanRefType thriftRefType = References.CHILD_OF.equals(reference.getType()) ? SpanRefType.CHILD_OF : SpanRefType.FOLLOWS_FROM; thriftReferences.add(new SpanRef(thriftRefType, reference.getSpanContext().getTraceIdLow(), reference.getSpanContext().getTraceIdHigh(), reference.getSpanContext().getSpanId())); } return thriftReferences; }
context == null ? 0L : context.getTraceIdHigh(), context == null ? 0L : context.getTraceIdLow(), context == null ? 0L : context.getSpanId(),
public static io.jaegertracing.thriftjava.Span convertSpan(JaegerSpan jaegerSpan) { JaegerSpanContext context = jaegerSpan.context(); boolean oneChildOfParent = jaegerSpan.getReferences().size() == 1 && References.CHILD_OF.equals(jaegerSpan.getReferences().get(0).getType()); List<SpanRef> references = oneChildOfParent ? Collections.<SpanRef>emptyList() : buildReferences(jaegerSpan.getReferences()); return new io.jaegertracing.thriftjava.Span( context.getTraceIdLow(), context.getTraceIdHigh(), context.getSpanId(), oneChildOfParent ? context.getParentId() : 0, jaegerSpan.getOperationName(), context.getFlags(), jaegerSpan.getStart(), jaegerSpan.getDuration() ) .setReferences(references) .setTags(buildTags(jaegerSpan.getTags())) .setLogs(buildLogs(jaegerSpan.getLogs())); }
@Override public void inject(JaegerSpanContext spanContext, TextMap carrier) { carrier.put(TRACE_ID_NAME, // Use HexCode instead of getTraceId to ensure zipkin compatibility HexCodec.toLowerHex(spanContext.getTraceIdHigh(), spanContext.getTraceIdLow())); if (spanContext.getParentId() != 0L) { // Conventionally, parent id == 0 means the root span carrier.put(PARENT_SPAN_ID_NAME, HexCodec.toLowerHex(spanContext.getParentId())); } carrier.put(SPAN_ID_NAME, HexCodec.toLowerHex(spanContext.getSpanId())); carrier.put(SAMPLED_NAME, spanContext.isSampled() ? "1" : "0"); if (spanContext.isDebug()) { carrier.put(FLAGS_NAME, "1"); } for (Map.Entry<String, String> entry : spanContext.baggageItems()) { carrier.put(keys.prefixedKey(entry.getKey(), baggagePrefix), entry.getValue()); } }
private JaegerSpanContext createChildContext() { JaegerSpanContext preferredReference = preferredReference(); if (isRpcServer()) { if (isSampled()) { metrics.tracesJoinedSampled.inc(1); } else { metrics.tracesJoinedNotSampled.inc(1); } // Zipkin server compatibility if (zipkinSharedRpcSpan) { return preferredReference; } } return getObjectFactory().createSpanContext( preferredReference.getTraceIdHigh(), preferredReference.getTraceIdLow(), Utils.uniqueId(), preferredReference.getSpanId(), // should we do OR across passed references? preferredReference.getFlags(), getBaggage(), null); }