class Metrics::Instruments::Timer

Constants

DEFAULT_PERCENTILES

Attributes

duration_unit[R]
rate_unit[R]
units[R]

Public Class Methods

new(options = {}) click to toggle source
# 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

Public Instance Methods

as_json(*_) click to toggle source
# 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() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 24
def clear
  @meter.clear
  @histogram.clear
end
count() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 42
def count
  @histogram.count
end
fifteen_minute_rate() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 46
def fifteen_minute_rate
  @meter.fifteen_minute_rate(@rate_unit)
end
five_minute_rate() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 50
def five_minute_rate
  @meter.five_minute_rate(@rate_unit)
end
max() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 62
def max
  scale_duration_to_ns @histogram.max, @duration_unit
end
mean() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 70
def mean
  scale_duration_to_ns @histogram.mean, @duration_unit
end
mean_rate() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 58
def mean_rate
  @meter.mean_rate(@rate_unit)
end
min() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 66
def min
  scale_duration_to_ns @histogram.min, @duration_unit
end
one_minute_rate() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 54
def one_minute_rate
  @meter.one_minute_rate(@rate_unit)
end
quantiles(percentiles = DEFAULT_PERCENTILES) click to toggle source
# 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() click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 74
def std_dev
  scale_duration_to_ns @histogram.std_dev, @duration_unit
end
time() { || ... } click to toggle source
# 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(*_) click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 117
def to_json(*_)
  as_json.to_json
end
update(duration, unit) click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 29
def update(duration, unit)
  update_timer(convert_to_ns(duration, unit))
end
update_timer(duration) click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 91
def update_timer(duration)
  if duration >= 0
    @histogram.update(duration)
    @meter.mark
  end
end
values() click to toggle source
# 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

Private Instance Methods

scale_duration_to_ns(value, unit) click to toggle source
# File lib/ruby-metrics/instruments/timer.rb, line 122
def scale_duration_to_ns(value, unit)
  value.to_f / convert_to_ns(1.0, unit)
end