]> git.ipfire.org Git - pbs.git/commitdiff
queue: Show queue in a better way on the index page
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 19 May 2023 16:51:31 +0000 (16:51 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 19 May 2023 16:51:31 +0000 (16:51 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/buildservice/jobs.py
src/templates/base.html
src/templates/builds/queue.html [new file with mode: 0644]
src/templates/index.html
src/templates/queue.html [deleted file]
src/web/__init__.py
src/web/builds.py
src/web/handlers.py
src/web/jobs.py

index 72c4e2501ef61dd7121f94f76f3db2ef8b66f045..107b9e04961124f450d7ba6c9811da7c3390a10a 100644 (file)
@@ -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
index 4d2e46d669eec694f180120124ede20f3b22e9cb..bbd4334b7e5804843a969f1f37c99c3f14ee62b4 100644 (file)
@@ -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
index 0cb5ee49b7f4ad115ff6040ed6f17a457752137c..cc4a91852010da9a8486ad77cea89e197177f101 100644 (file)
@@ -63,6 +63,9 @@
                                                                                {{ _("Users") }}
                                                                        </a>
                                                                {% end %}
+                                                               <a class="navbar-item" href="/builds/queue">
+                                                                       {{ _("Build Queue") }}
+                                                               </a>
                                                                <a class="navbar-item" href="/log">
                                                                        {{ _("Log") }}
                                                                </a>
diff --git a/src/templates/builds/queue.html b/src/templates/builds/queue.html
new file mode 100644 (file)
index 0000000..820e5e0
--- /dev/null
@@ -0,0 +1,32 @@
+{% extends "../base.html" %}
+
+{% block title %}{{ _("Build Queue") }}{% end block %}
+
+{% block body %}
+       <section class="hero is-light">
+               <div class="hero-body">
+                       <div class="container">
+                               <nav class="breadcrumb" aria-label="breadcrumbs">
+                                       <ul>
+                                               <li>
+                                                       <a href="/builds">{{ _("Builds") }}</a>
+                                               </li>
+                                               <li class="is-active">
+                                                       <a href="#" aria-current="page">
+                                                               {{ _("Queue") }}
+                                                       </a>
+                                               </li>
+                                       </ul>
+                               </nav>
+
+                               <h1 class="title">{{ _("Build Queue") }}</h1>
+                       </div>
+               </div>
+       </section>
+
+       <section class="section">
+               <div class="container">
+                       {% module JobsList(queue) %}
+               </div>
+       </section>
+{% end block %}
index 230391db5551827f6bf7f2b305f4be23fc622def..bf416f8ea2e2f5805af96b54fd3819314ddca600 100644 (file)
                </div>
        </section>
 
-       {% if jobs %}
-               <section class="section">
-                       <div class="container">
-                               <h1 class="title">{{ _("Running Jobs") }}</h1>
+       {# Show a status bar with running/queued jobs #}
+       {% if running_jobs or queued_jobs %}
+               <section class="hero is-light">
+                       <div class="hero-body">
+                               <div class="container">
+                                       <div class="level">
+                                               {# Running Jobs #}
+                                               {% if running_jobs %}
+                                                       <div class="level-item has-text-centered">
+                                                               <div>
+                                                                       <p class="heading">{{ _("Running Jobs") }}</p>
+                                                                       <p class="title">{{ len(running_jobs) }}</p>
+                                                               </div>
+                                                       </div>
+                                               {% end %}
+
+                                               {# Queue Length #}
+                                               {% if queue_length %}
+                                                       <div class="level-item has-text-centered">
+                                                               <div>
+                                                                       <p class="heading">{{ _("Queued Jobs") }}</p>
+                                                                       <p class="title">{{ queue_length }}</p>
+                                                               </div>
+                                                       </div>
+                                               {% end %}
+                                       </div>
+
+                                       <nav class="panel has-background-white">
+                                               {# Show running jobs #}
+                                               {% for job in running_jobs %}
+                                                       <a class="panel-block is-active"
+                                                                       href="/builds/{{ job.build.uuid }}">
+                                                               <span class="panel-icon">
+                                                                       <i class="fa-solid fa-gear fa-spin" aria-hidden="true"></i>
+                                                               </span>
+
+                                                               <div>
+                                                                       <p>{{ job }}</p>
+
+                                                                       {% module JobsLogStream(job, limit=1, small=True) %}
+                                                               </div>
+                                                       </a>
+                                               {% end %}
+
+                                               {# Show queued jobs #}
+                                               {% for job in queued_jobs %}
+                                                       <a class="panel-block"
+                                                                       href="/builds/{{ job.build.uuid }}">
+                                                               <span class="panel-icon">
+                                                                       <i class="fa-solid fa-clock" aria-hidden="true"></i>
+                                                               </span>
 
-                               {% module JobsList(jobs) %}
+                                                               {{ job }}
+                                                       </a>
+                                               {% end %}
+
+                                               {# Show link to see entire queue #}
+                                               {% if queue_length > len(queued_jobs) %}
+                                                       <a class="panel-block is-justify-content-center" href="/builds/queue">
+                                                               {{ _("Show All Queued Jobs") }}
+                                                       </a>
+                                               {% end %}
+                                       </nav>
+                               </div>
                        </div>
                </section>
        {% end %}
-
-       <section class="section has-text-centered">
-               <div class="container">
-                       {% set q = len(backend.jobs.queue) %}
-
-                       <a href="/queue">
-                               {{ _("One Job In Queue", "%(num)s Jobs In Queue", q) % { "num" : q } }}
-                       </a>
-               </div>
-       </section>
 {% end block %}
diff --git a/src/templates/queue.html b/src/templates/queue.html
deleted file mode 100644 (file)
index b6bdc8e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{ _("Job Queue") }}{% end block %}
-
-{% block body %}
-       <section class="section">
-               <div class="container">
-                       <nav class="breadcrumb" aria-label="breadcrumbs">
-                               <ul>
-                                       <li class="is-active">
-                                               <a href="#" aria-current="page">
-                                                       {{ _("Job Queue") }}
-                                               </a>
-                                       </li>
-                               </ul>
-                       </nav>
-
-                       <h1 class="title">{{ _("Job Queue") }}</h1>
-
-                       {% module JobsList(queue) %}
-               </div>
-       </section>
-{% end block %}
index 5d244269cf0ec58b7b7e559f84e691c75d43fdb1..a23cfdeddd1d6fa5cdc90c65b1b6519c284e91d1 100644 (file)
@@ -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),
index d6c4521308fbf8d8ac2a6bfed0227cd6d7900837..120218047d737023ff727582b608044115754f6e 100644 (file)
@@ -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)
index 8f869ccc04b94cf40b2b08b482589de6950266ac..a2609dc88388b865a133fe7516c5a08d08df0968 100644 (file)
@@ -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):
index ba317e8c60705bf7b76668a5064a53488d3eb963..5ccd63701a36bfa013dabbcd02006cbf346c9ffa 100644 (file)
@@ -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)