Class: Metricular::Metric
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Metricular::Metric
- Defined in:
- lib/metricular/metric.rb
Class Method Summary collapse
-
.data ⇒ Object
Return an array of recorded metric data in [date, value] format.
-
.define(name, block, options = {}) ⇒ Object
Define a new metric for recording.
-
.mean ⇒ Object
Stats.
-
.metrics ⇒ Object
Return all metrics that have been defined.
-
.record(name, date = Time.now.utc) ⇒ Object
Record data for the specified metric, for the specified date.
-
.record_all ⇒ Object
Record data for all defined metrics.
- .standard_deviation ⇒ Object
- .variance ⇒ Object
Class Method Details
.data ⇒ Object
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, = {}) @metrics ||= {} @metrics[name] = [block, ] scope name, -> { where(name: name) } end |
.mean ⇒ Object
Stats
36 37 38 |
# File 'lib/metricular/metric.rb', line 36 def self.mean (data.sum { |date, val| val }) / count.to_f end |
.metrics ⇒ Object
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, = @metrics[name] value = block.call(date) find_or_create_by(name: name, date: date) { |metric| metric.value = value } end |
.record_all ⇒ Object
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_deviation ⇒ Object
46 47 48 |
# File 'lib/metricular/metric.rb', line 46 def self.standard_deviation return Math.sqrt(variance) end |
.variance ⇒ Object
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 |