Sha256: f1685f759afcecf013ef691ab27384d9e7d00c4cb9d202d7a87af9af4b5961e7

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

require 'thread'

module Datadog
  # Trace buffer that stores application traces. The buffer has a maximum size and when
  # the buffer is full, a random trace is discarded. This class is thread-safe and is used
  # automatically by the ``Tracer`` instance when a ``Span`` is finished.
  class TraceBuffer
    def initialize(max_size)
      @max_size = max_size

      @mutex = Mutex.new
      @traces = []
      @closed = false
    end

    # Add a new ``trace`` in the local queue. This method doesn't block the execution
    # even if the buffer is full. In that case, a random trace is discarded.
    def push(trace)
      return if @closed
      len = @traces.length
      @traces.delete_at(rand(len)) if len >= @max_size && @max_size > 0
      @traces << trace
    end

    # Return the current number of stored traces.
    def length
      @traces.length
    end

    # Return if the buffer is empty.
    def empty?
      @traces.empty?
    end

    # Stored traces are returned and the local buffer is reset.
    def pop
      @mutex.synchronize do
        traces = @traces
        @traces = []
        return traces
      end
    end

    def close
      @closed = true
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ddtrace-0.15.0.beta1 lib/ddtrace/buffer.rb