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