# 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),
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)
import logging
import tornado.websocket
-from .handlers import BackendMixin
+from .handlers import BaseHandler, BackendMixin
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()