from os import remove from contextlib import suppress import xmlrpc.client from xmlrpc.client import Fault as SupervisorFault class SupervisorBase: def __init__(self, supervisor_uri): self.supervisor = xmlrpc.client.ServerProxy(supervisor_uri).supervisor class ProcessManager(SupervisorBase): def stop_process(self, process_name): with suppress(SupervisorFault): self.supervisor.stopProcess(process_name) def start_process(self, process_name): self.supervisor.startProcess(process_name) def restart_process(self, process_name): self.stop_process(process_name) self.start_process(process_name) class ProcessLogManager(SupervisorBase): def read_stdout(self, process_name, tail=0): return self.supervisor.readProcessStdoutLog(process_name, -tail, 0) def read_stderr(self, process_name, tail=0): return self.supervisor.readProcessStderrLog(process_name, -tail, 0) def clear_logs(self, process_name): for logfile in ('stdout_logfile', 'stderr_logfile'): with suppress(FileNotFoundError): remove(self.supervisor.getProcessInfo(process_name)[logfile]) self.supervisor.clearProcessLogs(process_name)