Ejemplo n.º 1
0
    def run(self):
        """Lunches checks and triggers updates on BIRD configuration."""
        self.log.info("Lunching checks")
        _workers = []

        # Lunch a thread for each configuration
        self.log.info("Going to lunch {} threads".format(len(self.services)))
        for service in self.services:
            self.log.debug("Lunching thread for {}".format(service))
            _config = {}
            for option, getter in OPTIONS_TYPE.items():
                _config[option] = getattr(self.config, getter)(service, option)
            _thread = ServiceCheck(
                service,
                _config,
                self.action,
                self.log)
            _thread.start()
            _workers.append(_thread)

        # Stay running until we are stopped
        while True:
            try:
                # Fetch items from action queue
                health_action = self.action.get(1)
                self.log.info(("Returned an item from the queue for {} with "
                               "IP prefix {} and action to {} from Bird "
                               "configuration").format(health_action[0],
                                                       health_action[1],
                                                       health_action[2]))

                bird_updated = self._update_bird_prefix_conf(health_action)
                self.action.task_done()
                if bird_updated:
                    self._reload_bird()
            except Empty:
                # Just keep trying to fetch items
                continue

        for _thread in _workers:
            _thread.join()