Commit b08f9f5f authored by Paul Asmuth's avatar Paul Asmuth
Browse files

event handler

parent 2098d97b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -104,6 +104,8 @@ end

require "fnordmetric/remote_gauge"
require "fnordmetric/multi_gauge"
require "fnordmetric/event_handler"


require "fnordmetric/backends/redis_backend"
require "fnordmetric/backends/memory_backend"
+40 −0
Original line number Diff line number Diff line
class FnordMetric::EventHandler

  def initialize(opts={}, &block)
    @opts = opts
    @block = block
    @uuid = "evhandler-#{rand(8**32).to_s(36)}"
    @channels = []

    FnordMetric.register(self)
  end

  def initialized   
    @backend = FnordMetric.backend

    @backend.subscribe do |event|
      if @channels.include?(event["_channel"]) && event["_sender"] != @uuid
      	@callback.try(:call, event)
      end
    end

    instance_exec &@block
  end

private

  def emit(event)
  	event.merge!("_sender" => @uuid)
  	@backend.publish(event)
  end

  def subscribe(channel)
  	@channels << channel.to_s
  	@channels.uniq!
  end

  def receive(&callback)
  	@callback = callback
  end

end
 No newline at end of file