Class: DaemonObjects::Base

Inherits:
Object
  • Object
show all
Extended by:
Logging
Defined in:
lib/daemon_objects/base.rb

Class Method Summary collapse

Methods included from Logging

create_logger, force_logger_reset, log_directory, log_filename, logger, logger=

Class Method Details

.after_forkObject



40
41
42
43
44
45
# File 'lib/daemon_objects/base.rb', line 40

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

.consumer_classObject



24
25
26
# File 'lib/daemon_objects/base.rb', line 24

def self.consumer_class
  @consumer_class ||= "#{self.to_s.gsub("Daemon", "")}Consumer".constantize
end

.consumes_amqp(opts = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
# 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_consumerObject



32
33
34
# File 'lib/daemon_objects/base.rb', line 32

def self.get_consumer
  consumer_class.new(logger)
end

.pid_directoryObject



20
21
22
# File 'lib/daemon_objects/base.rb', line 20

def self.pid_directory
  (defined? Rails) ? File.join(Rails.root, "tmp/pids") : "."
end

.proc_nameObject



28
29
30
# File 'lib/daemon_objects/base.rb', line 28

def self.proc_name
  @proc_name ||= self.to_s.underscore
end

.restartObject



73
74
75
76
# File 'lib/daemon_objects/base.rb', line 73

def self.restart
  start
  stop
end

.runObject



36
37
38
# File 'lib/daemon_objects/base.rb', line 36

def self.run
  get_consumer.run
end

.startObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/daemon_objects/base.rb', line 47

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
  logger.error(e.message)
  logger.error(e.backtrace.join("\n"))
  Airbrake.notify(e) if defined?(Airbrake)
end

.stopObject



69
70
71
# File 'lib/daemon_objects/base.rb', line 69

def self.stop
  Daemons.run_proc(proc_name, { :ARGV => [ "stop", "-f" ], :dir => pid_directory})
end