class Metrics::Instruments::Meter

Constants

FIFTEEN_MINUTE_FACTOR
FIVE_MINUTE_FACTOR
INTERVAL_SECONDS

From www.teamquest.com/pdfs/whitepaper/ldavg2.pdf

ONE_MINUTE_FACTOR

Attributes

count[R]
counted[R]
units[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 18
def initialize(options = {})
  @units = options[:units]
  clear

  @timer_thread = Thread.new do
    begin
      loop do
        tick
        sleep(INTERVAL_SECONDS)
      end
    rescue Exception => e
      logger.error "Error in timer thread: #{e.class.name}: #{e}\n  #{e.backtrace.join("\n  ")}"
    end
  end
end

Public Instance Methods

as_json(*_) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 86
def as_json(*_)
  {
    :one_minute_rate      => one_minute_rate,
    :five_minute_rate     => five_minute_rate,
    :fifteen_minute_rate  => fifteen_minute_rate
  }
end
calc_rate(rate, factor, count) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 45
def calc_rate(rate, factor, count)
  rate.to_f + factor.to_f * (count.to_f - rate.to_f)
end
clear() click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 34
def clear
  @one_minute_rate = @five_minute_rate = @fifteen_minute_rate = 0.0
  @count  = 0
  @initialized = false
  @start_time = Time.now.to_f
end
fifteen_minute_rate(rate_unit = :seconds) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 72
def fifteen_minute_rate(rate_unit = :seconds)
  convert_to_ns @fifteen_minute_rate, rate_unit
end
five_minute_rate(rate_unit = :seconds) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 68
def five_minute_rate(rate_unit = :seconds)
  convert_to_ns @five_minute_rate, rate_unit
end
mark(count = 1) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 41
def mark(count = 1)
  @count += count
end
mean_rate(rate_unit = :seconds) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 76
def mean_rate(rate_unit = :seconds)
  if @count == 0
    0.0
  else
    elapsed = Time.now.to_f - @start_time.to_f
    scale_factor = scale_time_units(:seconds, rate_unit)
    @count.to_f / (elapsed * scale_factor)
  end
end
one_minute_rate(rate_unit = :seconds) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 64
def one_minute_rate(rate_unit = :seconds)
  convert_to_ns @one_minute_rate, rate_unit
end
tick() click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 49
def tick
  count = @count.to_f / Seconds.to_nsec(INTERVAL_SECONDS).to_f

  if @initialized
    @one_minute_rate      = calc_rate(@one_minute_rate,     ONE_MINUTE_FACTOR,     count)
    @five_minute_rate     = calc_rate(@five_minute_rate,    FIVE_MINUTE_FACTOR,    count)
    @fifteen_minute_rate  = calc_rate(@fifteen_minute_rate, FIFTEEN_MINUTE_FACTOR, count)
  else
    @one_minute_rate = @five_minute_rate = @fifteen_minute_rate  = count
    @initialized = true
  end

  @count = 0
end
to_json(*_) click to toggle source
# File lib/ruby-metrics/instruments/meter.rb, line 94
def to_json(*_)
  as_json.to_json
end