Sha256: abc5a84dcbcaa6cbb8d3378699a5bffc1b62d729d08c75be7e0c07837d727934

Contents?: true

Size: 1.54 KB

Versions: 19

Compression:

Stored size: 1.54 KB

Contents

module FnordMetric::GaugeCalculations

  @@avg_per_session_proc = proc{ |_v, _t|
    (_v.to_f / (redis.get(tick_key(_t, :"sessions-count"))||1).to_i)
  }

  @@count_per_session_proc = proc{ |_v, _t|
    (redis.get(tick_key(_t, :"sessions-count"))||0).to_i
  }

  @@avg_per_count_proc = proc{ |_v, _t|
    (_v.to_f / (redis.get(tick_key(_t, :"value-count"))||1).to_i)
  }

  def value_at(time, opts={}, &block)
    _t = tick_at(time)
    _v = redis.hget(key, _t)

    calculate_value(_v, _t, opts, block)
  end

  def values_at(times, opts={}, &block)
    times = times.map{ |_t| tick_at(_t) }
    Hash.new.tap do |ret|
      redis.hmget(key, *times).each_with_index do |_v, _n|
        _t = times[_n]
        ret[_t] = calculate_value(_v, _t, opts, block)
      end
    end
  end

  def values_in(range, opts={}, &block)
    values_at((tick_at(range.first)..range.last).step(tick))
  end

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

  def field_values_at(time, opts={}, &block)
    opts[:max_fields] ||= 50
    redis.zrevrange(
      tick_key(time), 
      0, opts[:max_fields]-1, 
      :withscores => true
    ).in_groups_of(2).map do |key, val|
      [key, calculate_value(val, time, opts, block)]
    end
  end

  def field_values_total(time)
    (redis.get(tick_key(time, :count))||0).to_i
  end

  def redis
    @opts[:redis]
  end

end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
fnordmetric-0.7.4 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.7.3 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.7.1 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.7.0 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.6.6 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.6.5 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.6.4 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.6.3 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.6.2 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.6.1 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.6.0 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.5.9 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.5.8 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.5.7 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.5.6 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.5.5 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.5.4 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.5.3 lib/fnordmetric/gauge_calculations.rb
fnordmetric-0.5.2 lib/fnordmetric/gauge_calculations.rb