Class: Metricular::Metric

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/metricular/metric.rb

Class Method Summary collapse

Class Method Details

.dataObject

Return an array of recorded metric data in [date, value] format



28
29
30
# 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 = {}) ⇒ Object

Define a new metric for recording



9
10
11
12
13
# File 'lib/metricular/metric.rb', line 9

def self.define(name, block, options = {})
  @metrics ||= {}
  @metrics[name] = [block, options]
  scope name, -> { where(name: name) }
end

.meanObject

Stats



36
37
38
# File 'lib/metricular/metric.rb', line 36

def self.mean
  (data.sum { |date, val| val }) / count.to_f
end

.metricsObject

Return all metrics that have been defined



4
5
6
# File 'lib/metricular/metric.rb', line 4

def self.metrics
  @metrics
end

.record(name, date = Time.now.utc) ⇒ Object

Record data for the specified metric, for the specified date



21
22
23
24
25
# 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_allObject

Record data for all defined metrics



16
17
18
# File 'lib/metricular/metric.rb', line 16

def self.record_all
  @metrics.each { |name, _| record(name) }
end

.standard_deviationObject



46
47
48
# File 'lib/metricular/metric.rb', line 46

def self.standard_deviation
  return Math.sqrt(variance)
end

.varianceObject



40
41
42
43
44
# 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