Parent

Methods

Class/Module Index [+]

Quicksearch

MCollective::Runner

The main runner for the daemon, supports running in the foreground and the background, keeps detailed stats and provides hooks to access all this information

Public Instance Methods

run() click to toggle source

Starts the main loop, before calling this you should initialize the MCollective::Config singleton.

# File lib/mcollective/runner.rb, line 37
def run
  Data.load_data_sources

  Util.subscribe(Util.make_subscriptions("mcollective", :broadcast))
  Util.subscribe(Util.make_subscriptions("mcollective", :directed)) if @config.direct_addressing

  # Start the registration plugin if interval isn't 0
  begin
    PluginManager["registration_plugin"].run(@connection) unless @config.registerinterval == 0
  rescue Exception => e
    Log.error("Failed to start registration plugin: #{e}")
  end

  loop do
    begin
      request = receive

      unless request.agent == "mcollective"
        agentmsg(request)
      else
        Log.error("Received a control message, possibly via 'mco controller' but this has been deprecated")
      end
    rescue SignalException => e
      Log.warn("Exiting after signal: #{e}")
      @connection.disconnect
      raise

    rescue MsgTTLExpired => e
      Log.warn(e)

    rescue NotTargettedAtUs => e
      Log.debug("Message does not pass filters, ignoring")

    rescue Exception => e
      Log.warn("Failed to handle message: #{e} - #{e.class}\n")
      Log.warn(e.backtrace.join("\n\t"))
    end
  end
end

Public Class Methods

new(configfile) click to toggle source
# File lib/mcollective/runner.rb, line 6
def initialize(configfile)
  @config = Config.instance
  @config.loadconfig(configfile) unless @config.configured
  @config.mode = :server

  @stats = PluginManager["global_stats"]

  @security = PluginManager["security_plugin"]
  @security.initiated_by = :node

  @connection = PluginManager["connector_plugin"]
  @connection.connect

  @agents = Agents.new

  unless Util.windows?
    Signal.trap("USR1") do
      Log.info("Reloading all agents after receiving USR1 signal")
      @agents.loadagents
    end

    Signal.trap("USR2") do
      Log.info("Cycling logging level due to USR2 signal")
      Log.cycle_level
    end
  else
    Util.setup_windows_sleeper
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.