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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
require 'atomic'
require 'hitimes'
require 'metriks/meter'
require 'metriks/histogram'
module Metriks
class Timer
class Context
def initialize(timer)
@timer = timer
@interval = Hitimes::Interval.now
end
def restart
@interval = Hitimes::Interval.now
end
def stop
@interval.stop
@timer.update(@interval.duration)
end
end
def initialize(histogram = Metriks::Histogram.new_exponentially_decaying)
@meter = Metriks::Meter.new
@histogram = histogram
end
def clear
@meter.clear
@histogram.clear
end
def update(duration)
if duration >= 0
@meter.mark
@histogram.update(duration)
end
end
def time(callable = nil, &block)
callable ||= block
context = Context.new(self)
if callable.nil?
return context
end
begin
return callable.call
ensure
context.stop
end
end
def snapshot
@histogram.snapshot
end
def count
@histogram.count
end
def sum
@histogram.sum
end
def one_minute_rate
@meter.one_minute_rate
end
def five_minute_rate
@meter.five_minute_rate
end
def fifteen_minute_rate
@meter.fifteen_minute_rate
end
def mean_rate
@meter.mean_rate
end
def min
@histogram.min
end
def max
@histogram.max
end
def mean
@histogram.mean
end
def stddev
@histogram.stddev
end
def stop
@meter.stop
end
end
end
|