Class: EzLogsAgent::Buffer
- Inherits:
-
Object
- Object
- EzLogsAgent::Buffer
- Defined in:
- lib/ez_logs_agent/buffer.rb
Overview
Thread-safe in-memory event buffer. Stores events until flushed. Drops oldest when full. Never raises exceptions to host application.
Class Method Summary collapse
-
.clear ⇒ void
Clear all buffered events.
-
.flush ⇒ Array<Hash>
Flush all buffered events and clear buffer atomically.
-
.peek_last ⇒ Hash?
Returns the most recently pushed event WITHOUT removing it.
-
.push(event) ⇒ void
Add event to buffer.
-
.size ⇒ Integer
Current number of buffered events.
Class Method Details
.clear ⇒ void
This method returns an undefined value.
Clear all buffered events.
55 56 57 58 59 60 |
# File 'lib/ez_logs_agent/buffer.rb', line 55 def clear @monitor.synchronize { @queue.clear } rescue => error log_error("[Buffer] clear failed: #{error.}") # Best effort, ignore failures end |
.flush ⇒ Array<Hash>
Flush all buffered events and clear buffer atomically.
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/ez_logs_agent/buffer.rb', line 33 def flush @monitor.synchronize do events = @queue.dup @queue.clear events end rescue => error log_error("[Buffer] flush failed: #{error.}") [] end |
.peek_last ⇒ Hash?
Returns the most recently pushed event WITHOUT removing it. Used by BulkDatabaseCapturer to backfill the affected-row count after the relation method’s return value is known (Rails’ payload is unreliable for plain DELETE on PG). Mutating the returned hash in place is intentional and safe —the event hasn’t been flushed yet.
69 70 71 72 73 74 |
# File 'lib/ez_logs_agent/buffer.rb', line 69 def peek_last @monitor.synchronize { @queue.last } rescue => error log_error("[Buffer] peek_last failed: #{error.}") nil end |
.push(event) ⇒ void
This method returns an undefined value.
Add event to buffer. Drops oldest if full.
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/ez_logs_agent/buffer.rb', line 17 def push(event) @monitor.synchronize do if @queue.size >= max_size @queue.shift log_warn("[Buffer] Buffer full (#{max_size}), dropped oldest event") end @queue.push(event) end rescue => error log_error("[Buffer] push failed: #{error.}") # Fail open: discard event, never crash host end |
.size ⇒ Integer
Current number of buffered events.
46 47 48 49 50 51 |
# File 'lib/ez_logs_agent/buffer.rb', line 46 def size @monitor.synchronize { @queue.size } rescue => error log_error("[Buffer] size failed: #{error.}") 0 end |