class Leafy::Core::Meter
Constants
- TICK_INTERVAL
Public Class Methods
new(clock = Clock.default_clock)
click to toggle source
Creates a new {@link Meter}. @param clock the clock to use for the meter ticks
# File lib/leafy/core/meter.rb, line 18 def initialize(clock = Clock.default_clock) @clock = clock; @startTime = clock.tick @lastTick = Concurrent::AtomicFixnum.new(@startTime)#AtomicLong.new(startTime) @count = Adder.new @m1Rate = EWMA.oneMinuteEWMA @m5Rate = EWMA.fiveMinuteEWMA @m15Rate = EWMA.fifteenMinuteEWMA end
Public Instance Methods
count()
click to toggle source
# File lib/leafy/core/meter.rb, line 40 def count @count.sum end
fifteen_minute_rate()
click to toggle source
# File lib/leafy/core/meter.rb, line 45 def fifteen_minute_rate tickIfNecessary @m15Rate.rate end
five_minute_rate()
click to toggle source
# File lib/leafy/core/meter.rb, line 51 def five_minute_rate tickIfNecessary @m5Rate.rate end
mark(n = 1)
click to toggle source
Mark the occurrence of an event.
# File lib/leafy/core/meter.rb, line 30 def mark(n = 1) tickIfNecessary @count.add(n) @m1Rate.update(n) @m5Rate.update(n) @m15Rate.update(n) n end
mean_rate()
click to toggle source
# File lib/leafy/core/meter.rb, line 63 def mean_rate if count == 0 0.0 else elapsed = @clock.tick - @startTime count * 1000000000.0 / elapsed end end
one_minute_rate()
click to toggle source
# File lib/leafy/core/meter.rb, line 57 def one_minute_rate tickIfNecessary @m1Rate.rate end
Private Instance Methods
tickIfNecessary()
click to toggle source
# File lib/leafy/core/meter.rb, line 74 def tickIfNecessary oldTick = @lastTick.value #.get newTick = @clock.tick age = newTick - oldTick if age > TICK_INTERVAL newIntervalStartTick = newTick - age % TICK_INTERVAL if (@lastTick.compare_and_set(oldTick, newIntervalStartTick)) requiredTicks = age / TICK_INTERVAL requiredTicks.to_i.times do @m1Rate.tick @m5Rate.tick @m15Rate.tick end end end end