Class: Metrics::Instruments::Timer
Constant Summary
collapse
- DEFAULT_PERCENTILES =
[0.25, 0.50, 0.75, 0.95, 0.97, 0.98, 0.99]
TimeConversion::UNITS
Instance Attribute Summary collapse
Instance Method Summary
collapse
#convert_to_ns, #scale_time_units
Methods inherited from Instrument
#tag, #tags
Constructor Details
#initialize(options = {}) ⇒ Timer
Returns a new instance of Timer.
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 13
def initialize(options = {})
@meter = Meter.new
@histogram = ExponentialHistogram.new
@duration_unit = options[:duration_unit] || :seconds
@rate_unit = options[:rate_unit] || :seconds
@units = options[:units]
clear
end
|
Instance Attribute Details
#duration_unit ⇒ Object
Returns the value of attribute duration_unit.
9
10
11
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 9
def duration_unit
@duration_unit
end
|
#rate_unit ⇒ Object
Returns the value of attribute rate_unit.
9
10
11
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 9
def rate_unit
@rate_unit
end
|
#units ⇒ Object
Returns the value of attribute units.
9
10
11
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 9
def units
@units
end
|
Instance Method Details
#as_json(*_) ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 98
def as_json(*_)
{
:count => count,
:rates => {
:one_minute_rate => one_minute_rate,
:five_minute_rate => five_minute_rate,
:fifteen_minute_rate => fifteen_minute_rate,
:unit => @rate_unit
},
:durations => {
:min => min,
:max => max,
:mean => mean,
:percentiles => quantiles,
:unit => @duration_unit
}
}
end
|
#clear ⇒ Object
24
25
26
27
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 24
def clear
@meter.clear
@histogram.clear
end
|
#count ⇒ Object
42
43
44
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 42
def count
@histogram.count
end
|
#fifteen_minute_rate ⇒ Object
46
47
48
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 46
def fifteen_minute_rate
@meter.fifteen_minute_rate(@rate_unit)
end
|
#five_minute_rate ⇒ Object
50
51
52
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 50
def five_minute_rate
@meter.five_minute_rate(@rate_unit)
end
|
#max ⇒ Object
62
63
64
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 62
def max
scale_duration_to_ns @histogram.max, @duration_unit
end
|
#mean ⇒ Object
70
71
72
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 70
def mean
scale_duration_to_ns @histogram.mean, @duration_unit
end
|
#mean_rate ⇒ Object
58
59
60
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 58
def mean_rate
@meter.mean_rate(@rate_unit)
end
|
#min ⇒ Object
66
67
68
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 66
def min
scale_duration_to_ns @histogram.min, @duration_unit
end
|
#one_minute_rate ⇒ Object
54
55
56
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 54
def one_minute_rate
@meter.one_minute_rate(@rate_unit)
end
|
#quantiles(percentiles = DEFAULT_PERCENTILES) ⇒ Object
78
79
80
81
82
83
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 78
def quantiles(percentiles = DEFAULT_PERCENTILES)
@histogram.quantiles(percentiles).inject({}) do |result, (k, v)|
result[k] = scale_duration_to_ns v, @duration_unit
result
end
end
|
#std_dev ⇒ Object
74
75
76
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 74
def std_dev
scale_duration_to_ns @histogram.std_dev, @duration_unit
end
|
#time ⇒ Object
33
34
35
36
37
38
39
40
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 33
def time
start_time = Time.now.to_f
result = yield
time_diff = Time.now.to_f - start_time
time_in_ns = convert_to_ns time_diff, :seconds
update_timer(time_in_ns)
result
end
|
#to_json(*_) ⇒ Object
117
118
119
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 117
def to_json(*_)
as_json.to_json
end
|
#update(duration, unit) ⇒ Object
29
30
31
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 29
def update(duration, unit)
update_timer(convert_to_ns(duration, unit))
end
|
#update_timer(duration) ⇒ Object
91
92
93
94
95
96
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 91
def update_timer(duration)
if duration >= 0
@histogram.update(duration)
@meter.mark
end
end
|
#values ⇒ Object
85
86
87
88
89
|
# File 'lib/ruby-metrics/instruments/timer.rb', line 85
def values
@histogram.values.map do |value|
scale_duration_to_ns value, @duration_unit
end
end
|