All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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