class DaemonObjects::Base

Public Class Methods

after_fork() click to toggle source
# File lib/daemon_objects/base.rb, line 50
def self.after_fork
  # daemonizing closes all file handles, so this will reopen the log
  force_logger_reset
  # this seems to be enough to initialize NewRelic if it's defined
  defined?(NewRelic)
end
app_directory() click to toggle source
# File lib/daemon_objects/base.rb, line 20
def self.app_directory
  @app_directory ||= (defined? Rails) ? Rails.root : Rake.original_dir
end
consumer_class() click to toggle source
# File lib/daemon_objects/base.rb, line 28
def self.consumer_class
  @consumer_class ||= "#{self.to_s.gsub("Daemon", "")}Consumer".constantize
end
consumes_amqp(opts={}) click to toggle source
# File lib/daemon_objects/base.rb, line 6
def self.consumes_amqp(opts={})
  extend DaemonObjects::AmqpSupport
  self.endpoint                   = opts.delete(:endpoint)
  self.queue                      = opts.delete(:queue_name)
  self.arguments["x-message-ttl"] = opts.delete(:ttl) if opts[:ttl]
  self.prefetch                   = opts.delete(:prefetch)
  self.retry_wait_time            = opts.delete(:retry_wait_time)
  self.worker_class               = opts.delete(:worker_class) || DaemonObjects::Amqp::Worker
  self.arguments.merge!(opts)

  logger.info "Configured to consume queue [#{queue}] at endpoint [#{endpoint}]"
  logger.info "Worker class is '#{worker_class}'"
end
get_consumer() click to toggle source
# File lib/daemon_objects/base.rb, line 36
def self.get_consumer
  consumer_class.new(:logger        => logger,
                     :app_directory => app_directory,
                     :environment   => DaemonObjects.environment)
end
handle_error(e) click to toggle source
# File lib/daemon_objects/base.rb, line 86
def self.handle_error(e)
  logger.error(e.message)
  logger.error(e.backtrace.join("\n"))
  Airbrake.notify(e) if defined?(Airbrake)
end
pid_directory() click to toggle source
# File lib/daemon_objects/base.rb, line 24
def self.pid_directory
  File.join(app_directory, "tmp/pids")
end
proc_name() click to toggle source
# File lib/daemon_objects/base.rb, line 32
def self.proc_name
  @proc_name ||= self.to_s.underscore
end
restart() click to toggle source
# File lib/daemon_objects/base.rb, line 81
def self.restart
  start
  stop
end
run() click to toggle source
# File lib/daemon_objects/base.rb, line 42
def self.run
  begin
    get_consumer.run
  rescue StandardError => e
    handle_error(e)
  end
end
start() click to toggle source
# File lib/daemon_objects/base.rb, line 57
def self.start
  # connection will get severed on fork, so disconnect first
  ActiveRecord::Base.connection.disconnect! if defined?(ActiveRecord::Base)

  FileUtils.mkdir_p(pid_directory)

  Daemons.run_proc(proc_name,
                  { :ARGV       => ["start", "-f"],
                    :log_dir    => "/tmp",
                    :dir        => pid_directory,
                    :log_output => true}) do

    after_fork
    run
  end

rescue StandardError => e
  handle_error(e)
end
stop() click to toggle source
# File lib/daemon_objects/base.rb, line 77
def self.stop
  Daemons.run_proc(proc_name, { :ARGV => [ "stop", "-f" ], :dir => pid_directory})
end