
com.undefinedlabs.scope.span.SpanTrackerImpl Maven / Gradle / Ivy
package com.undefinedlabs.scope.span;
import com.undefinedlabs.scope.Span;
import com.undefinedlabs.scope.logger.ScopeLogger;
import com.undefinedlabs.scope.logger.ScopeLoggerResolver;
import com.undefinedlabs.scope.statistics.Statistics;
import io.opentracing.SpanContext;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
public class SpanTrackerImpl implements SpanTracker {
public static final SpanTracker INSTANCE = new SpanTrackerImpl();
private static final ScopeLogger LOGGER = ScopeLoggerResolver.INSTANCE.get();
private final ConcurrentMap unfinishedSpansMap;
private volatile boolean trackerFinished;
public SpanTrackerImpl() {
this.trackerFinished = false;
this.unfinishedSpansMap = new ConcurrentHashMap<>();
}
protected ConcurrentMap getUnfinishedSpansMap() {
return unfinishedSpansMap;
}
@Override
public void registerStartedSpan(final Span span) {
if (trackerFinished) {
Statistics.INSTANCE.registerTrackStartedSpanOutOfTime(span);
LOGGER.warn("Span cannot be tracked as started. SpanTracker is finished. ");
return;
}
this.unfinishedSpansMap.putIfAbsent(span.context(), span);
}
@Override
public void registerFinishedSpan(final Span span) {
if (!span.isUnfinished() && trackerFinished) {
Statistics.INSTANCE.registerTrackFinishedSpanOutOfTime(span);
LOGGER.warn("Span cannot be tracked as finished. SpanTracker is finished. ");
return;
}
this.unfinishedSpansMap.remove(span.context());
}
@Override
public SpanTrackerData close() {
this.trackerFinished = true;
final List unfinishedSpans = new ArrayList<>(this.unfinishedSpansMap.values());
return new SpanTrackerData(unfinishedSpans);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy