Class: Lescopr::Core::LogQueue
- Inherits:
-
Object
- Object
- Lescopr::Core::LogQueue
- Defined in:
- lib/lescopr/core/log_queue.rb
Overview
Thread-safe in-memory log queue with automatic batching.
Instance Attribute Summary collapse
-
#size ⇒ Object
readonly
Returns the value of attribute size.
Instance Method Summary collapse
-
#drain(batch_size = 50) ⇒ Array<Hash>
Drain up to ‘batch_size` entries atomically.
- #empty? ⇒ Boolean
-
#initialize(max_size: 1000) ⇒ LogQueue
constructor
A new instance of LogQueue.
- #push(entry) ⇒ Object
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
#size ⇒ Object (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.
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
36 37 38 |
# File 'lib/lescopr/core/log_queue.rb', line 36 def empty? @mutex.synchronize { @queue.empty? } end |
#push(entry) ⇒ Object
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 |