Commit 56c2cbdc authored by Paul Asmuth's avatar Paul Asmuth
Browse files

added memory_backend, gauge rendering via websockets working :)

parent c36c362d
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -194,10 +194,12 @@ module FnordMetric
    end

    EM.next_tick do
      if opts[:start_worker]
        worker = Worker.new(@@namespaces.clone, opts)
        worker.ready!
      end

      # FIXPAUL: this is re-instantiating all gauges. why?
      #if opts[:start_worker]
      #  worker = Worker.new(@@namespaces.clone, opts)
      #  worker.ready!
      #end

      if opts[:inbound_stream]
        inbound_class = opts[:inbound_protocol] == :udp ? InboundDatagram : InboundStream
@@ -224,6 +226,7 @@ end


require "fnordmetric/backends/redis_backend"
require "fnordmetric/backends/memory_backend"

require "fnordmetric/api"
require "fnordmetric/udp_client"
+31 −0
Original line number Diff line number Diff line
class FnordMetric::MemoryBackend

  def initialize(opts)
    @subscriptions = []
  end

  def subscribe(&block)
    sid = channel.subscribe do |message|
      block.call(message)
    end

    @subscriptions.push(sid)
  end

  def publish(message)
    channel.push(message)
  end

  def hangup
    @subscriptions.each do |sid|
      channel.unsubscribe(sid)
    end
  end

private

  def channel
    $fm_channel ||= EM::Channel.new
  end

end
 No newline at end of file
+11 −8
Original line number Diff line number Diff line
class FnordMetric::RedisBackend

  def initialize(opts)
    @callback = nil
    @redis_channel = opts[:redis_prefix]

  	@sub_redis = EM::Hiredis.connect(opts[:redis_url])
    @redis = EM::Hiredis.connect(opts[:redis_url])
    @pub_redis = EM::Hiredis.connect(opts[:redis_url])

    @sub_redis.subscribe(@redis_channel)
    @redis.subscribe(@redis_channel)
  end

  def subscribe(&block)
    @sub_redis.on(:message) do |chan, message|
    @redis.on(:message) do |chan, raw|
      begin
        message = JSON.parse(raw)
      rescue
        puts "redisbackend: received invalid json"
      else
        block.call(message)
      end
    end
  end

  def publish(message)
    @pub_redis.publish(@redis_channel, message.to_json)
  end

  def hangup
    @pub_redis.close
    @sub_redis.close
    @redis.close
  end

end
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@ class FnordMetric::Namespace
  def opt_multigauge(gauge_type, gauge_key, opts={})
    opts.merge!(:key => gauge_key, :key_prefix => key_prefix)
    klass = "FnordMetric::#{gauge_type.to_s.camelize}"
    @gauges[gauge_key].try(:hangup)
    @gauges[gauge_key] ||= klass.constantize.new(opts)   
  end

+5 −2
Original line number Diff line number Diff line
@@ -25,12 +25,12 @@ class FnordMetric::NumericGauge < FnordMetric::MultiGauge
  end

  def react(event)
    puts "REACT TO: #{event.inspect}"
    render! if event["_class"] == "render_request"
    process!(event) if event["_class"] == "request"
  end

  def process!(event)
    sleep 2
    resp = if event["widget"] == "total_timeline"
      event.merge(
        :values => Hash[series_count_gauges.map do |_skey, _series|
@@ -44,7 +44,10 @@ class FnordMetric::NumericGauge < FnordMetric::MultiGauge
    end

    if resp
      resp.merge!("_class" => "response")
      resp.merge!(
        "_class" => "response",
        "_sender" => @uuid
      )
      resp.delete("ticks")
      respond(resp)
    end
Loading