class FnordMetric::Toplist

Attributes

timelines[RW]
total[RW]

Public Class Methods

new(timeline = {}) click to toggle source
# File lib/fnordmetric/toplist.rb, line 5
def initialize(timeline = {})
  @total   = 0
  @toplist = Hash.new{ |h,k| h[k] = 0 }

  @timelines = Hash.new do |h,k|
    h[k] = Hash.new{ |h,k| h[k] = 0 }
  end
end

Public Instance Methods

incr_item(time, item, value) click to toggle source
# File lib/fnordmetric/toplist.rb, line 14
def incr_item(time, item, value)
  @toplist[item] += value.to_f
  @timelines[item][time] += value.to_f
  @total += value.to_f
end
percentage(item) click to toggle source
# File lib/fnordmetric/toplist.rb, line 31
def percentage(item)
  (@toplist[item].to_f / total.to_f) * 100.0
end
prepare!() click to toggle source
# File lib/fnordmetric/toplist.rb, line 20
def prepare!
  @toplist_arr = @toplist.to_a.sort do |a,b|
    b.last <=> a.last
  end
end
rank(item) click to toggle source
# File lib/fnordmetric/toplist.rb, line 47
def rank(item)
  prepare! unless @toplist_arr

  @toplist_arr.index([item, value(item)]) + 1
end
toplist(take = 100) click to toggle source
# File lib/fnordmetric/toplist.rb, line 26
def toplist(take = 100)
  prepare! unless @toplist_arr
  @toplist_arr[0..(take-1)]
end
trend(item) click to toggle source
# File lib/fnordmetric/toplist.rb, line 39
def trend(item)
  times = @timelines[item].keys.sort

  (@timelines[item][times.last] - 
  @timelines[item][times.first]) / 
  @timelines[item][times.first]
end
value(item) click to toggle source
# File lib/fnordmetric/toplist.rb, line 35
def value(item)
  @toplist[item].to_f
end