Commit e6588e2d authored by Paul Asmuth's avatar Paul Asmuth
Browse files

fraction_values_in

parent 7990dab6
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -18,8 +18,8 @@ class FnordMetric::Gauge
    tick * 10 # FIXPAUL!
  end

  def tick_at(time)    
    (time/tick.to_f).floor*tick
  def tick_at(time, _tick=tick)    
    (time/_tick.to_f).floor*_tick
  end

  def name
@@ -51,7 +51,7 @@ class FnordMetric::Gauge
  end

  def retention_key(_time, _append=nil)
    key([((_time/retention.to_f).floor*retention).to_s, _append])
    key([tick_at(_time, retention).to_s, _append])
  end

  def two_dimensional?
+13 −2
Original line number Diff line number Diff line
@@ -12,8 +12,8 @@ module FnordMetric::GaugeCalculations
    (_v.to_f / (sync_redis.get(tick_key(_t, :"value-count"))||1).to_i)
  }

  def ticks_in(r)
    (((r.last-r.first)/tick.to_f).ceil+1).times.map{ |n| tick_at(r.first + tick*(n-1)) }
  def ticks_in(r, _tick=tick)
    (((r.last-r.first)/_tick.to_f).ceil+1).times.map{ |n| tick_at(r.first + _tick*(n-1), _tick) }
  end

  def values_in(range)
@@ -75,4 +75,15 @@ module FnordMetric::GaugeCalculations
    (sync_redis.get(tick_key(time, :count))||0).to_i
  end

  def fraction_values_in(range)
    Hash.new{ |h,k| h[k] = [0,0] }.tap do |vals|
      ticks_in(range, retention).each do |_tick|
        sync_redis.hgetall(retention_key(_tick)).each do |k, v|
          kx = k.split("-")
          vals[kx.first.to_i][kx.last == "divisor" ? 1 : 0] += v.to_f
        end
      end
    end
  end

end
 No newline at end of file
+4 −0
Original line number Diff line number Diff line
@@ -87,6 +87,10 @@ module FnordMetric::GaugeModifiers
    at = ctx.send(:time)
    value = parse_numeric(value)

    if prog
      raise "FIXPAUL: not yet implemented: progressive fraction gauges"
    end

    ctx.redis_exec(:hincrby, retention_key(at), "#{tick_at(at)}-#{part}", value).callback do 
      ctx.redis_exec :expire,  retention_key(at)
    end
+28 −22
Original line number Diff line number Diff line
@@ -17,29 +17,33 @@ class FnordMetric::TimeseriesGauge < FnordMetric::Gauge
    interval = parse_interval(event["interval"])
    colors = FnordMetric::COLORS.dup

    @series =  Hash[@opts[:series].map do |series|
      [series, {
        :color => colors.unshift(colors.pop).first,
        :timeseries => FnordMetric::Timeseries.new
      }]
    end]

    @series_render = series_gauges.map do |series, gauge|
      gauge_vals = gauge.values_in(interval).to_a

      @series_numbers[series][:total] = gauge_vals.inject(0) do |s, (t, v)|
        s += v.to_i
      end
    @series = Hash.new
    
      {
        :name  => series,
        :color => @series_colors[series],
        :data  => gauge_vals
          .sort{ |a,b| a[0] <=> b[0] }
          .map { |t,v| { :x => t, :y => v.to_i } }
      }
    @opts[:series].each do |series|
      @series[series] = { :color => colors.unshift(colors.pop).first }
    end

    puts fraction_values_in(interval).inspect

    @series_render = []
    @series_numbers = []

    # @series_render = series_gauges.map do |series, gauge|
    #   gauge_vals = gauge.values_in(interval).to_a

    #   @series_numbers[series][:total] = gauge_vals.inject(0) do |s, (t, v)|
    #     s += v.to_i
    #   end

    #   {
    #     :name  => series,
    #     :color => @series_colors[series],
    #     :data  => gauge_vals
    #       .sort{ |a,b| a[0] <=> b[0] }
    #       .map { |t,v| { :x => t, :y => v.to_i } }
    #   }
    # end

    render_page(:timeseries_gauge)
  end

@@ -65,8 +69,10 @@ private
    if @calculate == :average
      incr_dividend(ctx, series_name, value)
      incr_divisor(ctx, series_name, 1)
    else
    elsif @calculate == :sum
      incr_dividend(ctx, series_name, value)
    elsif @calculate == :progressive_sum
      incr_dividend(ctx, series_name, value, true)
    end
  end