diff --git a/parser.py b/parser.py index cb0c256..69a61df 100644 --- a/parser.py +++ b/parser.py @@ -12,45 +12,53 @@ def is_json(myjson): return True def parse_logs(): - unsuccessful_attempts = 0 - current_retry = 0 - max_retry = 0 - print("Requesting Docker logs...", flush=True) - process = subprocess.Popen( - ["docker", "logs", "worker"], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - text=True - ) + start_time = time.time() + while True: + unsuccessful_attempts = 0 + current_retry = 0 + max_retry = 0 + print("Requesting Docker logs...", flush=True) + process = subprocess.Popen( + ["docker", "logs", "worker"], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True + ) - try: - stdout, stderr = process.communicate() - if stderr: - print(f"Error: {stderr.strip()}", flush=True) + try: + stdout, stderr = process.communicate() + if stderr: + print(f"Error: {stderr.strip()}", flush=True) - for line in stdout.splitlines(): - #print(f"Line: {line}", flush=True) - if is_json(line): - data = json.loads(line) + for line in stdout.splitlines(): + #print(f"Line: {line}", flush=True) + if is_json(line): + data = json.loads(line) - if data.get("level") == "info" or data.get("level") == "error": - print(f"{data['message']}", flush=True) + if data.get("level") == "info" or data.get("level") == "error": + print(f"{data['message']}", flush=True) - if data.get("msg") == "Send Worker Data to chain" and data.get("message") == "Success": - print(f"Success: {data}", flush=True) - return True, f"Success after {unsuccessful_attempts} unsuccessful attempts, with current retry {current_retry} out of {max_retry}" - elif data.get("msg") == "Send Worker Data to chain" and "Failed, retrying..." in data.get("message", ""): - unsuccessful_attempts += 1 - retry_info = data["message"].split("Retry ")[1].strip("()") - current_retry, max_retry = map(int, retry_info.split("/")) - if current_retry == max_retry: - print(f"Max Retry Reached: {data}", flush=True) - return False, "Max Retry Reached" - finally: - process.stdout.close() - - print("Sleeping before next log request...", flush=True) - time.sleep(5) + if data.get("msg") == "Send Worker Data to chain" and data.get("message") == "Success": + print(f"Success: {data}", flush=True) + return True, f"Success after {unsuccessful_attempts} unsuccessful attempts, with current retry {current_retry} out of {max_retry}" + elif data.get("msg") == "Send Worker Data to chain" and "Failed, retrying..." in data.get("message", ""): + unsuccessful_attempts += 1 + retry_info = data["message"].split("Retry ")[1].strip("()") + current_retry, max_retry = map(int, retry_info.split("/")) + if current_retry == max_retry: + print(f"Max Retry Reached: {data}", flush=True) + return False, "Max Retry Reached" + except Exception as e: + print(f"Exception occurred: {e}", flush=True) + finally: + process.stdout.close() + + print("Sleeping before next log request...", flush=True) + time.sleep(30) + + if time.time() - start_time > 30 * 60: + print("Timeout reached: 30 minutes elapsed without success.", flush=True) + return False, "Timeout reached: 30 minutes elapsed without success." return False, "No Success"