Class: Drone::EWMA
- Inherits:
-
Object
- Object
- Drone::EWMA
- Defined in:
- lib/drone/utils/ewma.rb
Constant Summary collapse
- M1_ALPHA =
(1 - Math.exp(-5 / 60.0)).freeze
- M5_ALPHA =
(1 - Math.exp(-5 / 60.0 / 5)).freeze
- M15_ALPHA =
(1 - Math.exp(-5 / 60.0 / 15)).freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(name, alpha, interval) ⇒ EWMA
constructor
interval: in ms.
- #rate(as = :seconds) ⇒ Object
- #tick ⇒ Object
- #update(n) ⇒ Object
Constructor Details
#initialize(name, alpha, interval) ⇒ EWMA
interval: in ms
23 24 25 26 27 28 |
# File 'lib/drone/utils/ewma.rb', line 23 def initialize(name, alpha, interval) @alpha = alpha @interval = interval.to_f # * (1000*1000) @uncounted = Drone::request_number("#{name}:uncounted", 0) @rate = Drone::request_number("#{name}:rate", nil) end |
Class Method Details
.fifteen_minutes_ewma(id) ⇒ Object
17 18 19 |
# File 'lib/drone/utils/ewma.rb', line 17 def self.fifteen_minutes_ewma(id) new(id, M15_ALPHA, 5000) end |
.five_minutes_ewma(id) ⇒ Object
13 14 15 |
# File 'lib/drone/utils/ewma.rb', line 13 def self.five_minutes_ewma(id) new(id, M5_ALPHA, 5000) end |
.one_minute_ewma(id) ⇒ Object
9 10 11 |
# File 'lib/drone/utils/ewma.rb', line 9 def self.one_minute_ewma(id) new(id, M1_ALPHA, 5000) end |
Instance Method Details
#rate(as = :seconds) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/drone/utils/ewma.rb', line 47 def rate(as = :seconds) case as when :ms then @rate.get when :seconds then @rate.get * 1000 end end |
#tick ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/drone/utils/ewma.rb', line 34 def tick() count = @uncounted.get_and_set(0) instant_rate = count / @interval rate = @rate.get if rate @rate.inc( @alpha * (instant_rate - rate) ) else @rate.set( instant_rate ) end end |
#update(n) ⇒ Object
30 31 32 |
# File 'lib/drone/utils/ewma.rb', line 30 def update(n) @uncounted.inc(n) end |