From f875926183e2e26881c3288e2f5c3d8ffe6397b8 Mon Sep 17 00:00:00 2001
From: Frederick Muriuki Muriithi
Date: Mon, 22 Jan 2024 08:54:29 +0300
Subject: UI: Show progress of R/qtl2 bundle processing.
---
qc_app/templates/rqtl2/no-such-job.html | 13 +++++++++++
qc_app/templates/rqtl2/rqtl2-job-error.html | 33 +++++++++++++++++++++++++++
qc_app/templates/rqtl2/rqtl2-job-results.html | 24 +++++++++++++++++++
qc_app/templates/rqtl2/rqtl2-job-status.html | 24 +++++++++++++++++++
qc_app/upload/rqtl2.py | 26 +++++++++++++++++++--
5 files changed, 118 insertions(+), 2 deletions(-)
create mode 100644 qc_app/templates/rqtl2/no-such-job.html
create mode 100644 qc_app/templates/rqtl2/rqtl2-job-error.html
create mode 100644 qc_app/templates/rqtl2/rqtl2-job-results.html
create mode 100644 qc_app/templates/rqtl2/rqtl2-job-status.html
(limited to 'qc_app')
diff --git a/qc_app/templates/rqtl2/no-such-job.html b/qc_app/templates/rqtl2/no-such-job.html
new file mode 100644
index 0000000..b56980b
--- /dev/null
+++ b/qc_app/templates/rqtl2/no-such-job.html
@@ -0,0 +1,13 @@
+{%extends "base.html"%}
+{%from "flash_messages.html" import flash_messages%}
+
+{%block title%}Job Status{%endblock%}
+
+{%block contents%}
+
R/qtl2 job status
+
+R/qtl2 Upload: No Such Job
+
+No job with ID {{jobid}} was found.
+
+{%endblock%}
diff --git a/qc_app/templates/rqtl2/rqtl2-job-error.html b/qc_app/templates/rqtl2/rqtl2-job-error.html
new file mode 100644
index 0000000..72a334b
--- /dev/null
+++ b/qc_app/templates/rqtl2/rqtl2-job-error.html
@@ -0,0 +1,33 @@
+{%extends "base.html"%}
+{%from "cli-output.html" import cli_output%}
+
+{%block title%}Job Status{%endblock%}
+
+{%block contents%}
+R/qtl2 job status
+
+R/qtl2 Upload: Job Status
+
+
+
The processing of the R/qtl2 bundle you uploaded has failed. We have
+ provided some information below to help you figure out what the problem
+ could be.
+
If you find that you cannot figure out what the problem is on your own,
+ please contact the team running the system for assistance, providing the
+ R/qtl2 bundle you uploaded, and a screenshot of this page.
+
+
+stdout
+{{cli_output(job, "stdout")}}
+
+stderr
+{{cli_output(job, "stderr")}}
+
+Log
+
+ {%for msg in messages%}
+ {{msg}}
+ {%endfor%}
+
+
+{%endblock%}
diff --git a/qc_app/templates/rqtl2/rqtl2-job-results.html b/qc_app/templates/rqtl2/rqtl2-job-results.html
new file mode 100644
index 0000000..4ecd415
--- /dev/null
+++ b/qc_app/templates/rqtl2/rqtl2-job-results.html
@@ -0,0 +1,24 @@
+{%extends "base.html"%}
+{%from "cli-output.html" import cli_output%}
+
+{%block title%}Job Status{%endblock%}
+
+{%block contents%}
+R/qtl2 job status
+
+R/qtl2 Upload: Job Status
+
+
+
The processing of the R/qtl2 bundle you uploaded has completed
+ successfully.
+
You should now be able to use GeneNetwork to run analyses on your data.
+
+
+Log
+
+ {%for msg in messages%}
+ {{msg}}
+ {%endfor%}
+
+
+{%endblock%}
diff --git a/qc_app/templates/rqtl2/rqtl2-job-status.html b/qc_app/templates/rqtl2/rqtl2-job-status.html
new file mode 100644
index 0000000..a8bc640
--- /dev/null
+++ b/qc_app/templates/rqtl2/rqtl2-job-status.html
@@ -0,0 +1,24 @@
+{%extends "base.html"%}
+{%from "flash_messages.html" import flash_messages%}
+
+{%block title%}Job Status{%endblock%}
+
+{%block extrameta%}
+
+{%endblock%}
+
+{%block contents%}
+R/qtl2 job status
+
+R/qtl2 Upload: Job Status
+
+{{job}}
+
+Log
+
+ {%for msg in messages%}
+ {{msg}}
+ {%endfor%}
+
+
+{%endblock%}
diff --git a/qc_app/upload/rqtl2.py b/qc_app/upload/rqtl2.py
index 7ba90c2..8a0d8b4 100644
--- a/qc_app/upload/rqtl2.py
+++ b/qc_app/upload/rqtl2.py
@@ -1,9 +1,9 @@
"""Module to handle uploading of R/qtl2 bundles."""
import sys
import json
-from uuid import uuid4
from pathlib import Path
from datetime import date
+from uuid import UUID, uuid4
from zipfile import ZipFile, is_zipfile
from redis import Redis
@@ -581,4 +581,26 @@ def confirm_bundle_details(species_id: int, population_id: int):
redisuri,
f"{app.config['UPLOAD_FOLDER']}/job_errors")
- raise NotImplementedError
+ return redirect(url_for("upload.rqtl2.rqtl2_processing_status",
+ jobid=jobid))
+
+@rqtl2.route("/status/")
+def rqtl2_processing_status(jobid: UUID):
+ """Retrieve the status of the job processing the uploaded R/qtl2 bundle."""
+ with Redis.from_url(app.config["REDIS_URL"], decode_responses=True) as rconn:
+ thejob = jobs.job(rconn, jobid)
+ if not bool(thejob):
+ return render_template("rqtl2/no-such-job.html", jobid=jobid)
+
+ logmessages = rconn.lrange(thejob.get("log-messagelist"), 0, -1) or []
+
+ if thejob["status"] == "error":
+ return render_template(
+ "rqtl2/rqtl2-job-error.html", job=thejob, messages=logmessages)
+ if thejob["status"] == "success":
+ return render_template("rqtl2/rqtl2-job-results.html",
+ job=thejob,
+ messages=logmessages)
+
+ return render_template(
+ "rqtl2/rqtl2-job-status.html", job=thejob, messages=logmessages)
--
cgit v1.2.3