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

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