From fa0e73280d0de2c204c6124d88066459295cb127 Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Mon, 26 Aug 2024 04:26:47 +0300 Subject: [PATCH] Add parser.py --- parser.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 parser.py diff --git a/parser.py b/parser.py new file mode 100644 index 0000000..cb0c256 --- /dev/null +++ b/parser.py @@ -0,0 +1,67 @@ +import subprocess +import json +import sys +import time +import os + +def is_json(myjson): + try: + json_object = json.loads(myjson) + except ValueError as e: + return False + 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 + ) + + 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) + + 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) + + return False, "No Success" + +if __name__ == "__main__": + print("Parsing logs...") + result = parse_logs() + print(result[1]) + if result[0] == False: + print("Exiting 1...") + os._exit(1) + else: + print("Exiting 0...") + os._exit(0) +