aboutsummaryrefslogtreecommitdiff
path: root/scripts/worker.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/worker.py')
-rw-r--r--scripts/worker.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/scripts/worker.py b/scripts/worker.py
index 03751d2..391f522 100644
--- a/scripts/worker.py
+++ b/scripts/worker.py
@@ -27,13 +27,16 @@ def parse_args():
return args
-def update_stdout_stderr(bytes_read, stream: str, rconn, job_id):
+def update_stdout_stderr(rconn, job_id, bytes_read, stream: str):
"Update the stdout/stderr keys according to the value of `stream`."
job = jobs.job(rconn, job_id)
contents = job.get(stream, '')
new_contents = contents + bytes_read.decode("utf-8")
rconn.hset(name=job_id, key=stream, value=new_contents)
+def update_status(rconn, job_id, status):
+ rconn.hset(name=job_id, key="status", value=status)
+
def run_job(job, rconn):
"Run the actual job."
job_id = job["job_id"]
@@ -45,18 +48,22 @@ def run_job(job, rconn):
shlex.split(job["command"]), stdout=subprocess.PIPE,
stderr=tmpfl) as process:
while process.poll() is None:
+ update_status(rconn, job_id, "running")
update_stdout_stderr(
- process.stdout.read1(), "stdout", rconn, job_id)
+ rconn, job_id, process.stdout.read1(), "stdout")
sleep(1)
with open(stderrpath, "rb") as stderr:
- update_stdout_stderr(stderr.read(), "stderr", rconn, job_id)
+ stderr_content = stderr.read()
+ update_stdout_stderr(rconn, job_id, stderr_content, "stderr")
+ update_status(rconn, job_id, ("error" if bool(stderr_content) else "success"))
os.remove(stderrpath)
return process.poll()
except Exception as exc:# pylint: disable=[broad-except,unused-variable]
+ update_status(rconn, job_id, "error")
update_stdout_stderr(
- traceback.format_exc().encode("utf-8"), "stderr", rconn, job_id)
+ rconn, job_id, traceback.format_exc().encode("utf-8"), "stderr")
print(traceback.format_exc(), file=sys.stderr)
sys.exit(4)