Class: Metriks::SimpleMovingAverage
- Inherits:
-
Object
- Object
- Metriks::SimpleMovingAverage
- Defined in:
- lib/metriks/simple_moving_average.rb
Constant Summary collapse
- INTERVAL =
5.0
- SECONDS_PER_MINUTE =
60.0
- ONE_MINUTE =
1
- FIVE_MINUTES =
5
- FIFTEEN_MINUTES =
15
Class Method Summary collapse
Instance Method Summary collapse
- #clear ⇒ Object
-
#initialize(duration, interval) ⇒ SimpleMovingAverage
constructor
A new instance of SimpleMovingAverage.
- #rate ⇒ Object
- #tick ⇒ Object
- #update(value) ⇒ Object
Constructor Details
#initialize(duration, interval) ⇒ SimpleMovingAverage
Returns a new instance of SimpleMovingAverage.
24 25 26 27 28 29 30 |
# File 'lib/metriks/simple_moving_average.rb', line 24 def initialize(duration, interval) @interval = interval @duration = duration @values = Array.new((duration / interval).to_i) { Atomic.new(nil) } @index = Atomic.new(0) end |
Class Method Details
.new_m1 ⇒ Object
12 13 14 |
# File 'lib/metriks/simple_moving_average.rb', line 12 def self.new_m1 new(ONE_MINUTE * SECONDS_PER_MINUTE, INTERVAL) end |
.new_m15 ⇒ Object
20 21 22 |
# File 'lib/metriks/simple_moving_average.rb', line 20 def self.new_m15 new(FIFTEEN_MINUTES * SECONDS_PER_MINUTE, INTERVAL) end |
.new_m5 ⇒ Object
16 17 18 |
# File 'lib/metriks/simple_moving_average.rb', line 16 def self.new_m5 new(FIVE_MINUTES * SECONDS_PER_MINUTE, INTERVAL) end |
Instance Method Details
#clear ⇒ Object
32 33 34 35 36 37 |
# File 'lib/metriks/simple_moving_average.rb', line 32 def clear @values.each do |value| value.value = nil end @index.value = 0 end |
#rate ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/metriks/simple_moving_average.rb', line 47 def rate num, count = 0.0, 0.0 @values.each do |value| if v = value.value num += v count += 1 end end num / count / @interval.to_f end |
#tick ⇒ Object
43 44 45 |
# File 'lib/metriks/simple_moving_average.rb', line 43 def tick @index.update { |v| v < @values.length - 1 ? v + 1 : 0 } end |
#update(value) ⇒ Object
39 40 41 |
# File 'lib/metriks/simple_moving_average.rb', line 39 def update(value) @values[@index.value].update { |v| v ? v + value : value } end |