aboutsummaryrefslogtreecommitdiff
path: root/uploader
diff options
context:
space:
mode:
Diffstat (limited to 'uploader')
-rw-r--r--uploader/__init__.py2
-rw-r--r--uploader/background_jobs.py35
-rw-r--r--uploader/templates/jobs/job-not-found.html11
-rw-r--r--uploader/templates/jobs/job-status.html26
4 files changed, 74 insertions, 0 deletions
diff --git a/uploader/__init__.py b/uploader/__init__.py
index 23e66c1..24c45a5 100644
--- a/uploader/__init__.py
+++ b/uploader/__init__.py
@@ -19,6 +19,7 @@ from .species import speciesbp
from .oauth2.views import oauth2
from .expression_data import exprdatabp
from .errors import register_error_handlers
+from .background_jobs import background_jobs_bp
def override_settings_with_envvars(
app: Flask, ignore: tuple[str, ...]=tuple()) -> None:
@@ -102,6 +103,7 @@ def create_app(config: dict = {}):
app.register_blueprint(files, url_prefix="/files")
app.register_blueprint(oauth2, url_prefix="/oauth2")
app.register_blueprint(speciesbp, url_prefix="/species")
+ app.register_blueprint(background_jobs_bp, url_prefix="/background-jobs/")
register_error_handlers(app)
gnlibs_jobs.init_app(app)
diff --git a/uploader/background_jobs.py b/uploader/background_jobs.py
new file mode 100644
index 0000000..ac47ff2
--- /dev/null
+++ b/uploader/background_jobs.py
@@ -0,0 +1,35 @@
+import uuid
+
+from flask import request, Blueprint, render_template, current_app as app
+
+from gn_libs import jobs
+from gn_libs.jobs.jobs import JobNotFound
+from gn_libs import sqlite3
+
+from uploader.authorisation import require_login
+
+background_jobs_bp = Blueprint("background-jobs", __name__)
+
+@background_jobs_bp.route("/status/<uuid:job_id>")
+@require_login
+def job_status(job_id: uuid.UUID):
+ """View the job status."""
+ with sqlite3.connection(app.config["ASYNCHRONOUS_JOBS_SQLITE_DB"]) as conn:
+ try:
+ job = jobs.job(conn, job_id, fulldetails=True)
+ stdout = ""
+ stderr = ""
+ # with (open(job["metadata"]["stdout-file"], encoding="utf-8") as stdout_file,
+ # open(job["metadata"]["stderr-file"], encoding="utf-8") as stderr_file):
+ # stdout = stdout_file.read()
+ # stderr = stderr_file.read()
+
+ return render_template(
+ f"jobs/job-status.html",
+ job=job,
+ stdout=stdout,
+ stderr=stderr)
+ except JobNotFound as jnf:
+ return render_template(
+ "jobs/job-not-found.html",
+ job_id=job_id)
diff --git a/uploader/templates/jobs/job-not-found.html b/uploader/templates/jobs/job-not-found.html
new file mode 100644
index 0000000..a71e66f
--- /dev/null
+++ b/uploader/templates/jobs/job-not-found.html
@@ -0,0 +1,11 @@
+{%extends "base.html"%}
+
+{%from "flash_messages.html" import flash_all_messages%}
+
+{%block title%}Background Jobs{%endblock%}
+
+{%block pagetitle%}Background Jobs{%endblock%}
+
+{%block contents%}
+<p>Could not find job with ID: {{job_id}}</p>
+{%endblock%}
diff --git a/uploader/templates/jobs/job-status.html b/uploader/templates/jobs/job-status.html
new file mode 100644
index 0000000..2750fcd
--- /dev/null
+++ b/uploader/templates/jobs/job-status.html
@@ -0,0 +1,26 @@
+{%extends "base.html"%}
+
+{%from "flash_messages.html" import flash_all_messages%}
+
+{%block extrameta%}
+<meta http-equiv="refresh" content="5" />
+{%endblock%}
+
+{%block title%}Background Jobs{%endblock%}
+
+{%block pagetitle%}Background Jobs{%endblock%}
+
+{%block contents%}
+
+<p>Status: {{job["metadata"]["status"]}}</p>
+<p>Status: {{job_type}}</p>
+
+<h2>STDOUT</h2>
+<pre>{{job["stdout"]}}</pre>
+
+<h2>STDERR</h2>
+<pre>{{job["stderr"]}}</pre>
+
+<hr />
+<p>The Job: {{job["metadata"]}}</p>
+{%endblock%}