示例#1
0
class BDPNdmn(Daemon):
    def __init__(self, *args, **kwargs):
        self.run_dir = os.path.dirname(os.path.realpath(__file__)) + '/'
        self.config = Settings(self.run_dir + "settings.cfg")
        log.debug("Run dir %s" % self.run_dir)
        self.bdpn = make_obj_list()
        self.sftp = SftpChannel(self.bdpn, self.config)
        self.mysql = DBworker(self.bdpn, self.config)
        super(BDPNdmn, self).__init__(*args, **kwargs)

    def wait4next_update(self):
        """Sleep timer"""
        __step = self.config.main['sync_every_minutes'] * 60
        __delta = (__step - ((time.time() + time.timezone) % __step)) + 900
        log.info("Sleeping %i sec..." % __delta)
        time.sleep(__delta)
        return True

    def run(self):
        log.info("Starting daemon...")
        countdown = 3
        while countdown > 0:
            try:
                log.debug("Reading settings...")
                ok = self.config.load_config()
                logging.getLogger().setLevel(self.config.main['log_level'])
                if ok:
                    log.debug("Settings are OK. Doing synchronization...")
                    ok &= self.mysql.get_last() and self.sftp.synchronize(
                    ) and self.mysql.update()
                if ok:
                    log.info(
                        "Synchronization completed! Waiting for next turn.")
                    countdown = 3
                    self.wait4next_update()
                else:
                    countdown -= 1
                    log.warning("Failed to update. Retry in 5min")
                    time.sleep(300)
            except KeyboardInterrupt:
                print("^C received, shutting down")
                break
            except RuntimeError as err:
                log.error("Runtime ERROR:%s\nFix it and try again." % err,
                          exc_info=True)
                break