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:       @config.mode = :server
10: 
11:       @stats = PluginManager["global_stats"]
12: 
13:       @security = PluginManager["security_plugin"]
14:       @security.initiated_by = :node
15: 
16:       @connection = PluginManager["connector_plugin"]
17:       @connection.connect
18: 
19:       @agents = Agents.new
20: 
21:       unless Util.windows?
22:         Signal.trap("USR1") do
23:           Log.info("Reloading all agents after receiving USR1 signal")
24:           @agents.loadagents
25:         end
26: 
27:         Signal.trap("USR2") do
28:           Log.info("Cycling logging level due to USR2 signal")
29:           Log.cycle_level
30:         end
31:       else
32:         Util.setup_windows_sleeper
33:       end
34:     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 37
37:     def run
38:       Data.load_data_sources
39: 
40:       Util.subscribe(Util.make_subscriptions("mcollective", :broadcast))
41:       Util.subscribe(Util.make_subscriptions("mcollective", :directed)) if @config.direct_addressing
42: 
43:       # Start the registration plugin if interval isn't 0
44:       begin
45:         PluginManager["registration_plugin"].run(@connection) unless @config.registerinterval == 0
46:       rescue Exception => e
47:         Log.error("Failed to start registration plugin: #{e}")
48:       end
49: 
50:       loop do
51:         begin
52:           request = receive
53: 
54:           unless request.agent == "mcollective"
55:             agentmsg(request)
56:           else
57:             Log.error("Received a control message, possibly via 'mco controller' but this has been deprecated")
58:           end
59:         rescue SignalException => e
60:           Log.warn("Exiting after signal: #{e}")
61:           @connection.disconnect
62:           raise
63: 
64:         rescue MsgTTLExpired => e
65:           Log.warn(e)
66: 
67:         rescue NotTargettedAtUs => e
68:           Log.debug("Message does not pass filters, ignoring")
69: 
70:         rescue Exception => e
71:           Log.warn("Failed to handle message: #{e} - #{e.class}\n")
72:           Log.warn(e.backtrace.join("\n\t"))
73:         end
74:       end
75:     end

[Validate]