Ejemplo n.º 1
0
    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