コード例 #1
0
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
コード例 #2
0
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')