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
trending(take = 100)
click to toggle source
# File lib/fnordmetric/toplist.rb, line 53 def trending(take = 100) @toplist.to_a.map{ |k,v| [k, trend(k)] }.sort{ |a,b| b.last <=> a.last }[0..(take-1)] end
value(item)
click to toggle source
# File lib/fnordmetric/toplist.rb, line 35 def value(item) @toplist[item].to_f end