Class: Metrics::Instruments::Timer
- Inherits:
-
Instrument
- Object
- Instrument
- Metrics::Instruments::Timer
- Includes:
- TimeConversion
- Defined in:
- lib/ruby-metrics/instruments/timer.rb
Constant Summary
Constants included from TimeConversion
Instance Attribute Summary collapse
-
#duration_unit ⇒ Object
readonly
Returns the value of attribute duration_unit.
-
#rate_unit ⇒ Object
readonly
Returns the value of attribute rate_unit.
-
#units ⇒ Object
readonly
Returns the value of attribute units.
Instance Method Summary collapse
- #as_json(*_) ⇒ Object
- #clear ⇒ Object
- #count ⇒ Object
- #fifteen_minute_rate ⇒ Object
- #five_minute_rate ⇒ Object
-
#initialize(options = {}) ⇒ Timer
constructor
A new instance of Timer.
- #max ⇒ Object
- #mean ⇒ Object
- #mean_rate ⇒ Object
- #min ⇒ Object
- #one_minute_rate ⇒ Object
- #quantiles(percentiles = [0.99,0.97,0.95,0.75,0.5,0.25]) ⇒ Object
- #std_dev ⇒ Object
- #time(&block) ⇒ Object
- #to_json(*_) ⇒ Object
- #update(duration, unit) ⇒ Object
- #update_timer(duration) ⇒ Object
- #values ⇒ Object
Methods included from TimeConversion
#convert_to_ns, #scale_time_units
Methods inherited from Instrument
Constructor Details
#initialize(options = {}) ⇒ Timer
Returns a new instance of Timer.
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 11 def initialize( = {}) @meter = Meter.new @histogram = ExponentialHistogram.new @duration_unit = [:duration_unit] || :seconds @rate_unit = [:rate_unit] || :seconds @units = [:units] clear end |
Instance Attribute Details
#duration_unit ⇒ Object (readonly)
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 (readonly)
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 (readonly)
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
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 103 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([0.25, 0.50, 0.75, 0.95, 0.97, 0.98, 0.99]), :unit => @duration_unit } } end |
#clear ⇒ Object
22 23 24 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 22 def clear @histogram.clear end |
#count ⇒ Object
40 41 42 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 40 def count @histogram.count end |
#fifteen_minute_rate ⇒ Object
44 45 46 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 44 def fifteen_minute_rate @meter.fifteen_minute_rate(@rate_unit) end |
#five_minute_rate ⇒ Object
48 49 50 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 48 def five_minute_rate @meter.five_minute_rate(@rate_unit) end |
#max ⇒ Object
60 61 62 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 60 def max scale_duration_to_ns @histogram.max, @duration_unit end |
#mean ⇒ Object
68 69 70 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 68 def mean scale_duration_to_ns @histogram.mean, @duration_unit end |
#mean_rate ⇒ Object
56 57 58 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 56 def mean_rate @meter.mean_rate(@rate_unit) end |
#min ⇒ Object
64 65 66 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 64 def min scale_duration_to_ns @histogram.min, @duration_unit end |
#one_minute_rate ⇒ Object
52 53 54 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 52 def one_minute_rate @meter.one_minute_rate(@rate_unit) end |
#quantiles(percentiles = [0.99,0.97,0.95,0.75,0.5,0.25]) ⇒ Object
76 77 78 79 80 81 82 83 84 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 76 def quantiles(percentiles = [0.99,0.97,0.95,0.75,0.5,0.25]) result = {} @histogram.quantiles(percentiles).each do |k,v| result[k] = scale_duration_to_ns v, @duration_unit end result end |
#std_dev ⇒ Object
72 73 74 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 72 def std_dev scale_duration_to_ns @histogram.std_dev, @duration_unit end |
#time(&block) ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 31 def time(&block) start_time = Time.now.to_f result = block.call 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
122 123 124 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 122 def to_json(*_) as_json.to_json end |
#update(duration, unit) ⇒ Object
26 27 28 29 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 26 def update(duration, unit) mult = convert_to_ns(1, unit) self.update_timer(duration * mult) end |
#update_timer(duration) ⇒ Object
96 97 98 99 100 101 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 96 def update_timer(duration) if duration >= 0 @histogram.update(duration) @meter.mark end end |
#values ⇒ Object
86 87 88 89 90 91 92 93 94 |
# File 'lib/ruby-metrics/instruments/timer.rb', line 86 def values result = [] @histogram.values.each do |value| result << (scale_duration_to_ns value, @duration_unit) end result end |