package rocks.inspectit.agent.java.sdk.opentracing.internal.noop;
import java.util.Collections;
import java.util.Map.Entry;
import io.opentracing.NoopSpanContext;
import io.opentracing.NoopTracer;
import io.opentracing.NoopTracerFactory;
import io.opentracing.SpanContext;
import io.opentracing.propagation.Format;
import rocks.inspectit.agent.java.sdk.opentracing.ExtendedTracer;
import rocks.inspectit.agent.java.sdk.opentracing.Timer;
import rocks.inspectit.agent.java.sdk.opentracing.propagation.Propagator;
/**
* No-operation tracer that implement the {@link ExtendedTracer} interface. Simply delegates calls
* to the {@link NoopTracer} of the opentracing.io.
*
* @author Ivan Senic
*
*/
public final class NoopExtendedTracerImpl implements ExtendedTracer, NoopTracer {
/**
* Instance for usage.
*/
public static final NoopExtendedTracerImpl INSTANCE = new NoopExtendedTracerImpl();
/**
* The noop tracer from the opentracing.io.
*/
private static final NoopTracer DEFAULT_NOOP_TRACER = NoopTracerFactory.create();
/**
* The noop context instance to return when calling {@link #getCurrentContext()}.
*/
private static final NoopSpanContext NOOP_SPAN_CONTEXT_INSTANCE = new NoopSpanContext() {
@Override
public Iterable<Entry<String, String>> baggageItems() {
return Collections.emptyList();
}
};
/**
* Private constructor, use {@link #INSTANCE}.
*/
private NoopExtendedTracerImpl() {
}
/**
* {@inheritDoc}
*/
@Override
public SpanBuilder buildSpan(String operationName) {
return DEFAULT_NOOP_TRACER.buildSpan(operationName);
}
/**
* {@inheritDoc}
*/
@Override
public <C> void inject(SpanContext spanContext, Format<C> format, C carrier) {
DEFAULT_NOOP_TRACER.inject(spanContext, format, carrier);
}
/**
* {@inheritDoc}
*/
@Override
public <C> SpanContext extract(Format<C> format, C carrier) {
return DEFAULT_NOOP_TRACER.extract(format, carrier);
}
/**
* {@inheritDoc}
*/
@Override
public <C> void registerPropagator(Format<C> format, Propagator<C> propagator) {
}
/**
* {@inheritDoc}
*/
@Override
public void setTimer(Timer timer) throws IllegalArgumentException {
}
/**
* {@inheritDoc}
*/
@Override
public SpanBuilder buildSpan() {
return DEFAULT_NOOP_TRACER.buildSpan(null);
}
/**
* {@inheritDoc}
*/
@Override
public SpanBuilder buildSpan(String operationName, String referenceType, boolean useThreadContext) {
return DEFAULT_NOOP_TRACER.buildSpan(operationName);
}
/**
* {@inheritDoc}
*/
@Override
public SpanContext getCurrentContext() {
return NOOP_SPAN_CONTEXT_INSTANCE;
}
}