Commit 4a438a0a authored by Paul Asmuth's avatar Paul Asmuth
Browse files

timeseries gauge: average option

parent aa92f776
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ require "fnordmetric"
FnordMetric.namespace :fn do

  timeseries_gauge :unicorns_seen,
    :tick => 4.seconds,
    :tick => 30.seconds,
    :calculate => :average,
    :series => [:num_unicorns]

+5 −1
Original line number Diff line number Diff line
FnordMetric::COLORS = ["#4572a7", "#aa4643", "#89a54e", "#80699b", "#3d96ae", "#db843d"].reverse
FnordMetric::TICKS =  [60, 300, 1200, 3600, 86400]

FnordMetric::TICKS = lambda{ |tick, span| [tick, 60, 300, 1200, 3600, 86400]
  .select{ |t| (t >= tick) && ((span/t) > 5) }
  .uniq }


FnordMetric::DEFAULT_PROC = lambda{ |arg|

+11 −6
Original line number Diff line number Diff line
@@ -5,12 +5,18 @@ class FnordMetric::TimeseriesGauge < FnordMetric::Gauge
    
    @opts[:series] = @opts[:series].map(&:to_sym)

    @calculate = if @opts[:calculate]
    if @opts[:calculate]
      unless [:sum, :average, :progressive_sum].include?(@opts[:calculate].to_sym)
        raise "unknown calculate option: #{@opts[:calculate]}"
      end
      @opts[:calculate].to_sym
    end || :sum
      @calculate = @opts[:calculate].to_sym
    end 

    if @calculate == :average
      @calculate_proc = lambda{ |c,d| d > 0 ? (c/d.to_f).round(2) : 0 }
    else
      @calculate_proc = lambda{ |c,d| c }
    end
  end

  def render(namespace, event)
@@ -18,7 +24,7 @@ class FnordMetric::TimeseriesGauge < FnordMetric::Gauge
    colors = FnordMetric::COLORS.dup

    @series = Hash.new
    @zooms  = [tick, FnordMetric::TICKS.select{ |t| t > tick }].flatten.uniq
    @zooms  = FnordMetric::TICKS[tick, interval.size]
    
    @opts[:series].each do |series|
      ts = FnordMetric::Timeseries.new
@@ -29,8 +35,7 @@ class FnordMetric::TimeseriesGauge < FnordMetric::Gauge

      @series[series] = { 
        :color => colors.unshift(colors.pop).first,
        :data => Hash[@zooms.map{ |int| [int, ts.timeseries(interval, int) ] }],
        :data_block => lambda{ |c,d| c }
        :data => Hash[@zooms.map{ |int| [int, ts.timeseries(interval, int) ] }]
      }
    end

+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@
    default_style: 'stack',
    series_resolutions: #{@zooms.to_json},
    series: [#{@series.map{ |k,s| 
      dat = s[:data].map{ |k,d| "data#{k}: #{d.to_json(&s[:data_block])}" }
      dat = s[:data].map{ |k,d| "data#{k}: #{d.to_json(&@calculate_proc)}" }
      "{ name: #{k.to_json}, color: '#{s[:color]}', #{dat * ","} }" 
    } * ","}]
  });