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
(Not documented)
# File lib/mcollective/runner.rb, line 8
8: def initialize(configfile)
9: @config = Config.instance
10: @config.loadconfig(configfile) unless @config.configured
11: @config.mode = :server
12:
13: @stats = PluginManager["global_stats"]
14:
15: @security = PluginManager["security_plugin"]
16: @security.initiated_by = :node
17:
18: @connection = PluginManager["connector_plugin"]
19: @connection.connect
20:
21: @agents = Agents.new
22:
23: unless Util.windows?
24: Signal.trap("USR1") do
25: log_code(:PLMC2, "Reloading all agents after receiving USR1 signal", :info)
26: @agents.loadagents
27: end
28:
29: Signal.trap("USR2") do
30: log_code(:PLMC3, "Cycling logging level due to USR2 signal", :info)
31:
32: Log.cycle_level
33: end
34: else
35: Util.setup_windows_sleeper
36: end
37: end
Starts the main loop, before calling this you should initialize the MCollective::Config singleton.
# File lib/mcollective/runner.rb, line 40
40: def run
41: Data.load_data_sources
42:
43: Util.subscribe(Util.make_subscriptions("mcollective", :broadcast))
44: Util.subscribe(Util.make_subscriptions("mcollective", :directed)) if @config.direct_addressing
45:
46: # Start the registration plugin if interval isn't 0
47: begin
48: PluginManager["registration_plugin"].run(@connection) unless @config.registerinterval == 0
49: rescue Exception => e
50: logexception(:PLMC4, "Failed to start registration plugin: %{error}", :error, e)
51: end
52:
53: loop do
54: begin
55: request = receive
56:
57: unless request.agent == "mcollective"
58: agentmsg(request)
59: else
60: log_code(:PLMC5, "Received a control message, possibly via 'mco controller' but this has been deprecated", :error)
61: end
62: rescue SignalException => e
63: logexception(:PLMC7, "Exiting after signal: %{error}", :warn, e)
64: @connection.disconnect
65: raise
66:
67: rescue MsgTTLExpired => e
68: logexception(:PLMC9, "Expired Message: %{error}", :warn, e)
69:
70: rescue NotTargettedAtUs => e
71: log_code(:PLMC6, "Message does not pass filters, ignoring", :debug)
72:
73: rescue Exception => e
74: logexception(:PLMC10, "Failed to handle message: %{error}", :warn, e, true)
75: end
76: end
77: end
Deals with messages directed to agents
# File lib/mcollective/runner.rb, line 81
81: def agentmsg(request)
82: log_code(:PLMC8, "Handling message for agent '%{agent}' on collective '%{collective} with requestid '%{requestid}'", :debug, :agent => request.agent, :collective => request.collective, :requestid => request.requestid)
83:
84: @agents.dispatch(request, @connection) do |reply_message|
85: reply(reply_message, request) if reply_message
86: end
87: end
Deals with messages sent to our control topic
# File lib/mcollective/runner.rb, line 90
90: def controlmsg(request)
91: Log.debug("Handling message for mcollectived controller")
92:
93: begin
94: case request.payload[:body]
95: when /^stats$/
96: reply(@stats.to_hash, request)
97:
98: when /^reload_agent (.+)$/
99: reply("reloaded #{$1} agent", request) if @agents.loadagent($1)
100:
101: when /^reload_agents$/
102:
103: reply("reloaded all agents", request) if @agents.loadagents
104:
105: else
106: Log.error("Received an unknown message to the controller")
107:
108: end
109: rescue Exception => e
110: Log.error("Failed to handle control message: #{e}")
111: end
112: end
Receive a message from the connection handler
# File lib/mcollective/runner.rb, line 115
115: def receive
116: request = @connection.receive
117: request.type = :request
118:
119: @stats.received
120:
121: request.decode!
122: request.validate
123:
124: request
125: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.