def __init__(self, configuration, messagebox, controlbox): self.configuration = configuration self.log_writer = SysLogWriter('log', configuration.log.destination, configuration.log.enable, level=configuration.log.level) self.usage_writer = UsageWriter('usage', configuration.usage.destination, configuration.usage.enable) if configuration.debug.log: self.usage_writer.toggleDebug() self.messagebox = messagebox self.controlbox = controlbox self.poller = Poller(self.configuration.daemon, speed=0) self.poller.setupRead( 'control') # control messages from the main process self.poller.addReadSocket('control', controlbox.box.pipe_in) signal.signal(signal.SIGALRM, self.sigalrm) self._increase_spawn_limit = 0 self._decrease_spawn_limit = 0 self._respawn = False # poller for the reactor poller = Poller(self.configuration.daemon) poller.setupRead( 'read_request') # requests passed from the main process poller.setupRead('read_workers') # responses from the child processes poller.setupRead( 'control') # the reactor needs to yield to the supervisor poller.addReadSocket('read_request', messagebox.box.pipe_in) poller.addReadSocket('control', controlbox.box.pipe_in) self.manager = RedirectorManager(configuration, poller) # start the child processes self.manager.provision() self.reactor = RedirectorReactor(self.configuration, self.messagebox, self.manager, self.log_writer, self.usage_writer, poller) self.running = True