Class: EzLogsAgent::Buffer

Inherits:
Object
  • Object
show all
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

Class Method Details

.clearvoid

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.message}")
  # Best effort, ignore failures
end

.flushArray<Hash>

Flush all buffered events and clear buffer atomically.

Returns:

  • (Array<Hash>)

    Array of events (empty if buffer was empty)



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.message}")
  []
end

.push(event) ⇒ void

This method returns an undefined value.

Add event to buffer. Drops oldest if full.

Parameters:

  • event (Hash)

    Event hash from EventBuilder



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.message}")
  # Fail open: discard event, never crash host
end

.sizeInteger

Current number of buffered events.

Returns:

  • (Integer)


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.message}")
  0
end