from stat import S_ISREG import time from contextlib import contextmanager from report_ops.utils import CitcoSubmission from paramiko.ssh_exception import SSHException import logging def close_and_reconnect(): retries = 5 for i in range(retries): try: CitcoSubmission._sftp.client.close() CitcoSubmission.init_sftp() except (SSHException, OSError) as e: if i == retries - 1: raise e else: time.sleep(60 * i) else: return def run(): CitcoSubmission.init_sftp() while True: try: for f in CitcoSubmission._sftp.client.listdir_iter(): if S_ISREG(f.st_mode): try: CitcoSubmission.process(f.filename) except ValueError as e: logging.error(e) continue CitcoSubmission.commit() except (SSHException, OSError): close_and_reconnect() time.sleep(60) CitcoSubmission.check_cache() if __name__ == "__main__": run()