diff --git a/software/slaprunner/common.cfg b/software/slaprunner/common.cfg index 0e67dc480ae7518966ab8d5a5cac243a70e207a8..c6b83d7037f6de266e1c51cb4c0eea356e0d2488 100644 --- a/software/slaprunner/common.cfg +++ b/software/slaprunner/common.cfg @@ -155,7 +155,7 @@ mode = 0644 [template-listener-slapgrid] recipe = hexagonit.recipe.download url = ${:_profile_base_location_}/template/${:filename} -md5sum = 46495fb218fc771547c5ef861cc30933 +md5sum = 8ab7c2930077017cc51daeeaff899888 location = ${buildout:parts-directory}/${:_buildout_section_name_} filename = listener_slapgrid.py.in download-only = true diff --git a/software/slaprunner/template/listener_slapgrid.py.in b/software/slaprunner/template/listener_slapgrid.py.in index 4271891e96690cd2b4f0d36afa4edb2da9076ead..8e885a43c30f175331f29a95e4b89cccae17b786 100644 --- a/software/slaprunner/template/listener_slapgrid.py.in +++ b/software/slaprunner/template/listener_slapgrid.py.in @@ -17,23 +17,26 @@ def write_stderr(s): sys.stderr.flush() -def write_slapgrid_result(): +def write_slapgrid_result(process): server = xmlrpclib.Server("http://{{- supervisord['server'] -}}") # Tuple of tuples containing 2 elements : process name and the path of its info file - watch_processes = (("slapgrid-sr", "{{- slaprunner['software_info_json'] -}}"), - ("slapgrid-cp", "{{- slaprunner['instance_info_json'] -}}")) - for process, file in watch_processes: - info = server.supervisor.getProcessInfo(process) - result = dict() - result['last_build'] = datetime.datetime.fromtimestamp(info['stop']).strftime("%Y-%m-%d %H:%M:%S") - result['success'] = (1 if info['statename'] == "FATAL" else info['exitstatus']) - open(file, 'w').write(json.dumps(result)) + json_files = dict([("slapgrid-sr", "{{- slaprunner['software_info_json'] -}}"), + ("slapgrid-cp", "{{- slaprunner['instance_info_json'] -}}")]) + info = server.supervisor.getProcessInfo(process) + result = dict() + result['last_build'] = datetime.datetime.fromtimestamp(info['stop']).strftime("%Y-%m-%d %H:%M:%S") + result['success'] = (1 if info['statename'] in ("FATAL", "STARTING", "BACKOFF") else info['exitstatus']) + open(json_files[process], 'w').write(json.dumps(result)) def main(): while 1: headers, payload = writer.wait() - write_slapgrid_result() + try: + processname = dict(x.split(':') for x in payload.split())['processname'] + write_slapgrid_result(processname) + except: + pass writer.ok() if __name__ == '__main__':