class FnordMetric::TimeseriesGauge

Public Class Methods

new(opts) click to toggle source
Calls superclass method FnordMetric::Gauge::new
# File lib/fnordmetric/gauges/timeseries_gauge.rb, line 3
def initialize(opts)
  super(opts)
  
  @opts[:series] = @opts[:series].map(&:to_sym)

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

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

Public Instance Methods

execute(cmd, context, *args) click to toggle source
# File lib/fnordmetric/gauges/timeseries_gauge.rb, line 46
def execute(cmd, context, *args)
  return incr(context, *args) if cmd == :incr
  return incr_numerator(context, *args) if cmd == :incr_numerator
  return incr_denominator(context, *args) if cmd == :incr_denominator

  FnordMetric.error("gauge '#{name}': unknown command: #{cmd}")
end
has_series?() click to toggle source
# File lib/fnordmetric/gauges/timeseries_gauge.rb, line 58
def has_series?
  true
end
render(namespace, event) click to toggle source
# File lib/fnordmetric/gauges/timeseries_gauge.rb, line 19
def render(namespace, event)
  @interval = parse_interval(event["interval"])
  colors = FnordMetric::COLORS.dup

  @series = Hash.new
  @zooms  = FnordMetric::TICKS[tick, @interval.size]

  @total = 0

  @opts[:series].each do |series|
    ts = FnordMetric::Timeseries.new

    fraction_values_in(@interval, series).each do |time, frac|
      @total += frac.first # FIXPAUL
      ts.incr_fraction(time, *frac)
    end

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

  render_page(:timeseries_gauge)
end
renderable?() click to toggle source
# File lib/fnordmetric/gauges/timeseries_gauge.rb, line 54
def renderable?
  true
end

Private Instance Methods

incr(ctx, series_name = :default, value = 1) click to toggle source
# File lib/fnordmetric/gauges/timeseries_gauge.rb, line 64
def incr(ctx, series_name = :default, value = 1)
  if @calculate == :average
    incr_numerator(ctx, series_name, value)
    incr_denominator(ctx, series_name, 1)
  elsif @calculate == :sum
    incr_numerator(ctx, series_name, value)
  elsif @calculate == :progressive_sum
    incr_numerator(ctx, series_name, value, true)
  end
end