class Riemann::MetricThread

Constants

INTERVAL

A metric thread is simple: it wraps some metric object which responds to <<, and every interval seconds, calls flush which replaces the object and calls a user specified function.

Attributes

interval[RW]
metric[RW]

Public Class Methods

new(klass, *klass_args, &block) click to toggle source

client = Riemann::Client.new m = MetricThread.new Mtrc::Rate do |rate|

client << rate

end

loop do

sleep rand
m << rand

end

# File lib/riemann/metric_thread.rb, line 22
def initialize(klass, *klass_args, &block)
  @klass = klass
  @klass_args = klass_args
  @block = block
  @interval = INTERVAL

  @metric = new_metric

  start
end

Public Instance Methods

<<(value) click to toggle source
# File lib/riemann/metric_thread.rb, line 33
def <<(value)
  @metric.<<(value)
end
flush() click to toggle source
# File lib/riemann/metric_thread.rb, line 41
def flush
  old = @metric
  @metric = new_metric
  @block[old]
end
new_metric() click to toggle source
# File lib/riemann/metric_thread.rb, line 37
def new_metric
  @klass.new(*@klass_args)
end
start() click to toggle source
# File lib/riemann/metric_thread.rb, line 47
def start
  raise 'already running' if @runner

  @running = true
  @runner = Thread.new do
    while @running
      sleep @interval
      begin
        flush
      rescue StandardError
        # ignore
      end
    end
    @runner = nil
  end
end
stop() click to toggle source
# File lib/riemann/metric_thread.rb, line 64
def stop
  stop!
  @runner.join
end
stop!() click to toggle source
# File lib/riemann/metric_thread.rb, line 69
def stop!
  @running = false
end