class MetricsMachine::Monitor

Attributes

monitors[R]
reporter[R]

Public Class Methods

default_prefix() click to toggle source
# File lib/metrics_machine/monitor.rb, line 61
def self.default_prefix
  `hostname`.strip.split('.').reverse.join('.')
end
new(reporter, options = {}) click to toggle source
# File lib/metrics_machine/monitor.rb, line 9
def initialize reporter, options = {}, &block
  @reporter = reporter
  @monitors = {}
  @prefix = options.fetch(:prefix, self.class.default_prefix)
  configure &block if block_given?
end

Public Instance Methods

configure(&block) click to toggle source
# File lib/metrics_machine/monitor.rb, line 24
def configure &block
  instance_eval &block
end
monitor(symbol_or_class, *args) click to toggle source
# File lib/metrics_machine/monitor.rb, line 42
def monitor symbol_or_class, *args
  key = nil
  klass = case symbol_or_class
            when Symbol
              MetricsMachine.const_get(symbol_or_class.to_s.capitalize)
            when Class
              symbol_or_class
            when Hash
              key = symbol_or_class.keys.first
              symbol_or_class[key]
          end

  c = klass.new *args
  key ||= c.key if c.respond_to? :key
  key ||= klass.key if klass.respond_to? :key
  key ||= ActiveSupport::Inflector.underscore(klass.to_s.gsub('MetricsMachine::', ''))
  monitors[key] = c
end
prefix(*args) click to toggle source
# File lib/metrics_machine/monitor.rb, line 16
def prefix *args
  if args.empty?
    @prefix
  else
    @prefix = args.first
  end
end
report(name, monitor) click to toggle source
# File lib/metrics_machine/monitor.rb, line 36
def report name, monitor
  monitor.statistics.each do |k,v|
    reporter.gauge "#{prefix}.#{name}.#{ActiveSupport::Inflector.underscore(k)}", v
  end
end
run!() click to toggle source
# File lib/metrics_machine/monitor.rb, line 28
def run!
  monitors.each do |name,monitor|
    EM.add_periodic_timer(monitor.interval) do
      report name, monitor
    end
  end
end