]> git.ipfire.org Git - pbs.git/commitdiff
jobs: Unify the job listing
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 12 Feb 2025 15:22:11 +0000 (15:22 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 12 Feb 2025 15:22:11 +0000 (15:22 +0000)
There used to be a separate listing for the job queue which is not
necessary as we can unify them.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/templates/index.html
src/templates/jobs/index.html
src/templates/jobs/macros.html
src/templates/jobs/queue.html

index 40b65f2d38cac1f998a7bab22006650c94705418..d0fa7d83b72676f05350e61ecd46c08a3ed2492c 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "base.html" %}
 
-{% from "jobs/macros.html" import JobQueue with context %}
+{% from "jobs/macros.html" import JobList with context %}
 {% from "users/macros.html" import UserPushSubscribeButton with context %}
 
 {% block title %}{{ _("Welcome!") }}{% endblock %}
@@ -53,7 +53,7 @@
                <section class="hero is-light">
                        <div class="hero-body">
                                <div class="container">
-                                       {{ JobQueue(jobs) }}
+                                       {{ JobList(jobs) }}
 
                                        <div class="buttons is-centered">
                                                <a class="button is-light" href="/jobs/queue">
index 07a240cef3c08d661f7dfb8b3699894246c1250f..457f3f187c10f3e1c56f252d5cab3f4875ccf9fa 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "base.html" %}
 
-{% from "jobs/macros.html" import JobQueue with context %}
+{% from "jobs/macros.html" import JobList with context %}
 
 {% block title %}{{ _("Recent Jobs") }}{% endblock %}
 
@@ -44,7 +44,7 @@
                                <div class="block">
                                        <h4 class="title is-4">{{ date | format_day }}</h4>
 
-                                       {{ JobQueue(items) }}
+                                       {{ JobList(items) }}
                                </div>
                        {% endfor %}
 
index 27fd885a08eb7d51f03eb4a2d189d75c04619d8a..a0cdd7ae06805866000b793210b1b1701aaae92a 100644 (file)
 ##############################################################################}
 
 {% macro JobList(jobs, show_arch_only=False) %}
