package org.stagemonitor.tracing;
import java.util.Iterator;
import java.util.Map;
import io.opentracing.propagation.Format;
import io.opentracing.propagation.TextMap;
/**
* A {@link io.opentracing.Tracer} is only compatible with stagemonitor if it supports the B3 header format
*
* @see <a href="https://github.com/openzipkin/b3-propagation">https://github.com/openzipkin/b3-propagation</a>
*/
public final class B3HeaderFormat implements Format<TextMap> {
public static final String TRACE_ID_NAME = "X-B3-TraceId";
public static final String SPAN_ID_NAME = "X-B3-SpanId";
public static final String PARENT_SPAN_ID_NAME = "X-B3-ParentSpanId";
public static final B3HeaderFormat INSTANCE = new B3HeaderFormat();
private B3HeaderFormat() {
}
public static abstract class B3InjectAdapter implements TextMap {
@Override
public Iterator<Map.Entry<String, String>> iterator() {
throw new UnsupportedOperationException("B3InjectAdapter should only be used with Tracer.inject()");
}
@Override
public void put(String key, String value) {
if (TRACE_ID_NAME.equalsIgnoreCase(key.toLowerCase())) {
setTraceId(value);
} else if (SPAN_ID_NAME.equalsIgnoreCase(key.toLowerCase())) {
setSpanId(value);
} else if (PARENT_SPAN_ID_NAME.equalsIgnoreCase(key.toLowerCase())) {
setParentId(value);
}
}
public abstract void setTraceId(String value);
public abstract void setSpanId(String value);
public abstract void setParentId(String value);
}
}