diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-05-13 14:20:20 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2025-05-13 14:51:08 +0200 |
commit | 8f14cdd6cacf3652de77f527eea3d5efca5cca62 (patch) | |
tree | 18964cb0c9daa5f97ac16b7c494283b68dcbb4a1 /doc/invocations-http-server | |
parent | 13a4031450c34a087b1998540077b595938d29f0 (diff) | |
download | justbuild-8f14cdd6cacf3652de77f527eea3d5efca5cca62.tar.gz |
Invocation server: show actions with console output separately
Normally, actions are supposed to work silently, i.e., without writing
to stdout/stderr. So, if an action produces console output, it is
definitely worth looking at, even for cached actions. Therefore,
add a section after the failed actions showing those actions (if
not in the previous action). Also, always show duration (if known)
and if an action is cached (which can happen for the ones producing
console output).
Diffstat (limited to 'doc/invocations-http-server')
-rwxr-xr-x | doc/invocations-http-server/server.py | 18 | ||||
-rw-r--r-- | doc/invocations-http-server/templates/invocation.html | 17 |
2 files changed, 33 insertions, 2 deletions
diff --git a/doc/invocations-http-server/server.py b/doc/invocations-http-server/server.py index 6ff6b668..d1791c16 100755 --- a/doc/invocations-http-server/server.py +++ b/doc/invocations-http-server/server.py @@ -391,7 +391,10 @@ class InvocationServer: def action_data(name, profile_value): data = { "name_prefix": "", "name": name, + "cached": profile_value.get('cached'), "exit_code": profile_value.get('exit code', 0)} + duration = profile_value.get('duration', 0.0) + data["duration"] = '%0.3fs' % (duration,) if duration > 0 else None desc = graph.get('actions', {}).get(name, {}) data["may_fail"] = desc.get("may_fail") data["stdout"] = profile_value.get('stdout') @@ -414,24 +417,35 @@ class InvocationServer: data["origins"] = origins return data + actions_considered = set() failed_build_actions = [] failed_test_actions = [] for k, v in profile.get('actions', {}).items(): if v.get('exit code', 0) != 0: + actions_considered.add(k) if graph.get('actions', {}).get(k, {}).get('may_fail') != None: failed_test_actions.append(action_data(k, v)) else: failed_build_actions.append(action_data(k, v)) params["failed_actions"] = failed_build_actions + failed_test_actions - # longest running non-cached non-failed actions + # non-failed actions with output + output_actions = [] + for k, v in profile.get('actions', {}).items(): + if k not in actions_considered: + if v.get('stdout') or v.get('stderr'): + actions_considered.add(k) + output_actions.append(action_data(k,v)) + params["output_actions"] = output_actions + + # longest running non-cached non-failed actions without output candidates = [] action_count = 0 action_count_cached = 0 for k, v in profile.get('actions', {}).items(): action_count += 1 if not v.get('cached'): - if v.get('exit code', 0) == 0: + if k not in actions_considered: candidates.append((v.get('duration', 0.0), k, v)) else: action_count_cached += 1 diff --git a/doc/invocations-http-server/templates/invocation.html b/doc/invocations-http-server/templates/invocation.html index 50d5690a..2ebebb86 100644 --- a/doc/invocations-http-server/templates/invocation.html +++ b/doc/invocations-http-server/templates/invocation.html @@ -38,6 +38,12 @@ Inocations {{invocation | e}} </ul> </li> {% endif %} + {% if action["duration"] %} + <li> duration: {{ action["duration"] | e }}</li> + {% endif %} + {% if action["cached"] %} + <li> cached: {{ action["cached"] | e }}</li> + {% endif %} {% if action["exit_code"] != 0 %} <li> exit code: {{ action["exit_code"] }}</li> {% endif %} @@ -187,6 +193,17 @@ Inocations {{invocation | e}} <i>(none)</i> {% endif %} +<h3>Other actions with console output</h3> +{% if output_actions %} +<ul> + {% for action in output_actions %} + {{ show_action(action) }} + {% endfor %} +</ul> +{% else %} +<i>(none)</i> +{% endif %} + <h3>Remaining non-cached actions</h3> {% if non_cached %} |