class Resugan::Worker::Monitor

Public Class Methods

new(namespace = '') click to toggle source
# File lib/resugan/worker.rb, line 15
def initialize(namespace = '')
  @namespace = namespace
  @config = Config.new
  @queue = ParallelQueue.new(redis, 'resugan_queue-' + namespace)
end

Public Instance Methods

configure(&block) click to toggle source
# File lib/resugan/worker.rb, line 21
def configure(&block)
  block.call(@config)
  self
end
redis=(redis) click to toggle source
# File lib/resugan/worker.rb, line 35
def redis=(redis)
  @redis = redis
end
reset_queue() click to toggle source
# File lib/resugan/worker.rb, line 39
def reset_queue
  @queue.delete_all!
end
start() click to toggle source
# File lib/resugan/worker.rb, line 26
def start
  puts "monitoring resugan queue: #{@namespace}"

  ::Kernel.loop do
    eval_queue
    sleep 1 if @queue.queue_count == 0
  end
end

Protected Instance Methods

redis() click to toggle source
# File lib/resugan/worker.rb, line 45
def redis
  @redis ||= Redis.new
end

Private Instance Methods

eval_queue() click to toggle source
# File lib/resugan/worker.rb, line 51
def eval_queue
  @queue.dequeue_each do |item|
    unmarshalled_event = JSON.parse(item)
    event = unmarshalled_event["event"]
    args = unmarshalled_event["args"]

    begin
      Resugan::Kernel.invoke(@namespace, event, args)
    rescue StandardError => exception
      if @config.error_handler
        @config.error_handler.call(@namespace, event, args, exception)
      end
    end
  end
end