Class: Metriks::SimpleMovingAverage

Inherits:
Object
  • Object
show all
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

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_m1Object



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_m15Object



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_m5Object



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

#clearObject



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

#rateObject



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

#tickObject



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