# Copyright (C) 2018 Avatao.com Innovative Learning Kft. # All Rights Reserved. See LICENSE file for details. import xmlrpc.client from xmlrpc.client import Fault as SupervisorFault from contextlib import suppress from os import remove from tfw.decorators import LazyInitialise from tfw.config import TFWENV class SupervisorBaseMixin: @LazyInitialise def supervisor(self): return xmlrpc.client.ServerProxy(TFWENV.SUPERVISOR_HTTP_URI).supervisor class SupervisorMixin(SupervisorBaseMixin): 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 SupervisorLogMixin(SupervisorBaseMixin): 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)