/usr/lib/ruby/vendor_ruby/metriks/meter.rb is in ruby-metriks 0.9.9.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | require 'atomic'
require 'metriks/ewma'
module Metriks
class Meter
TICK_INTERVAL = 5.0
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
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
def tick
@m1_rate.tick
@m5_rate.tick
@m15_rate.tick
end
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
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
def count
@count.value
end
def one_minute_rate
tick_if_nessesary
@m1_rate.rate
end
def five_minute_rate
tick_if_nessesary
@m5_rate.rate
end
def fifteen_minute_rate
tick_if_nessesary
@m15_rate.rate
end
def mean_rate
if count == 0
return 0.0
else
elapsed = Time.now.to_f - @start_time
count / elapsed
end
end
def stop
end
end
end
|