Class: ActiveUsage::EventQueue

Inherits:
Object
  • Object
show all
Defined in:
lib/active_usage/event_queue.rb

Instance Method Summary collapse

Constructor Details

#initialize(max_size, batch_size) ⇒ EventQueue

Returns a new instance of EventQueue.



5
6
7
8
9
10
11
# File 'lib/active_usage/event_queue.rb', line 5

def initialize(max_size, batch_size)
  @max_size = max_size
  @batch_size = batch_size
  @queue = Queue.new
  @mutex = Mutex.new
  @dropped_count = 0
end

Instance Method Details

#drainObject



23
24
25
26
27
28
29
30
31
# File 'lib/active_usage/event_queue.rb', line 23

def drain
  items = []
  @mutex.synchronize do
    items << @queue.pop(true) while items.size < @batch_size && !@queue.empty?
  rescue ThreadError
    nil
  end
  items
end

#dropped_countObject



41
42
43
# File 'lib/active_usage/event_queue.rb', line 41

def dropped_count
  @mutex.synchronize { @dropped_count }
end

#flush_ready?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/active_usage/event_queue.rb', line 37

def flush_ready?
  size >= @batch_size
end

#push(event) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/active_usage/event_queue.rb', line 13

def push(event)
  @mutex.synchronize do
    if @queue.size >= @max_size
      @dropped_count += 1
      return
    end
    @queue << event
  end
end

#sizeObject



33
34
35
# File 'lib/active_usage/event_queue.rb', line 33

def size
  @mutex.synchronize { @queue.size }
end