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