From 40ff8faad8c61bf35b9cc93d4523264ff71bf834 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Thu, 2 Aug 2018 15:26:42 -0400 Subject: [PATCH] Return multiple timestamps in API results (#409). If one of the timestamps isn't present (for instance, the finished timestamp for a job that is still running), null is returned. (cherry picked from commit 17c40ef2711026025a32e4a3afec7dfd4959ebdb) --- src/pylorax/api/queue.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/pylorax/api/queue.py b/src/pylorax/api/queue.py index be2bbbb2..e116de38 100644 --- a/src/pylorax/api/queue.py +++ b/src/pylorax/api/queue.py @@ -31,6 +31,7 @@ import time from pylorax import find_templates from pylorax.api.compose import move_compose_results from pylorax.api.recipes import recipe_from_file +from pylorax.api.timestamp import timestamp_dict from pylorax.base import DataHolder from pylorax.creator import run_creator from pylorax.sysutils import joinpaths @@ -253,15 +254,21 @@ def compose_detail(results_dir): * id - The uuid of the comoposition * queue_status - The final status of the composition (FINISHED or FAILED) - * timestamp - The time of the last status change * compose_type - The type of output generated (tar, iso, etc.) * blueprint - Blueprint name * version - Blueprint version * image_size - Size of the image, if finished. 0 otherwise. + + Various timestamps are also included in the dict. These are all Unix UTC timestamps. + It is possible for these timestamps to not always exist, in which case they will be + None in Python (or null in JSON). The following timestamps are included: + + * job_created - When the user submitted the compose + * job_started - Anaconda started running + * job_finished - Job entered FINISHED or FAILED state """ build_id = os.path.basename(os.path.abspath(results_dir)) status = open(joinpaths(results_dir, "STATUS")).read().strip() - mtime = os.stat(joinpaths(results_dir, "STATUS")).st_mtime blueprint = recipe_from_file(joinpaths(results_dir, "blueprint.toml")) compose_type = get_compose_type(results_dir) @@ -272,9 +279,13 @@ def compose_detail(results_dir): else: image_size = 0 + times = timestamp_dict(results_dir) + return {"id": build_id, "queue_status": status, - "timestamp": mtime, + "job_created": times.get("created"), + "job_started": times.get("started"), + "job_finished": times.get("finished"), "compose_type": compose_type, "blueprint": blueprint["name"], "version": blueprint["version"],