Class: Lescopr::Core::LogQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/lescopr/core/log_queue.rb

Overview

Thread-safe in-memory log queue with automatic batching.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(max_size: 1000) ⇒ LogQueue

Returns a new instance of LogQueue.



9
10
11
12
13
# File 'lib/lescopr/core/log_queue.rb', line 9

def initialize(max_size: 1000)
  @queue    = []
  @mutex    = Mutex.new
  @max_size = max_size
end

Instance Attribute Details

#sizeObject (readonly)

Returns the value of attribute size.



7
8
9
# File 'lib/lescopr/core/log_queue.rb', line 7

def size
  @size
end

Instance Method Details

#drain(batch_size = 50) ⇒ Array<Hash>

Drain up to ‘batch_size` entries atomically.

Parameters:

  • batch_size (Integer) (defaults to: 50)

Returns:

  • (Array<Hash>)


26
27
28
29
30
# File 'lib/lescopr/core/log_queue.rb', line 26

def drain(batch_size = 50)
  @mutex.synchronize do
    @queue.shift(batch_size)
  end
end

#empty?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/lescopr/core/log_queue.rb', line 36

def empty?
  @mutex.synchronize { @queue.empty? }
end

#push(entry) ⇒ Object

Parameters:

  • entry (Hash)


16
17
18
19
20
21
# File 'lib/lescopr/core/log_queue.rb', line 16

def push(entry)
  @mutex.synchronize do
    @queue.shift if @queue.size >= @max_size  # drop oldest if full
    @queue << entry
  end
end