Commit 89b9eccb authored by Paul Asmuth's avatar Paul Asmuth
Browse files

Merge branch 'master' of github.com:paulasmuth/fnordmetric into enterprise

parents b6764956 ee868462
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|sum)-([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, :sum
        incr gauge, op_value

      when :mean
        incr_avg gauge, op_value

    end

  end

end
+10 −7
Original line number Diff line number Diff line
@@ -28,10 +28,11 @@ module FnordMetric::GaugeCalculations
    _v = if respond_to?(:_value_at)
      _value_at(key, _t)
    else
      _c = sync_redis.hget(key(:"mean-counts"), _t)
      sync_redis.hget(key, _t)
    end

    calculate_value(_v, _t, opts, block)
    calculate_value(_v, _t, opts, block, _c)
  end

  def values_at(times, opts={}, &block)
@@ -40,20 +41,22 @@ module FnordMetric::GaugeCalculations
      if respond_to?(:_values_at)
        _values_at(times, opts={}, &block)
      else
        ret_counts = sync_redis.hmget(key(:"mean-counts"), *times)
        sync_redis.hmget(key, *times)
      end.each_with_index do |_v, _n|
        _t = times[_n]
        ret[_t] = calculate_value(_v, _t, opts, block)
        _c = ret_counts ? ret_counts[_n] : nil
        ret[_t] = calculate_value(_v, _t, opts, block, _c)
      end
    end
  end

  def calculate_value(_v, _t, opts, block)
    block = @@avg_per_count_proc if average?
    #block = @@count_per_session_proc if unique?
  def calculate_value(_v, _t, opts, block, _c = nil)
    block = @@avg_per_session_proc if unique? && average?

    calc = if block
    calc = if average? && _c
      (_v.to_f / (_c||1).to_i)
    elsif block
      instance_exec(_v, _t, &block)
    else
      _v
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ module FnordMetric::GaugeModifiers
  end

  def incr_avg(gauge, value)
    @redis.incr(gauge.tick_key(time, :"value-count")).callback do
    @redis.hincrby(gauge.key(:"mean-counts"), gauge.tick_at(time), 1).callback do
      incr_tick(gauge, value)
    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)
Loading