From: Michael Tremer Date: Sun, 23 Oct 2022 20:53:26 +0000 (+0000) Subject: hub: Add a handler that is called when jobs have finished X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa8edd5cfb8d3790a7ca19be30e337adc6166d7d;p=pbs.git hub: Add a handler that is called when jobs have finished Signed-off-by: Michael Tremer --- diff --git a/src/hub/__init__.py b/src/hub/__init__.py index e6a7c0cd..860e707e 100644 --- a/src/hub/__init__.py +++ b/src/hub/__init__.py @@ -27,6 +27,8 @@ class Application(tornado.web.Application): # Jobs (r"/jobs/([0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12})/builder", jobs.BuilderHandler), + (r"/jobs/([0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12})/finished", + jobs.FinishedHandler), (r"/jobs/active", handlers.JobsGetActiveHandler), (r"/jobs/latest", handlers.JobsGetLatestHandler), diff --git a/src/hub/handlers.py b/src/hub/handlers.py index 33257f4f..bfd73f6a 100644 --- a/src/hub/handlers.py +++ b/src/hub/handlers.py @@ -68,6 +68,11 @@ class BaseHandler(BackendMixin, tornado.web.RequestHandler): if isinstance(self.current_user, users.User): return self.current_user + def get_argument_bool(self, *args, **kwargs): + arg = self.get_argument(*args, **kwargs) + + return arg in ("on", "1") + def get_argument_int(self, *args, **kwargs): arg = self.get_argument(*args, **kwargs) diff --git a/src/hub/jobs.py b/src/hub/jobs.py index 1d682435..cd82ec3e 100644 --- a/src/hub/jobs.py +++ b/src/hub/jobs.py @@ -23,7 +23,7 @@ import json import logging import tornado.websocket -from .handlers import BackendMixin +from .handlers import BaseHandler, BackendMixin class BuilderHandler(BackendMixin, tornado.websocket.WebSocketHandler): """ @@ -73,3 +73,30 @@ class BuilderHandler(BackendMixin, tornado.websocket.WebSocketHandler): # Unknown message else: logging.warning("Received a message of an unknown type: %s" % t) + + +class FinishedHandler(BaseHandler): + """ + Called after the builder has finished the job + """ + # Don't allow users to authenticate + allow_users = False + + @tornado.web.authenticated + async def post(self, uuid): + job = self.backend.jobs.get_by_uuid(uuid) + if not job: + raise tornado.web.HTTPError(404, "Could not find job %s" % uuid) + + # Has the job been successful? + success = self.get_argument_bool("success") + + # Fetch the log + log = self.get_argument_upload("log") + + with self.db.transaction(): + # Mark the job as finished + await job.finished(success=success, log=log) + + # Delete the log + await log.delete()