module MCollective module Registration # This is a base class that other registration plugins can use # to handle regular announcements to the mcollective # # The configuration file determines how often registration messages # gets sent using the _registerinterval_ option, the plugin runs in the # background in a thread. class Base # Register plugins that inherits base def self.inherited(klass) PluginManager << {:type => "registration_plugin", :class => klass.to_s} end # Creates a background thread that periodically send a registration notice. # # The actual registration notices comes from the 'body' method of the registration # plugins. def run(connection) return false if interval == 0 Thread.new do loop do begin publish(body) sleep interval rescue Exception => e Log.error("Sending registration message failed: #{e}") sleep interval end end end end def config Config.instance end def msg_filter filter = Util.empty_filter filter["agent"] << "registration" filter end def target_collective main_collective = config.main_collective collective = config.registration_collective || main_collective unless config.collectives.include?(collective) Log.warn("Sending registration to #{main_collective}: #{collective} is not a valid collective") collective = main_collective end return collective end def interval config.registerinterval end def publish(message) unless message Log.debug("Skipping registration due to nil body") else req = Message.new(message, nil, {:type => :request, :agent => "registration", :collective => target_collective, :filter => msg_filter}) req.encode! Log.debug("Sending registration #{req.requestid} to collective #{req.collective}") req.publish end end end end end