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