def start(self, shutdown_events=True, http_server=True): """ Internal code which starts the agent, registers it with the master, and performs the other steps necessary to get things running. :param bool shutdown_events: If True register all shutdown events so certain actions, such as information the master we're going offline, can take place. :param bool http_server: If True then construct and serve the externally facing http server. """ if config["agent_manhole"]: self._start_manhole(config["agent_manhole_port"], config["agent_manhole_username"], config["agent_manhole_password"]) # setup the internal http server so external entities can # interact with the service. if http_server: self._start_http_api(config["agent_api_port"]) # Update the configuration with this pid (which may be different # than the original pid). config["pids"].update(child=os.getpid()) # get ready to 'publish' the agent config.register_callback( "agent_id", partial( self.callback_agent_id_set, shutdown_events=shutdown_events)) return self.post_agent_to_master()
def __init__(self): # so parts of this instance are accessible elsewhere assert "agent" not in config config["agent"] = self self.services = {} self.register_shutdown_events = False self.last_free_ram_post = time.time() self.repeating_call_counter = {} self.shutdown_timeout = None self.post_shutdown_lock = DeferredLock() self.stop_lock = DeferredLock() self.reannounce_lock = utility.TimedDeferredLock() self.stopped = False # Register a callback so self.shutdown_timeout is set when # "shutting_down" is set or modified. config.register_callback( "shutting_down", self.callback_shutting_down_changed)