Commit 985a9e4b authored by Paul Asmuth's avatar Paul Asmuth
Browse files

distribution gauge: record simple histogram

parent 7a6710fc
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -45,6 +45,10 @@ class FnordMetric::Context
    puts e.backtrace.push("\n").join("\n") if ENV['FNORDMETRIC_ENV'] == 'dev'
  end

  def redis_exec(*args)
    @redis.send(*args)
  end

private

  def session_key
+20 −2
Original line number Diff line number Diff line
@@ -4,16 +4,34 @@ class FnordMetric::DistributionGauge < FnordMetric::Gauge
    interval = parse_interval(event["interval"])
    colors = ["#2F635E", "#606B36", "#727070", "#936953", "#CD645A", "#FACE4F", "#42436B"]


    render_page(:distribution_gauge)
  end

  def execute(cmd, context, *args)
    #incr_series(context, *args) if cmd == :incr
    return observe(context, args.first) if cmd == :observe
    FnordMetric.error("gauge '#{name}': unknown command: #{cmd}")
  end

  def renderable?
    true
  end

private

  def observe(ctx, value)
    at = ctx.send(:time)
    
    if value.is_a?(String) && value.match(/[0-9]+/)
      value = value.to_i
    elsif value.is_a?(String) && value.match(/[0-9]+(\.|,)[0-9]+/)
      value = value.to_f
    end    

    unless value.is_a?(Float) || value.is_a?(Fixnum)
      return FnordMetric.error("gauge '#{name}': observe called with non-numerical value: #{value}")
    end

    ctx.redis_exec :hincrby, tick_key(at, :histogram), value.round(2), 1
  end

end
 No newline at end of file
+2 −1
Original line number Diff line number Diff line
@@ -30,7 +30,8 @@ class FnordMetric::TimeseriesGauge < FnordMetric::Gauge
  end

  def execute(cmd, context, *args)
    incr_series(context, *args) if cmd == :incr
    return incr_series(context, *args) if cmd == :incr
    FnordMetric.error("gauge '#{name}': unknown command: #{cmd}")
  end

  def renderable?
+5 −1
Original line number Diff line number Diff line
@@ -28,11 +28,15 @@ class FnordMetric::Namespace
      event[:_session_key] = announce_to_session(event).session_key 
    end

    [
    res = [
      @handlers[event[:_type].to_s],
      @handlers["*"]
    ].flatten.compact.each do |context| 
      context.call(event, @redis) 
    end.size

    if res == 0
      FnordMetric.error("no handler for event-type: #{event[:_type]}")
    end

    self