Commit 97800d0c authored by Paul Asmuth's avatar Paul Asmuth
Browse files

implemented http_websocket_only, enterprise backwards compatibility helper

parent f6a0fc6c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -146,3 +146,4 @@ require "fnordmetric/widgets/bars_widget"
require "fnordmetric/widgets/toplist_widget"
require "fnordmetric/widgets/pie_widget"
require "fnordmetric/widgets/html_widget"
require "fnordmetric/enterprise/compatibility_handler"
+42 −0
Original line number Diff line number Diff line
module FnordMetric::Enterprise

  CompatibilityHandler = proc do
    if data[:_cmd]
     cmd = data[:_cmd].to_s
    else
      FnordMetric.error("missing key: _cmd")
      next
    end

    if m = cmd.match(/^SAMPLE (.*)(delta|mean)-([0-9]+) ([0-9]+)$/)
      gauge_type = m[2].to_sym
      gauge_tick = m[3].to_i
      gauge_key = :"#{m[1]}#{gauge_type}-#{gauge_tick}"
      op_value = m[4].to_i
    else
      FnordMetric.error("invalid _cmd")
      next
    end

    gauge = if namespace.gauges.has_key?(gauge_key)
      namespace.gauges[gauge_key]
    else
      namespace.opt_gauge(gauge_key,
        :flush_interval => gauge_tick,
        :average => (gauge_type == :mean),
        :zero_config => true)
    end

    case gauge_type

      when :delta
        incr gauge, op_value

      when :mean
        incr_avg gauge, op_value

    end

  end

end
+6 −0
Original line number Diff line number Diff line
@@ -38,6 +38,12 @@ class FnordMetric::Namespace
      event[:_session_key] = announce_to_session(event).session_key 
    end

    if event[:_type].to_sym == :_enterprise
      ctx = FnordMetric::Context.new(opts, FnordMetric::Enterprise::CompatibilityHandler)
      ctx.call(event, @redis, self)
      return self
    end

    if FnordMetric::ZeroConfigGauge::TYPES.include?(event[:_type].to_sym)
      ctx = FnordMetric::Context.new(opts, FnordMetric::ZeroConfigGauge::Handler)
      ctx.call(event, @redis, self)
+7 −1
Original line number Diff line number Diff line
@@ -16,7 +16,12 @@ class FnordMetric::Web
    middleware_stack = @opts[:use] || []

    websocket = FnordMetric::WebSocket.new
    webapp    = FnordMetric::App.new(@opts)

    webapp = if FnordMetric.options[:http_websocket_only]
      lambda { |env| [204, {}, [""]] }
    else
      FnordMetric::App.new(@opts)
    end

    dispatch  = Rack::Builder.app do
      use Rack::CommonLogger
@@ -33,6 +38,7 @@ class FnordMetric::Web

        run webapp
      end

    end

    unless ["thin", "hatetepe"].include? server
+45 −0
Original line number Diff line number Diff line
@@ -120,6 +120,51 @@ describe FnordMetric::GaugeModifiers do

  end


  describe "increment enterprise backwards compatibility gauges" do

    it "should create and increment enterprise comaptibility gauges: delta" do
      @namespace.announce(
        :_type => "_enterprise", :_time => 1360584960, :_eid  => 1234,
        :_cmd   => "SAMPLE sales-per-second-delta-20 42")

      @namespace.gauges[:"sales-per-second-delta-20"].should be_a(Gauge)

      gauge_key = "fnordmetric-myns_213-gauge-sales-per-second-delta-20-20"
      puts gauge_key
      @redis.hget(gauge_key, "1360584960").should == "42"

      @namespace.announce(
        :_type => "_enterprise", :_time => 1360584960, :_eid  => 1234,
        :_cmd   => "SAMPLE sales-per-second-delta-20 11")


      @redis.hget(gauge_key, "1360584960").should == "53"
      @namespace.gauges[:"sales-per-second-delta-20"].value_at(1360584961).should == "53"
    end

    it "should create and increment enterprise comaptibility gauges: mean" do
      @namespace.announce(
        :_type => "_enterprise", :_time => 1360584960, :_eid  => 1234,
        :_cmd   => "SAMPLE sales-per-second-mean-10 5")

      @namespace.gauges[:"sales-per-second-mean-10"].should be_a(Gauge)

      gauge_key = "fnordmetric-myns_213-gauge-sales-per-second-mean-10-10"
      @redis.hget(gauge_key, "1360584960").should == "5"

      @namespace.announce(
        :_type => "_enterprise", :_time => 1360584960, :_eid  => 1234,
        :_cmd   => "SAMPLE sales-per-second-mean-10 10")


      @redis.hget(gauge_key, "1360584960").should == "15"
      @namespace.gauges[:"sales-per-second-mean-10"].value_at(1360584961).should == 7.5
    end


  end

  describe "increment non-progressive gauges" do

    it "should increment a non-progressive gauge by 1" do
Loading