-       {% for job in jobs | sort %}
-               {% set build = job.build %}
-
-               <div class="block">
-                       <article class="panel
-                                       {% if job.is_queued() %}
-                                               is-info
-                                       {% elif job.is_pending(installcheck=False) %}
-                                               is-warning
-                                       {% elif job.is_aborted() %}
-                                               is-dark
-                                       {% elif job.has_failed() %}
-                                               is-danger
-                                       {% elif job.has_finished() %}
-                                               is-success
-                                       {% else %}
-                                               is-light
-                                       {% endif %}
-                                       ">
-                               <div class="panel-heading is-block">
-                                       <div class="level is-mobile">
-                                               <div class="level-left">
-                                                       <div class="level-item">
-                                                               {% if show_arch_only %}
-                                                                       {{ job.arch }}
-                                                               {% else %}
-                                                                       <a href="/builds/{{ build.uuid }}">
-                                                                               {{ job }}
-                                                                       </a>
+       <article class="panel">
+               {% for job in jobs | sort %}
+                       <div class="panel-block is-block">
+                               <div class="level">
+                                       <div class="level-left">
+                                               <div class="level-item">
+                                                       <span class="icon is-medium">
+                                                               {# Halted #}
+                                                               {% if job.is_halted() %}
+                                                                       <i class="fa-solid fa-pause fa-2x"></i>
+
+                                                               {# Queued #}
+                                                               {% elif job.is_queued() %}
+                                                                       <i class="fa-solid fa-hourglass-start fa-2x"></i>
+
+                                                               {# Dependency Problems #}
+                                                               {% elif job.is_pending(installcheck=False) %}
+                                                                       <i class="fa-solid fa-arrows-turn-to-dots fa-2x"></i>
+
+                                                               {# Pending #}
+                                                               {% elif job.is_pending() %}
+                                                                       <i class="fa-solid fa-hourglass-start fa-2x"></i>
+
+                                                               {# Running #}
+                                                               {% elif job.is_running() %}
+                                                                       <i class="fa-solid fa-gear fa-spinner fa-2x"></i>
+
+                                                               {# Aborted #}
+                                                               {% elif job.is_aborted() %}
+                                                                       <i class="fa-solid fa-xmark fa-2x"></i>
+
+                                                               {# Failed #}
+                                                               {% elif job.has_failed() %}
+                                                                       <i class="fa-solid fa-xmark has-text-danger fa-2x"></i>
+
+                                                               {# Finished #}
+                                                               {% elif job.has_finished() %}
+                                                                       <i class="fa-solid fa-check has-text-success fa-2x"></i>
                                                                {% endif %}
-                                                       </div>
+                                                       </span>
                                                </div>
 
-                                               <div class="level-right">
-                                                       {% if job.is_halted() %}
-                                                               <span class="tag">{{ _("Halted") }}</span>
-                                                       {% elif job.is_queued() %}
-                                                               <span class="tag">{{ _("Queued") }}</span>
-                                                       {% elif job.is_pending(installcheck=False) %}
-                                                               <span class="tag">{{ _("Dependency Problems") }}</span>
-                                                       {% elif job.is_pending() %}
-                                                               <span class="tag">{{ _("Pending") }}</span>
-                                                       {% elif job.is_running() %}
-                                                               <span class="tag">{{ _("Running...") }}</span>
-                                                       {% elif job.is_aborted() %}
-                                                               <span class="tag">{{ _("Aborted") }}</span>
-                                                       {% elif job.has_failed() %}
-                                                               <span class="tag">{{ _("Failed") }}</span>
-                                                       {% elif job.has_finished() %}
-                                                               <span class="tag">{{ _("Finished") }}</span>
-                                                       {% endif %}
+                                               <div class="level-item">
+                                                       <div>
+                                                               <h6 class="title is-6">
+                                                                       {% if show_arch_only %}
+                                                                               {{ job.arch }}
+                                                                       {% else %}
+                                                                               <a href="/builds/{{ job.build.uuid }}">
+                                                                                       {{ job }}
+                                                                               </a>
+                                                                       {% endif %}
+                                                               </h6>
+
+                                                               {# Running #}
+                                                               {% if job.is_running() %}
+                                                                       <p class="has-text-grey">
+                                                                               <small>
+                                                                                       {{ _("Started %s...") % job.started_at | format_date(shorter=True) }}
+                                                                               </small>
+                                                                       </p>
+
+                                                               {# Aborted #}
+                                                               {% elif job.is_aborted() %}
+                                                                       <p class="has-text-danger">
+                                                                               <small>
+                                                                                       {% set args = {
+                                                                                               "when" : job.aborted_at | format_date(shorter=True),
+                                                                                               "who"  : job.aborted_by,
+                                                                                       } %}
+
+                                                                                       {% if job.aborted_by %}
+                                                                                               {{ _("Was aborted %(when)s by %(who)s") % args }}
+                                                                                       {% else %}
+                                                                                               {{ _("Was automatically aborted %(when)s") % args }}
+                                                                                       {% endif %}
+                                                                               </small>
+                                                                       </p>
+
+                                                               {# Failed #}
+                                                               {% elif job.has_failed() %}
+                                                                       <p class="has-text-danger">
+                                                                               <small>
+                                                                                       {{ _("Failed %s") % job.finished_at | format_date(shorter=True) }}
+                                                                               </small>
+                                                                       </p>
+
+                                                               {# Finished #}
+                                                               {% elif job.has_finished() %}
+                                                                       <p class="has-text-success">
+                                                                               <small>
+                                                                                       {{ _("Finished %s") % job.finished_at | format_date(shorter=True) }}
+                                                                               </small>
+                                                                       </p>
+                                                               {% endif %}
+                                                       </div>
                                                </div>
                                        </div>
-                               </div>
 
-                               {# Log #}
-                               {% if job.is_running() %}
-                                       <div class="panel-block">
-                                               {{ JobLogStream(job, limit=5) }}
-                                       </div>
-
-                               {# Dependency Issues #}
-                               {% elif job.is_pending() and job.installcheck_succeeded is false %}
-                                       <div class="panel-block">
-                                               <ul>
-                                                       {% for line in job.message.splitlines() %}
-                                                               <li>{{ line }}</li>
-                                                       {% endfor %}
-                                               </ul>
-                                       </div>
-                               {% endif %}
-
-                               {% if job.is_running() or job.has_finished() %}
-                                       <div class="panel-block is-block">
-                                               <div class="level">
-                                                       <div class="level-left">
-                                                               <div class="level-item">
-                                                                       {{ job.duration | format_time }}
-
-                                                                       {# If the job is approaching its timeout, we will show a warning #}
-                                                                       {% if job.times_out_in and job.times_out_in <= datetime.timedelta(hours=1) %}
-                                                                               / {{ job.timeout | format_time }}
-                                                                       {% endif %}
-                                                               </div>
+                                       <div class="level-right">
+                                               {# Retry? #}
+                                               {% if job.can_be_retried() %}
+                                                       <div class="level-item">
+                                                               <a class="button is-small is-warning" href="/jobs/{{ job.uuid }}/retry">
+                                                                       <span class="icon">
+                                                                               <i class="fa-solid fa-repeat"></i>
+                                                                       </span>
+
+                                                                       <span>
+                                                                               {{ _("Retry") }}
+                                                                       </span>
+                                                               </a>
                                                        </div>
 
-                                                       <div class="level-right">
-                                                               <div class="level-item">
-                                                                       <div class="buttons are-small">
-                                                                               {% if job.show_log() %}
-                                                                                       {% if job.preceeding_jobs %}
-                                                                                               <div class="dropdown is-up is-right">
-                                                                                                       <div class="dropdown-trigger">
-                                                                                                               <a class="button is-light"
-                                                                                                                               aria-haspopup="true" aria-controls="dropdown-logs-{{ job.uuid }}">
-                                                                                                                       <span>{{ _("View Logs") }}</span>
-
-                                                                                                                       <span class="icon is-small">
-                                                                                                                               <i class="fas fa-angle-up" aria-hidden="true"></i>
-                                                                                                                       </span>
-                                                                                                               </a>
-                                                                                                       </div>
-
-                                                                                                       <div class="dropdown-menu" id="dropdown-logs-{{ job.uuid }}" role="menu">
-                                                                                                               <div class="dropdown-content">
-                                                                                                                       {% for j in job.all_jobs | reverse %}
-                                                                                                                               <a class="dropdown-item" href="/jobs/{{ j.uuid }}/log"
-                                                                                                                                               {% if not j.has_log() %}disabled{% endif %}>
-                                                                                                                                       {{ j.created_at | format_date }}
-                                                                                                                               </a>
-                                                                                                                       {% endfor %}
-                                                                                                               </div>
-                                                                                                       </div>
-                                                                                               </div>
-                                                                                       {% else %}
-                                                                                               <a class="button is-light" href="/jobs/{{ job.uuid }}/log">
-                                                                                                       {{ _("View Log") }}
-                                                                                               </a>
-                                                                                       {% endif %}
-                                                                               {% endif %}
+                                               {# Abort? #}
+                                               {% elif job.is_running() %}
+                                                       <div class="level-item">
+                                                               <a class="button is-small is-dark" href="/jobs/{{ job.uuid }}/abort">
+                                                                       <span class="icon">
+                                                                               <i class="fa-solid fa-stop"></i>
+                                                                       </span>
+
+                                                                       <span>
+                                                                               {{ _("Abort") }}
+                                                                       </span>
+                                                               </a>
+                                                       </div>
+                                               {% endif %}
 
-                                                                               {% if job.can_be_retried() %}
-                                                                                       <a class="button is-warning" href="/jobs/{{ job.uuid }}/retry">
-                                                                                               {{ _("Retry") }}
-                                                                                       </a>
-                                                                               {% elif job.is_running() %}
-                                                                                       <a class="button is-dark" href="/jobs/{{ job.uuid }}/abort">
-                                                                                               {{ _("Abort") }}
+                                               {# Logs #}
+                                               {% if job.show_log() %}
+                                                       <div class="level-item">
+                                                               {% if job.preceeding_jobs %}
+                                                                       <div class="dropdown is-up is-right">
+                                                                               <div class="dropdown-trigger">
+                                                                                       <a class="button is-text" aria-haspopup="true"
+                                                                                                       aria-controls="dropdown-logs-{{ job.uuid }}">
+                                                                                               <span class="icon">
+                                                                                                       <i class="fa-solid fa-file-lines"></i>
+                                                                                               </span>
+
+                                                                                               <span class="icon is-small">
+                                                                                                       <i class="fas fa-angle-up" aria-hidden="true"></i>
+                                                                                               </span>
                                                                                        </a>
-                                                                               {% endif %}
+                                                                               </div>
+
+                                                                               <div class="dropdown-menu" id="dropdown-logs-{{ job.uuid }}" role="menu">
+                                                                                       <div class="dropdown-content">
+                                                                                               {% for j in job.all_jobs | reverse %}
+                                                                                                       <a class="dropdown-item" href="/jobs/{{ j.uuid }}/log"
+                                                                                                                       {% if not j.has_log() %}disabled{% endif %}>
+                                                                                                               {{ j.created_at | format_date }}
+                                                                                                       </a>
+                                                                                               {% endfor %}
+                                                                                       </div>
+                                                                               </div>
                                                                        </div>
-                                                               </div>
+                                                               {% else %}
+                                                                       <a class="button is-text" href="/jobs/{{ job.uuid }}/log">
+                                                                               <span class="icon">
+                                                                                       <i class="fa-solid fa-file-lines"></i>
+                                                                               </span>
+                                                                       </a>
+                                                               {% endif %}
                                                        </div>
-                                               </div>
-                                       </div>
-                               {% endif %}
-                       </article>
-               </div>
-       {% endfor %}
-{% endmacro %}
+                                               {% endif %}
 
-{% macro JobQueue(jobs) %}
-       <nav class="panel has-background-white">
-               {% for job in jobs %}
-                       <a class="panel-block is-block {% if job.is_running() %}is-active{% endif %}"
-                                       href="/builds/{{ job.build.uuid }}">
-                               <span class="level">
-                                       <span class="level-left">
-                                               <span class="level-item">
-                                                       {% if job.is_running() %}
-                                                               <span class="icon">
-                                                                       <i class="fa-solid fa-gear fa-spin" aria-hidden="true"></i>
-                                                               </span>
-                                                       {% elif job.is_queued() %}
-                                                               <span class="icon">
-                                                                       <i class="fa-solid fa-clock" aria-hidden="true"></i>
-                                                               </span>
-                                                       {% elif job.has_failed() %}
-                                                               <span class="icon">
-                                                                       <i class="fa-solid fa-xmark has-text-danger" aria-hidden="true"></i>
-                                                               </span>
-                                                       {% elif job.is_aborted() %}
-                                                               <span class="icon">
-                                                                       <i class="fa-solid fa-xmark" aria-hidden="true"></i>
-                                                               </span>
-                                                       {% elif job.has_finished() %}
-                                                               <span class="icon">
-                                                                       <i class="fa-solid fa-check has-text-success" aria-hidden="true"></i>
-                                                               </span>
-                                                       {% endif %}
-                                               </span>
-
-                                               <span class="level-item">
-                                                       {{ job }}
-                                               </span>
-                                       </span>
-
-                                       <span class="level-right">
+                                               {# Runtime #}
                                                {% if job.has_finished() %}
-                                                       <span class="level-item">
-                                                               <span class="tag is-pulled-right">
-                                                                       {{ job.duration | format_time }}
-                                                               </span>
-                                                       </span>
+                                                       <div class="level-item">
+                                                               <div class="tag">
+                                                                       {{ job.duration | format_time }}
+                                                               </div>
+                                                       </div>
                                                {% endif %}
-                                       </span>
-                               </span>
-                       </a>
-
-               {# Show a message if there were no jobs #}
-               {% else %}
-                       <div class="notification has-text-centered">
-                               {{ _("The job queue is empty") }}
+                                       </div>
+                               </div>
                        </div>
                {% endfor %}
-       </nav>
+       </article>
 {% endmacro %}
 
 {% macro JobLogStream(job, small=False, limit=None) %}
index 4d265bed874b603de9c227b2692d2aa5c6ba1b87..ce63091efdde9d214684e79a0c84488b94b3c9bd 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "base.html" %}
 
-{% from "jobs/macros.html" import JobQueue with context %}
+{% from "jobs/macros.html" import JobList with context %}
 
 {% block title %}{{ _("Job Queue") }}{% endblock %}
 
@@ -29,7 +29,7 @@
 
        <section class="section">
                <div class="container">
-                       {{ JobQueue(queue) }}
+                       {{ JobList(queue) }}
                </div>
        </section>
 {% endblock %}