class Metricular::Metric
Public Class Methods
data()
click to toggle source
Return an array of recorded metric data in [date, value] format
# File lib/metricular/metric.rb, line 28 def self.data all.map { |metric| [metric.date.to_time.to_i * 1000, metric.value.to_f] } end
define(name, block, options = {})
click to toggle source
Define a new metric for recording
# File lib/metricular/metric.rb, line 9 def self.define(name, block, options = {}) @metrics ||= {} @metrics[name] = [block, options] scope name, -> { where(name: name) } end
mean()
click to toggle source
Stats
# File lib/metricular/metric.rb, line 36 def self.mean (data.sum { |date, val| val }) / count.to_f end
metrics()
click to toggle source
Return all metrics that have been defined
# File lib/metricular/metric.rb, line 4 def self.metrics @metrics end
record(name, date = Time.now.utc)
click to toggle source
Record data for the specified metric, for the specified date
# File lib/metricular/metric.rb, line 21 def self.record(name, date = Time.now.utc) block, options = @metrics[name] value = block.call(date) find_or_create_by(name: name, date: date) { |metric| metric.value = value } end
record_all()
click to toggle source
Record data for all defined metrics
# File lib/metricular/metric.rb, line 16 def self.record_all @metrics.each { |name, _| record(name) } end
standard_deviation()
click to toggle source
# File lib/metricular/metric.rb, line 46 def self.standard_deviation return Math.sqrt(variance) end
variance()
click to toggle source
# File lib/metricular/metric.rb, line 40 def self.variance mean = self.mean count = self.count (data.sum { |date, val| (val - mean) ** 2 }) / (count - 1).to_f end