Append deployment logs to every response of ProcessManagingEventHandler

This commit is contained in:
Kristóf Tóth 2018-05-24 11:20:00 +02:00
parent 293d7972f1
commit bfd1efa9f9
2 changed files with 21 additions and 9 deletions

View File

@ -13,10 +13,11 @@ LOG = logging.getLogger(__name__)
class ProcessManager(SupervisorMixin):
def __init__(self):
self.commands = {'start': self.start_process,
'stop': self.stop_process,
'restart': self.restart_process,
'readlog': self.read_log}
self.commands = {'start': self.start_process,
'stop': self.stop_process,
'restart': self.restart_process,
'readlog': self.read_log_stdout,
'readerrlog': self.read_log_stderr}
def __call__(self, command, process_name):
return self.commands[command](process_name)
@ -46,10 +47,11 @@ class ProcessManagingEventHandler(EventHandlerBase):
try:
data = message['data']
self.processmanager(data['command'], data['process_name'])
message['data']['log'] = self.processmanager.read_log_stdout(message['data']['process_name'])
return message
except KeyError:
LOG.error('IGNORING MESSAGE: Invalid message received: %s', message)
except SupervisorFault as fault:
message['data']['error'] = fault.faultString
message['data']['log'] = self.processmanager.read_log(message['data']['process_name'])
message['data']['log'] = self.processmanager.read_log_stderr(message['data']['process_name'])
return message

View File

@ -19,11 +19,21 @@ class SupervisorMixin:
def start_process(self, process_name):
self.supervisor.startProcess(process_name)
def read_log(self, process_name):
logs = self.supervisor.readProcessStderrLog(process_name, 0, 0)
remove(self.supervisor.getProcessInfo(process_name)['stderr_logfile'])
def read_log_stdout(self, process_name):
return self._read_log_internal(self.supervisor.readProcessStdoutLog, process_name)
def read_log_stderr(self, process_name):
return self._read_log_internal(self.supervisor.readProcessStderrLog, process_name)
def _read_log_internal(self, read_method, process_name):
log = read_method(process_name, 0, 0)
self.clear_logs(process_name)
return log
def clear_logs(self, process_name):
for logfile in ('stdout_logfile', 'stderr_logfile'):
remove(self.supervisor.getProcessInfo(process_name)[logfile])
self.supervisor.clearProcessLogs(process_name)
return logs
def restart_process(self, process_name):
self.stop_process(process_name)