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



38
39
40
41
42
43
# File 'lib/daemon_objects/base.rb', line 38

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



22
23
24
# File 'lib/daemon_objects/base.rb', line 22

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
# 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.worker_class = opts.delete(:worker_class) || DaemonObjects::Amqp::Worker
  self.arguments.merge!(opts)

  logger.info "Configured to consume queue [#{queue}] at endpoint [#{endpoint}]"
end

.get_consumerObject



30
31
32
# File 'lib/daemon_objects/base.rb', line 30

def self.get_consumer
  consumer_class.new(logger)
end

.pid_directoryObject



18
19
20
# File 'lib/daemon_objects/base.rb', line 18

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

.proc_nameObject



26
27
28
# File 'lib/daemon_objects/base.rb', line 26

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

.restartObject



71
72
73
74
# File 'lib/daemon_objects/base.rb', line 71

def self.restart
  start
  stop
end

.runObject



34
35
36
# File 'lib/daemon_objects/base.rb', line 34

def self.run
  get_consumer.run
end

.startObject



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

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



67
68
69
# File 'lib/daemon_objects/base.rb', line 67

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