Commit 9a6828c4 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

Merge branch 'dev' of falbala.23loc.com:fnordmetric into dev

parents 55c67ac0 0529a82a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -147,6 +147,7 @@ require "fnordmetric/acceptors/acceptor"
require "fnordmetric/acceptors/tcp_acceptor"
require "fnordmetric/acceptors/udp_acceptor"
require "fnordmetric/acceptors/fyrehose_acceptor"
require "fnordmetric/acceptors/amqp_acceptor"
require "fnordmetric/widget"
require "fnordmetric/widgets/timeseries_widget"
require "fnordmetric/widgets/numbers_widget"
+7 −1
Original line number Diff line number Diff line
@@ -13,6 +13,8 @@ class FnordMetric::Acceptor
      FnordMetric::TCPAcceptor
    elsif @opts[:protocol] == :fyrehose
      FnordMetric::FyrehoseAcceptor
    elsif @opts[:protocol] == :amqp
      FnordMetric::AMQPAcceptor
    else
      raise "unknown protocol: #{@opts[:protocol]}"
    end
@@ -24,7 +26,11 @@ class FnordMetric::Acceptor

    begin
      inbound_stream = inbound_class.start(@opts)
      if inbound_class == FnordMetric::AMQPAcceptor
        FnordMetric.log "connected to #{@opts[:protocol]}://#{@opts[:listen][0..1].join(":")}"
      else
        FnordMetric.log "listening on #{@opts[:protocol]}://#{@opts[:listen][0..1].join(":")}"
      end
    rescue Exception => e
      raise e if ENV["FNORDMETRIC_ENV"] == "dev"
      FnordMetric.log "cant start #{inbound_class.name} on #{@opts[:protocol]}://#{@opts[:listen][0..1].join(":")}. port in use?"
+52 −0
Original line number Diff line number Diff line
class FnordMetric::AMQPAcceptor

  def self.start(opts)
    begin
      require "amqp"
    rescue
      FnordMetric.error("require 'amqp' failed, you need the amqp gem")
      exit 1
    end

    new(opts)
  end

  def initialize(opts)
    amqp = AMQP.connect(:host => 'firehose')
    amqp_channel = AMQP::Channel.new(amqp)

    msg_handler = lambda do |channel, data|
      event = begin
        JSON.parse(data)
      rescue
        FnordMetric.log("[AMQP] received invalid JSON: #{data[0..60]}")
      end

      if event
        event["_type"] ||= channel
        events << event
        push_next_event
      end
    end

    opts[:channels].each do |channel|
      queue = amqp_channel.queue(channel, :auto_delete => true)
      queue.subscribe{ |data| msg_handler[channel, data] }
    end
  end

  def push_next_event
    return true if events.empty?
    api.event(@events.pop)
    EM.next_tick(&method(:push_next_event))
  end

  def events
    @events ||= []
  end

  def api
    @api ||= FnordMetric::API.new(FnordMetric.options)
  end

end
+2 −1
Original line number Diff line number Diff line
@@ -12,12 +12,13 @@ Todos
  → hooks for custom css, js
  → linux/server monitor gauge (http://www.crunchbase.com/assets/images/original/0010/3221/103221v2.png)+ 
  → icons for sidear
  → alerts
  → make it responsive

Done
====

  → gauge human_titles, units, scale_by
  → added fyrehose acceptor
  → added amqp acceptor, fyrehose acceptor
  → explicit dashboard initialization with options -> dashboard grouping
  → bugfix: lot's of small bugfixes