about summary refs log tree commit diff
path: root/qc_app
diff options
context:
space:
mode:
Diffstat (limited to 'qc_app')
-rw-r--r--qc_app/templates/rqtl2/no-such-job.html13
-rw-r--r--qc_app/templates/rqtl2/rqtl2-job-error.html33
-rw-r--r--qc_app/templates/rqtl2/rqtl2-job-results.html24
-rw-r--r--qc_app/templates/rqtl2/rqtl2-job-status.html24
-rw-r--r--qc_app/upload/rqtl2.py26
5 files changed, 118 insertions, 2 deletions
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%}
+<h1 class="heading">R/qtl2 job status</h1>
+
+<h2>R/qtl2 Upload: No Such Job</h2>
+
+<p class="alert-error">No job with ID {{jobid}} was found.</p>
+
+{%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%}
+<h1 class="heading">R/qtl2 job status</h1>
+
+<h2>R/qtl2 Upload: Job Status</h2>
+
+<div class="explainer">
+  <p>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.</p>
+  <p>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.</p>
+</div>
+
+<h4>stdout</h4>
+{{cli_output(job, "stdout")}}
+
+<h4>stderr</h4>
+{{cli_output(job, "stderr")}}
+
+<h4>Log</h4>
+<div class="cli-output">
+  {%for msg in messages%}
+  {{msg}}<br />
+  {%endfor%}
+</div>
+
+{%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%}
+<h1 class="heading">R/qtl2 job status</h1>
+
+<h2>R/qtl2 Upload: Job Status</h2>
+
+<div class="explainer">
+  <p>The processing of the R/qtl2 bundle you uploaded has completed
+    successfully.</p>
+  <p>You should now be able to use GeneNetwork to run analyses on your data.</p>
+</div>
+
+<h4>Log</h4>
+<div class="cli-output">
+  {%for msg in messages%}
+  {{msg}}<br />
+  {%endfor%}
+</div>
+
+{%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%}
+<meta http-equiv="refresh" content="3">
+{%endblock%}
+
+{%block contents%}
+<h1 class="heading">R/qtl2 job status</h1>
+
+<h2>R/qtl2 Upload: Job Status</h2>
+
+{{job}}
+
+<h4>Log</h4>
+<div class="cli-output">
+  {%for msg in messages%}
+  {{msg}}<br />
+  {%endfor%}
+</div>
+
+{%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/<uuid:jobid>")
+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)