class Derrick::Aggregator

Constants

ANY

Attributes

patterns[R]

Public Class Methods

new(queue, context) click to toggle source
# File lib/derrick/aggregator.rb, line 6
def initialize(queue, context)
  @queue = queue
  @patterns = {}
  @context = context
end

Public Instance Methods

aggregate(key) click to toggle source
# File lib/derrick/aggregator.rb, line 26
def aggregate(key)
  pattern = pattern_from(key)
  pattern.aggregate(key)

  if patterns.size > @context.max_patterns
    compact_uniques!
  end
end
compact_uniques!() click to toggle source
# File lib/derrick/aggregator.rb, line 39
def compact_uniques!
  any = @patterns.delete(ANY) || Pattern.new
  @patterns.each do |key, aggregate|
    if aggregate.count == 1
      any.merge!(@patterns.delete(key))
    end
  end
  @patterns[ANY] = any
  nil
end
pattern_from(key) click to toggle source
# File lib/derrick/aggregator.rb, line 35
def pattern_from(key)
  @patterns[Pattern.extract(key.name)] ||= Pattern.new
end
run() click to toggle source
# File lib/derrick/aggregator.rb, line 12
def run
  fetcher_count = @context.concurrency
  loop do
    keys = @queue.pop
    if keys == :stop
      fetcher_count -= 1
      break if fetcher_count == 0
    else
      keys.each { |k| aggregate(k) }
    end
  end
  self
end