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

com.yammer.telemetry.tracing.InMemorySpanSinkSource Maven / Gradle / Ivy

The newest version!
package com.yammer.telemetry.tracing;

import java.math.BigInteger;
import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class InMemorySpanSinkSource implements SpanSink {
    private final ConcurrentMap traces = new ConcurrentHashMap<>();

    public Collection getTraces() {
        return traces.values();
    }

    public Trace getTrace(BigInteger traceId) {
        return traceId == null ? null : traces.get(traceId);
    }

    @Override
    public void record(SpanData spanData) {
        // This is cleaner from a code perspective, but it means we allocate a new Trace on
        // every request even if one is already in the map. This may be worth changing if
        // performance suffers here due to the frequency of calls.
        if (spanData instanceof DisabledSpan) throw new IllegalArgumentException("Should never be recording disabled spans");

        final Trace newTrace = new Trace(spanData.getTraceId());
        newTrace.addSpan(spanData);

        final Trace trace = traces.putIfAbsent(spanData.getTraceId(), newTrace);
        if (trace != null) {
            trace.addSpan(spanData);
        }
    }

    public int recordedTraceCount() {
        return traces.size();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy