Class: Metriks::Meter
- Inherits:
-
Object
- Object
- Metriks::Meter
- Defined in:
- lib/metriks/meter.rb
Constant Summary collapse
- TICK_INTERVAL =
5.0
Instance Method Summary collapse
- #clear ⇒ Object
- #count ⇒ Object
- #fifteen_minute_rate ⇒ Object
- #five_minute_rate ⇒ Object
-
#initialize(averager_klass = Metriks::EWMA) ⇒ Meter
constructor
A new instance of Meter.
- #mark(val = 1) ⇒ Object
- #mean_rate ⇒ Object
- #one_minute_rate ⇒ Object
- #stop ⇒ Object
- #tick ⇒ Object
- #tick_if_nessesary ⇒ Object
Constructor Details
#initialize(averager_klass = Metriks::EWMA) ⇒ Meter
Returns a new instance of Meter.
9 10 11 12 13 14 15 16 17 |
# File 'lib/metriks/meter.rb', line 9 def initialize(averager_klass = Metriks::EWMA) @count = Atomic.new(0) @start_time = Time.now.to_f @last_tick = Atomic.new(@start_time) @m1_rate = averager_klass.new_m1 @m5_rate = averager_klass.new_m5 @m15_rate = averager_klass.new_m15 end |
Instance Method Details
#clear ⇒ Object
19 20 21 22 23 24 25 26 |
# File 'lib/metriks/meter.rb', line 19 def clear @count.value = 0 @start_time = Time.now.to_f @last_tick.value = @start_time @m1_rate.clear @m5_rate.clear @m15_rate.clear end |
#count ⇒ Object
54 55 56 |
# File 'lib/metriks/meter.rb', line 54 def count @count.value end |
#fifteen_minute_rate ⇒ Object
68 69 70 71 |
# File 'lib/metriks/meter.rb', line 68 def fifteen_minute_rate tick_if_nessesary @m15_rate.rate end |
#five_minute_rate ⇒ Object
63 64 65 66 |
# File 'lib/metriks/meter.rb', line 63 def five_minute_rate tick_if_nessesary @m5_rate.rate end |
#mark(val = 1) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/metriks/meter.rb', line 46 def mark(val = 1) tick_if_nessesary @count.update { |v| v + val } @m1_rate.update(val) @m5_rate.update(val) @m15_rate.update(val) end |
#mean_rate ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/metriks/meter.rb', line 73 def mean_rate if count == 0 return 0.0 else elapsed = Time.now.to_f - @start_time count / elapsed end end |
#one_minute_rate ⇒ Object
58 59 60 61 |
# File 'lib/metriks/meter.rb', line 58 def one_minute_rate tick_if_nessesary @m1_rate.rate end |
#stop ⇒ Object
82 83 |
# File 'lib/metriks/meter.rb', line 82 def stop end |
#tick ⇒ Object
28 29 30 31 32 |
# File 'lib/metriks/meter.rb', line 28 def tick @m1_rate.tick @m5_rate.tick @m15_rate.tick end |
#tick_if_nessesary ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/metriks/meter.rb', line 34 def tick_if_nessesary old_tick = @last_tick.value new_tick = Time.new.to_f age = new_tick - old_tick if age > TICK_INTERVAL && @last_tick.compare_and_swap(old_tick, new_tick) required_ticks = age / TICK_INTERVAL required_ticks.to_i.times do tick end end end |