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 Class Methods

new(configfile) click to toggle source
# File lib/mcollective/runner.rb, line 6
def initialize(configfile)
  begin
    @config = Config.instance
    @config.loadconfig(configfile) unless @config.configured
    @config.mode = :server
    @state = :running
    @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
  rescue => e
    Log.error("Failed to start MCollective runner.")
    Log.error(e)
    Log.error(e.backtrace.join("\n\t"))
    raise e
  end
end

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 44
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

    return if @state == :stopping
  end
end
stop() click to toggle source

Flag the runner to stop

# File lib/mcollective/runner.rb, line 87
def stop
  @state = :stopping
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.