]> git.ipfire.org Git - pbs.git/commitdiff
hub: Add a handler that is called when jobs have finished
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 23 Oct 2022 20:53:26 +0000 (20:53 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 23 Oct 2022 20:53:26 +0000 (20:53 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/hub/__init__.py
src/hub/handlers.py
src/hub/jobs.py

index e6a7c0cdc5b0d9df56a338ffd8521d7c8767df0d..860e707e54cecd7790c49f12cc977ee980cabfb2 100644 (file)
@@ -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),
index 33257f4f91921266d49f2e64b92bf1aa5b9220ea..bfd73f6a8f29e61ba79ffe408360c40c5a73b718 100644 (file)
@@ -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)
 
index 1d682435bc5eb3c1510fda16f27a0c1982825d81..cd82ec3e11244976c75d6519891c29ac96dc57e2 100644 (file)
@@ -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()