From: Michael Tremer Date: Fri, 19 May 2023 16:51:31 +0000 (+0000) Subject: queue: Show queue in a better way on the index page X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e415710b9f4dfdd758bbbda673092576fca7cd38;p=pbs.git queue: Show queue in a better way on the index page Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 72c4e250..107b9e04 100644 --- a/Makefile.am +++ b/Makefile.am @@ -153,7 +153,6 @@ dist_templates_DATA = \ src/templates/log.html \ src/templates/login.html \ src/templates/modal.html \ - src/templates/queue.html \ src/templates/search.html templatesdir = $(datadir)/templates @@ -185,6 +184,7 @@ dist_templates_builds_DATA = \ src/templates/builds/clone.html \ src/templates/builds/delete.html \ src/templates/builds/index.html \ + src/templates/builds/queue.html \ src/templates/builds/show.html templates_buildsdir = $(templatesdir)/builds diff --git a/src/buildservice/jobs.py b/src/buildservice/jobs.py index 4d2e46d6..bbd4334b 100644 --- a/src/buildservice/jobs.py +++ b/src/buildservice/jobs.py @@ -139,13 +139,7 @@ class Queue(base.Object): """) def __iter__(self): - jobs = self.backend.jobs._get_jobs(""" - SELECT - * - FROM - job_queue - """, - ) + jobs = self.get_jobs() return iter(jobs) @@ -162,6 +156,19 @@ class Queue(base.Object): return 0 + def get_jobs(self, limit=None): + jobs = self.backend.jobs._get_jobs(""" + SELECT + * + FROM + job_queue + LIMIT + %s + """, limit, + ) + + return list(jobs) + def pop(self, builder): """ Returns the next build job that matches the given architectures diff --git a/src/templates/base.html b/src/templates/base.html index 0cb5ee49..cc4a9185 100644 --- a/src/templates/base.html +++ b/src/templates/base.html @@ -63,6 +63,9 @@ {{ _("Users") }} {% end %} + + {{ _("Build Queue") }} + {{ _("Log") }} diff --git a/src/templates/builds/queue.html b/src/templates/builds/queue.html new file mode 100644 index 00000000..820e5e06 --- /dev/null +++ b/src/templates/builds/queue.html @@ -0,0 +1,32 @@ +{% extends "../base.html" %} + +{% block title %}{{ _("Build Queue") }}{% end block %} + +{% block body %} +
+
+
+ + +

{{ _("Build Queue") }}

+
+
+
+ +
+
+ {% module JobsList(queue) %} +
+
+{% end block %} diff --git a/src/templates/index.html b/src/templates/index.html index 230391db..bf416f8e 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -16,23 +16,71 @@ - {% if jobs %} -
-
-

{{ _("Running Jobs") }}

+ {# Show a status bar with running/queued jobs #} + {% if running_jobs or queued_jobs %} +
+
+
+
+ {# Running Jobs #} + {% if running_jobs %} +
+
+

{{ _("Running Jobs") }}

+

{{ len(running_jobs) }}

+
+
+ {% end %} + + {# Queue Length #} + {% if queue_length %} +
+
+

{{ _("Queued Jobs") }}

+

{{ queue_length }}

+
+
+ {% end %} +
+ + +
{% end %} - -
- -
{% end block %} diff --git a/src/templates/queue.html b/src/templates/queue.html deleted file mode 100644 index b6bdc8e2..00000000 --- a/src/templates/queue.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "base.html" %} - -{% block title %}{{ _("Job Queue") }}{% end block %} - -{% block body %} -
-
- - -

{{ _("Job Queue") }}

- - {% module JobsList(queue) %} -
-
-{% end block %} diff --git a/src/web/__init__.py b/src/web/__init__.py index 5d244269..a23cfded 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -136,6 +136,7 @@ class Application(tornado.web.Application): # Builds (r"/builds", builds.IndexHandler), + (r"/builds/queue", builds.QueueHandler), (r"/builds/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", builds.ShowHandler), (r"/builds/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/bug", builds.BugHandler), (r"/builds/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/clone", builds.CloneHandler), @@ -151,9 +152,6 @@ class Application(tornado.web.Application): # Build Groups (r"/builds/groups/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", builds.GroupShowHandler), - # Queue - (r"/queue", jobs.QueueHandler), - # Jobs (r"/jobs/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/abort", jobs.AbortHandler), (r"/jobs/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/log", jobs.LogHandler), diff --git a/src/web/builds.py b/src/web/builds.py index d6c45213..12021804 100644 --- a/src/web/builds.py +++ b/src/web/builds.py @@ -83,6 +83,11 @@ class IndexHandler(base.BaseHandler): limit=limit, offset=offset) +class QueueHandler(base.BaseHandler): + def get(self): + self.render("builds/queue.html", queue=self.backend.jobs.queue) + + class ShowHandler(base.BaseHandler): async def get(self, uuid): build = self.backend.builds.get_by_uuid(uuid) diff --git a/src/web/handlers.py b/src/web/handlers.py index 8f869ccc..a2609dc8 100644 --- a/src/web/handlers.py +++ b/src/web/handlers.py @@ -6,7 +6,18 @@ from . import base class IndexHandler(base.BaseHandler): def get(self): - self.render("index.html", jobs=self.backend.jobs.running) + args = { + # Fetch all running jobs + "running_jobs" : self.backend.jobs.running, + + # Fetch queued jobs + "queued_jobs" : self.backend.jobs.queue.get_jobs(limit=3), + + # Fetch the total length of the queue + "queue_length" : len(self.backend.jobs.queue), + } + + self.render("index.html", **args) class LogHandler(base.BaseHandler): diff --git a/src/web/jobs.py b/src/web/jobs.py index ba317e8c..5ccd6370 100644 --- a/src/web/jobs.py +++ b/src/web/jobs.py @@ -136,11 +136,6 @@ class APIv1LogStreamHandler(base.BackendMixin, tornado.websocket.WebSocketHandle pass -class QueueHandler(base.BaseHandler): - def get(self): - self.render("queue.html", queue=self.backend.jobs.queue) - - class LogHandler(base.BaseHandler): async def get(self, uuid): job = self.backend.jobs.get_by_uuid(uuid)