Class MCollective::Runner
In: lib/mcollective/runner.rb
Parent: Object

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

Methods

new   run  

Public Class methods

[Source]

    # File lib/mcollective/runner.rb, line 6
 6:     def initialize(configfile)
 7:       @config = Config.instance
 8:       @config.loadconfig(configfile) unless @config.configured
 9: 
10:       @stats = PluginManager["global_stats"]
11: 
12:       @security = PluginManager["security_plugin"]
13:       @security.initiated_by = :node
14: 
15:       @connection = PluginManager["connector_plugin"]
16:       @connection.connect
17: 
18:       @agents = Agents.new
19: 
20:       unless Util.windows?
21:         Signal.trap("USR1") do
22:           Log.info("Reloading all agents after receiving USR1 signal")
23:           @agents.loadagents
24:         end
25: 
26:         Signal.trap("USR2") do
27:           Log.info("Cycling logging level due to USR2 signal")
28:           Log.cycle_level
29:         end
30:       else
31:         Util.setup_windows_sleeper
32:       end
33:     end

Public Instance methods

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

[Source]

    # File lib/mcollective/runner.rb, line 36
36:     def run
37:       Data.load_data_sources
38: 
39:       Util.subscribe(Util.make_subscriptions("mcollective", :broadcast))
40:       Util.subscribe(Util.make_subscriptions("mcollective", :directed)) if @config.direct_addressing
41: 
42:       # Start the registration plugin if interval isn't 0
43:       begin
44:         PluginManager["registration_plugin"].run(@connection) unless @config.registerinterval == 0
45:       rescue Exception => e
46:         Log.error("Failed to start registration plugin: #{e}")
47:       end
48: 
49:       loop do
50:         begin
51:           request = receive
52: 
53:           unless request.agent == "mcollective"
54:             agentmsg(request)
55:           else
56:             Log.error("Received a control message, possibly via 'mco controller' but this has been deprecated")
57:           end
58:         rescue SignalException => e
59:           Log.warn("Exiting after signal: #{e}")
60:           @connection.disconnect
61:           raise
62: 
63:         rescue MsgTTLExpired => e
64:           Log.warn(e)
65: 
66:         rescue NotTargettedAtUs => e
67:           Log.debug("Message does not pass filters, ignoring")
68: 
69:         rescue Exception => e
70:           Log.warn("Failed to handle message: #{e} - #{e.class}\n")
71:           Log.warn(e.backtrace.join("\n\t"))
72:         end
73:       end
74:     end

[Validate]