class Logtail::LogDevices::HTTP::FlushableDroppingSizedQueue

A simple thread-safe queue implementation that provides a flush method. The built-in ruby `Queue` class does not provide a flush method that allows the caller to retrieve all items on the queue in one call. The Ruby `SizedQueue` also implements thread waiting, which is something we want to avoid. To keep things simple and straight-forward, we designed this queue class. @private

Public Class Methods

new(max_size) click to toggle source
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 11
def initialize(max_size)
  @lock = Mutex.new
  @max_size = max_size
  @array = []
end

Public Instance Methods

deq() click to toggle source

Removes a single item from the queue

# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 27
def deq
  @lock.synchronize do
    @array.pop
  end
end
enq(msg) click to toggle source

Adds a message to the queue

# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 18
def enq(msg)
  @lock.synchronize do
    if !full?
      @array << msg
    end
  end
end
flush() click to toggle source

Flushes all message from the queue and returns them.

# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 34
def flush
  @lock.synchronize do
    old = @array
    @array = []
    return old
  end
end
full?() click to toggle source
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 42
def full?
  size >= @max_size
end
size() click to toggle source
# File lib/logtail/log_devices/http/flushable_dropping_sized_queue.rb, line 46
def size
  @array.size
end