class FnordMetric::Histogram
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/fnordmetric/histogram.rb, line 3 def initialize super{ |h,k| h[k]=0 } end
Public Instance Methods
[](key)
click to toggle source
Calls superclass method
# File lib/fnordmetric/histogram.rb, line 11 def [](key) super(key.to_f) end
[]=(key, val)
click to toggle source
Calls superclass method
# File lib/fnordmetric/histogram.rb, line 15 def []=(key, val) super(key.to_f, val) end
histogram(windows)
click to toggle source
# File lib/fnordmetric/histogram.rb, line 27 def histogram(windows) windows = histogram_windows(windows) unless windows.is_a?(Array) Hash[windows.map{ |w| [w,0] }].tap do |histo| self.each do |k,v| histo.detect do |win, wval| histo[win] += v if win.include?(k) end end end end
json_histogram(windows)
click to toggle source
# File lib/fnordmetric/histogram.rb, line 38 def json_histogram(windows) histogram(windows).to_a.sort do |a, b| a[0].first <=> b[0].first end.map do |r, v| [r.size == 1.0 ? r.last.to_s : json_value(r), v.to_i] end.to_json end
json_value(r)
click to toggle source
# File lib/fnordmetric/histogram.rb, line 46 def json_value(r) "#{r.first.round(@opts[:precision]).to_s}-#{r.last.round(@opts[:precision]).to_s}" end
max()
click to toggle source
# File lib/fnordmetric/histogram.rb, line 23 def max keys.sort.last.to_i end
min()
click to toggle source
# File lib/fnordmetric/histogram.rb, line 19 def min keys.sort.first.to_i end
set_opts(opts = {})
click to toggle source
# File lib/fnordmetric/histogram.rb, line 7 def set_opts(opts = {}) @opts = opts end
Private Instance Methods
histogram_windows(windows)
click to toggle source
# File lib/fnordmetric/histogram.rb, line 52 def histogram_windows(windows) _min = min _max = max return [(0..1)] if (_max-_min == 0) windows.times .inject((_min.._max) .step(((_max-_min)/windows.to_f)).to_a << _max){ |a,n| a[n]=(a[n]..a[n+1]); a }.take(windows) end