Class: Twingly::Metrics::Meter
- Inherits:
-
Object
- Object
- Twingly::Metrics::Meter
- Defined in:
- lib/twingly/metrics/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 = Twingly::Metrics::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 = Twingly::Metrics::EWMA) ⇒ Meter
Returns a new instance of Meter.
12 13 14 15 16 17 18 19 20 |
# File 'lib/twingly/metrics/meter.rb', line 12 def initialize(averager_klass = Twingly::Metrics::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
22 23 24 25 26 27 28 29 |
# File 'lib/twingly/metrics/meter.rb', line 22 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
57 58 59 |
# File 'lib/twingly/metrics/meter.rb', line 57 def count @count.value end |
#fifteen_minute_rate ⇒ Object
71 72 73 74 |
# File 'lib/twingly/metrics/meter.rb', line 71 def fifteen_minute_rate tick_if_nessesary @m15_rate.rate end |
#five_minute_rate ⇒ Object
66 67 68 69 |
# File 'lib/twingly/metrics/meter.rb', line 66 def five_minute_rate tick_if_nessesary @m5_rate.rate end |
#mark(val = 1) ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/twingly/metrics/meter.rb', line 49 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
76 77 78 79 80 81 |
# File 'lib/twingly/metrics/meter.rb', line 76 def mean_rate return 0.0 if count.zero? elapsed = Time.now.to_f - @start_time count / elapsed end |
#one_minute_rate ⇒ Object
61 62 63 64 |
# File 'lib/twingly/metrics/meter.rb', line 61 def one_minute_rate tick_if_nessesary @m1_rate.rate end |
#stop ⇒ Object
83 |
# File 'lib/twingly/metrics/meter.rb', line 83 def stop; end |
#tick ⇒ Object
31 32 33 34 35 |
# File 'lib/twingly/metrics/meter.rb', line 31 def tick @m1_rate.tick @m5_rate.tick @m15_rate.tick end |
#tick_if_nessesary ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/twingly/metrics/meter.rb', line 37 def tick_if_nessesary old_tick = @last_tick.value new_tick = Time.new.to_f age = new_tick - old_tick return unless 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 |