module MetricsMachine

Constants

VERSION

Public Class Methods

configure(&block) click to toggle source
# File lib/metrics_machine.rb, line 38
def self.configure &block
  monitor.configure &block
end
die_gracefully_on_signal() click to toggle source
# File lib/metrics_machine.rb, line 42
def self.die_gracefully_on_signal
  Signal.trap("INT")  { EM.stop }
  Signal.trap("TERM") { EM.stop }
end
monitor() click to toggle source
# File lib/metrics_machine.rb, line 34
def self.monitor
  @monitor ||= Monitor.new reporter
end
reporter() click to toggle source
# File lib/metrics_machine.rb, line 47
def self.reporter
  @statsd ||= Statsd.new(reporter_config['host'],reporter_config['port'])
end
start(options = {}) click to toggle source
# File lib/metrics_machine.rb, line 13
def self.start options = {}, &block
  monitor.configure &block if block_given?

  p = lambda { EM.run { monitor.run! } }
  if defined?(PhusionPassenger)
    PhusionPassenger.on_event(:starting_worker_process) do |forked|
      if forked && EM.reactor_running?
        EM.stop
      end
  
      Thread.new &p
      die_gracefully_on_signal
    end
  else
    # faciliates debugging
    Thread.abort_on_exception = true
    # just spawn a thread and start it up
    Thread.new &p
  end
end

Private Class Methods

reporter_config() click to toggle source
# File lib/metrics_machine.rb, line 52
def self.reporter_config
  @reporter_config ||= begin
    path = if defined? Rails and File.exists? "#{Rails.root}/config/statsd.yml"
             "#{Rails.root}/config/statsd.yml"
           else
             File.expand_path(File.join(File.dirname(__FILE__), "..", "config", "statsd.yml"))
           end
    data = Psych.load(ERB.new(IO.read(path)).result(binding))

    if defined? Rails
      data[Rails.env]
    else
      data["default"]
    end
  end
end