def eventhandler (e): from bb import note, error from bb.event import getName if e.data is None or getName(e) in ("MsgNote", "RecipePreFinalise", "RecipeParsed", "ParseProgress", "StampUpdate"): return name = getName(e) #bb.note("event: %s" % name) # First event if name == "ParseStarted": tmp_fname = _metrics_tmpname(e.data) try: os.unlink(tmp_fname) except OSError: pass __write_ccache_stats(e, name) if name == "BuildStarted": __record_resources('build_start', e) elif name in "BuildCompleted": __write_ccache_stats(e, name) __handle_complete(e, 'build', 'BuildCompleted', lambda res_start, res_end: __write_build_complete(e, res_start, res_end, e.data.getVar('METRICS_FILE', True))) elif name == "TaskStarted": __record_resources('task_start', e) elif name in ("TaskSucceeded", "TaskFailed"): __handle_complete(e, 'task', 'task-complete', lambda res_start, res_end: __write_task_complete(e, res_start, res_end)) elif name == 'ParseStarted': __record_resources('parse_start', e) elif name == 'ParseCompleted': __handle_complete(e, 'parse', 'ParseCompleted', lambda res_start, res_end: __write_stamp(e, res_start, res_end, 'parsing')) else: #bb.warn("Unsupported event %s" % name) pass return
def __write_task_complete(e, start_info, end_info): from bb.event import getName info = { 'now' : end_info['time'], 'PV' : e.data.getVar('PV', True), 'PR' : e.data.getVar('PR', True), 'PN' : e.data.getVar('PN', True), 'PF' : e.data.getVar('PF', True), 'pid' : start_info['pid'], 'start_tm' : start_info['time'], 'start_tm_str' : time.strftime('%c', time.gmtime(start_info['time'])), 'end_tm_str' : time.strftime('%c', time.gmtime(end_info['time'])), 'total_time' : end_info['time'] - start_info['time'], 'result' : ['FAIL','OK'][getName(e) == "TaskSucceeded"], 'preference' : e.data.getVar('DEFAULT_PREFERENCE', True) or '0', 'task' : e.task } x = \ ' <!-- %(task)s(%(PF)s) | %(start_tm_str)s - %(end_tm_str)s (PID %(pid)s) -->\n' \ ' <task name="%(task)s" result="%(result)s" pn="%(PN)s" pv="%(PV)s" pr="%(PR)s" ' \ 'started="%(start_tm)s" ended="%(now)s" duration="%(total_time)f" preference="%(preference)s" pid="%(pid)s">\n' % info if end_info['duse'] != None: x = x + ' <info type="diskusage">%u</info>\n' % end_info['duse'] __write(e.data, x + ' <!-- RUSAGE_CHILDREN -->\n' + ''.join(map(lambda x: ' ' + x + '\n', __to_xml("children", end_info['res_chld'], start_info['res_chld']))) + ' <!-- RUSAGE_SELF -->\n' + ''.join(map(lambda x: ' ' + x + '\n', __to_xml("self", end_info['res_self'], start_info['res_self']))) + ' </task>\n')