class HareDo::Service::Daemon

Attributes

loaded_modules[R]

Public Class Methods

new(name='haredo', config_file=nil) click to toggle source
Calls superclass method HareDo::Peer::new
# File src/lib/haredo/service/daemon.rb, line 17
def initialize(name='haredo', config_file=nil)
  super(name)

  @name             = name
  @queue_name       = 'haredo'
  @queue_properties = {}
  @loaded_modules   = []

  @config_file = config_file
  loadConfig(config_file)

  account = @config['system']['broker']

  connect( :user     => account['user'],
           :password => account['password'],
           :host     => account['host'],
           :port     => account['port'],
           :vhost    => account['vhost'],
           :ssl      => account['ssl'] )

  @daemon_key = @config['daemon']['key']       

  # Load modules in config
  daemon_conf = @config['daemon']
  daemon_conf['modules'].each do |mod|
    @loaded_modules << mod
    require mod
  end

  # Use configuration file for queue name
  if daemon_conf.has_key?('queue')
    @queue_name = daemon_conf['queue']['name'] || 'haredo'
    @queue_properties = daemon_conf['queue']['properties'] || {}
  end

  # Change module search path
  pluginStartup()

  plugin_conf = @config['daemon']['services'].each do |service_name, service_conf|

    if service_conf.has_key?('path_prefix')
      @plugins.module_path_prefix = service_conf['path_prefix']
    end

    @plugins.loadConfig(service_conf['plugins'])
  end

  # Load the status plugin
  @plugins.module_path_prefix = 'haredo/plugins'
  @plugins.load('status')
  status_plugin = @plugins['status']
  status_plugin.plugins = @plugins.loaded
end

Public Instance Methods

createQueue() click to toggle source

Defined the queue this service will listen on. Assumes a single-instance service therefore declares queue as exclusive.

# File src/lib/haredo/service/daemon.rb, line 83
def createQueue()
  properties = {
    :auto_delete => true, 
    :exclusive => true
  }

  @queue_properties.each do |k,v|
    properties[k.to_sym] = v
  end

  return @channel.queue(@queue_name, properties)
end
pluginShutdown() click to toggle source

Custom hook for plugin shutdown. Called after plugins are shutdown.

# File src/lib/haredo/service/daemon.rb, line 77
def pluginShutdown()
  
end
pluginStartup() click to toggle source

Custom hook for plugin startup. Called before plugins are initialized.

# File src/lib/haredo/service/daemon.rb, line 72
def pluginStartup()
  
end
run(args={}) click to toggle source
# File src/lib/haredo/service/daemon.rb, line 96
def run(args={})

  if not args.has_key?(:blocking)
    args[:blocking] = true
  end

  if $syslog.nil?
    Syslog.open('haredo', Syslog::LOG_PID,
                Syslog::LOG_DAEMON | Syslog::LOG_LOCAL7)
  
    Syslog.notice('Daemonizing')

    $syslog = true
  end

  # Write PID file out
  file = File.open(@pid_file, 'w')
  file.write(Process.pid.to_s)
  file.close()

  listen(args)
end
serve(msg) click to toggle source
# File src/lib/haredo/service/daemon.rb, line 119
def serve(msg)
  data = msg.headers['i'].to_i + 1

  if msg.headers.has_key?('command')
    if msg.headers['key'] == @daemon_key
      Syslog.notice('Exiting')
      disconnect()
      return false
    end
  end

  @plugins.process(msg)
end
shutdown() click to toggle source
# File src/lib/haredo/service/daemon.rb, line 133
def shutdown()
  @plugins.shutdown()
  pluginShutdown()
end