class Stackeye::Metrics::Base
Public Class Methods
new()
click to toggle source
# File lib/stackeye/metrics/base.rb, line 10 def initialize @data = { timestamp: Time.now.to_i } end
Public Instance Methods
filepath()
click to toggle source
# File lib/stackeye/metrics/base.rb, line 14 def filepath return @filepath if defined?(@filepath) @filepath ||= begin path = Stackeye::Tools::Database::DATA_PATH name = self.class.name.split('::').last.downcase "#{path}/#{name}.json" end end
get()
click to toggle source
# File lib/stackeye/metrics/base.rb, line 32 def get return @get if defined?(@get) @get ||= Stackeye::Tools::Database.get(filepath) end
mean(key)
click to toggle source
# File lib/stackeye/metrics/base.rb, line 45 def mean(key) @mean ||= {} return @mean[key] if @mean.key?(key) values = pluck(key) return @mean[key] = 0.0 if values.empty? @mean[key] = values.sum / values.length.to_f end
median(key)
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/stackeye/metrics/base.rb, line 56 def median(key) @median ||= {} return @median[key] if @median.key?(key) values = pluck(key) return @median[key] = 0.0 if values.empty? values_sorted = values.sort values_halved = values.length / 2.0 values_halved_sorted = values_sorted[values_halved] return @median[key] = values_halved_sorted unless (values.length % 2).zero? @median[key] = (values_sorted[values_halved - 1.0] + values_halved_sorted) / 2.0 end
mode(key)
click to toggle source
rubocop:enable Metrics/AbcSize
# File lib/stackeye/metrics/base.rb, line 72 def mode(key) @mode ||= {} return @mode[key] if @mode.key?(key) values = pluck(key) return @mode[key] = 0.0 if values.empty? values_distro = values.each_with_object(Hash.new(0)) { |val, hsh| hsh[val] += 1 } values_top_two = values_distro.sort_by { |_, val| -val }.take(2) @mode[key] = values_top_two.first.first end
pluck(key)
click to toggle source
# File lib/stackeye/metrics/base.rb, line 38 def pluck(key) @pluck ||= {} return @pluck[key] if @pluck.key?(key) @pluck[key] = get.collect { |hash| hash[key] } end
range(key)
click to toggle source
# File lib/stackeye/metrics/base.rb, line 84 def range(key) @range ||= {} return @range[key] if @range.key?(key) values = pluck(key) return @range[key] = 0.0 if values.empty? values_sorted = values.sort @mode[key] = values_sorted.last - values_sorted.first end
set()
click to toggle source
# File lib/stackeye/metrics/base.rb, line 25 def set generate_data return if @data.empty? Stackeye::Tools::Database.set(filepath, @data) end