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