
io.opentracing.contrib.zipkin.propagation.TextMapPropagation Maven / Gradle / Ivy
package io.opentracing.contrib.zipkin.propagation;
import io.opentracing.SpanContext;
import io.opentracing.contrib.zipkin.ZipkinSpanContext;
import io.opentracing.propagation.TextMap;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Function;
public final class TextMapPropagation {
private TextMapPropagation() {
}
public static BiConsumer injector = (spanContext, carrier) -> {
if (spanContext instanceof ZipkinSpanContext) {
ZipkinSpanContext spanContext1 = (ZipkinSpanContext)spanContext;
carrier.put("TraceId", Long.toHexString(spanContext1.getTraceId()));
carrier.put("SpanId", Long.toHexString(spanContext1.getId()));
Long parentId = spanContext1.getParentId();
if (parentId != null) {
carrier.put("ParentSpanId", Long.toHexString(parentId));
}
for (Map.Entry baggageItem : spanContext.baggageItems()) {
carrier.put("Baggage-" + baggageItem.getKey(), baggageItem.getValue());
}
}
};
public static Function extractor = carrier -> {
Long traceId = null;
Long spanId = null;
Long parentSpanId = null;
final Map baggageItems = new HashMap<>();
for (Map.Entry entry : carrier) {
switch (entry.getKey()) {
case "TraceId":
traceId = Long.parseUnsignedLong(entry.getValue(), 4);
break;
case "SpanId":
spanId = Long.parseUnsignedLong(entry.getValue(), 4);
break;
case "ParentSpanId":
parentSpanId = Long.parseUnsignedLong(entry.getValue(), 4);
break;
default:
if (entry.getKey().startsWith("Baggage-")) {
baggageItems.put(entry.getKey().substring("Baggage-".length()), entry.getValue());
}
}
}
if (spanId != null && traceId != null) {
return new ZipkinSpanContext(spanId, parentSpanId, traceId, baggageItems.entrySet());
}
return Collections::emptyList;
};
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy