diff options
author | jakobst1n <jakob.stendahl@outlook.com> | 2022-09-23 21:19:26 +0000 |
---|---|---|
committer | jakob <jakob@jakobstendahl.no> | 2022-09-23 22:10:45 +0000 |
commit | 71e9f98a372971275befeae1515393c1b283dbe6 (patch) | |
tree | 1b411ac66779c717bf9ceba10e2c0695ab76abfd /term.py | |
download | tor-site-tester-71e9f98a372971275befeae1515393c1b283dbe6.tar.gz tor-site-tester-71e9f98a372971275befeae1515393c1b283dbe6.zip |
Initial commit
Diffstat (limited to 'term.py')
-rw-r--r-- | term.py | 131 |
1 files changed, 131 insertions, 0 deletions
@@ -0,0 +1,131 @@ +from threading import Thread, Lock +from time import sleep +from datetime import datetime +from queue import Queue +import sys + +class Term: + spinner = ["/", "-", "\\", "|", "/", "-", "\\", "|"] + logfile = f"logs/{datetime.now().isoformat()}.log" + term = sys.stdout + + _th: Thread + _process_name = None + _process_state = None + _process_spin = False + _print_lock = Lock() + _logfile = None + + @staticmethod + def begin(): + Term._th = Thread(target=Term._term_thread) + Term._th.daemon = True + Term._th.start() + Term._logfile = open(Term.logfile, "a") + + @staticmethod + def _term_thread(): + spin_i = 0 + while True: + sleep(0.2) + spin_i += 1 + with Term._print_lock: + if Term._process_name is not None: + Term.mov_ls() + Term.write("\u001b[36m[") + Term.write(Term.spinner[spin_i % len(Term.spinner)] if Term._process_spin else " ") + Term.write(f"] {Term._process_name}") + if Term._process_state is not None: + Term.write(f"\u001b[35m - {Term._process_state}") + + Term.write("\u001b[0m") + Term.flush() + + @staticmethod + def flush(): Term.term.flush() + + @staticmethod + def write(s: str): Term.term.write(s) + + @staticmethod + def mov_ls(): Term.write(f"\u001b[2K\r") + + @staticmethod + def newln(): Term.write("\n") + + @staticmethod + def log(logmsg: str): + logmsg = str(logmsg) + with Term._print_lock: + Term._logfile.write(logmsg + "\n") + Term._logfile.flush() + Term.mov_ls() + if Term._process_name is not None: + Term.write(" ") + Term.write(logmsg) + Term.newln() + Term.flush() + + @staticmethod + def proc_start(procname: str, spin: bool = False): + with Term._print_lock: + Term._logfile.write(f"start [{procname}]\n") + Term._logfile.flush() + if Term._process_name is not None: + Term.proc_end("New process started (old may or may no actually have ended)", result=1) + if spin: + Term._process_spin = True + Term._process_name = procname + + @staticmethod + def proc_state(state: str): + with Term._print_lock: + Term._logfile.write(f"[{Term._process_name}] {state}\n") + Term._logfile.flush() + if Term._process_name is not None: + Term._process_state = state + else: + Term.log(f"State for unknown process: {state}") + + @staticmethod + def proc_end(msg = None, result=0): + """ Result 0=success, 1=error, 2=warning. """ + colour = ["\u001b[32m", "\u001b[31m", "\u001b[33m"] + with Term._print_lock: + if Term._process_name is None: + raise Exception("No process to end...") + Term._logfile.write(f"end [{Term._process_name}] {msg}\n") + Term._logfile.flush() + Term.mov_ls() + Term.write(colour[result]) + symb = " " + if result == 0: symb = "+" + if result == 1: symb = "-" + if result == 2: symb = "*" + Term.write(f"[{symb}] ") + Term.write("\u001b[0m") + Term.write(Term._process_name) + if msg is not None: + Term.write(f" - {msg}") + Term.write("\u001b[0m") + Term.newln() + Term.flush() + Term._process_name = None + Term._process_state = None + Term._process_spin = False + + @staticmethod + def proc_spin(): Term._process_spin = True + + @staticmethod + def proc_nospin(): Term._process_spin = False + + +if __name__ == "__main__": + Term.begin() + sleep(2) + Term.proc_start("TEST") + Term.log("LGOGGGG") + sleep(2) + Term.proc_spin() + Term.log("LGOGGGG") |