From 655553950ed14bdbcbb1d6dc5349ce39a1f3c8f9 Mon Sep 17 00:00:00 2001 From: Kareem Khazem Date: Mon, 12 Jun 2023 20:14:34 +0100 Subject: [PATCH] Add fractional seconds duration to run.json Litani now measures the runtime of each job in fractional seconds and records this information in the "duration_ms" field in run.json. --- lib/exec.py | 8 ++++++++ lib/validation.py | 3 +++ 2 files changed, 11 insertions(+) diff --git a/lib/exec.py b/lib/exec.py index ed850651..97e833fd 100644 --- a/lib/exec.py +++ b/lib/exec.py @@ -13,6 +13,7 @@ import __main__ +import datetime import json import logging import os @@ -96,6 +97,7 @@ async def exec_job(args): "wrapper_arguments": args_dict, "complete": False, } + start_time = datetime.datetime.now(datetime.timezone.utc) lib.util.timestamp("start_time", out_data) with litani.atomic_write(args.status_file) as handle: print(json.dumps(out_data, indent=2), file=handle) @@ -105,6 +107,7 @@ async def exec_job(args): args.timeout, args.profile_memory, args.profile_memory_interval, args_dict["job_id"]) await run() + end_time = datetime.datetime.now(datetime.timezone.utc) lib.job_outcome.fill_in_result(run, out_data, args) for out_field, proc_pipe, arg_file in [ @@ -127,6 +130,11 @@ async def exec_job(args): file=sys.stderr) lib.util.timestamp("end_time", out_data) + + duration = end_time - start_time + dur_sec = duration.seconds + (duration.days * 60 * 60 * 24) + out_data["duration_ms"] = f"{dur_sec}.{duration.microseconds}" + out_str = json.dumps(out_data, indent=2) logging.debug("run status: %s", out_str) with litani.atomic_write(args.status_file) as handle: diff --git a/lib/validation.py b/lib/validation.py index 2210925e..b66a1d2c 100644 --- a/lib/validation.py +++ b/lib/validation.py @@ -392,6 +392,9 @@ def _run_schema(): "stdout": voluptuous.Any([str], None), # A list of strings that the command printed to its stdout. + "duration_ms": voluptuous.Any(str, None), + # Duration of this job S.MS + "duration_str": voluptuous.Any(str, None), # A human-readable duration of this job (HH:MM:SS).