]> git.ipfire.org Git - pbs.git/commitdiff
builders: Fix showing the total build time
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Jan 2025 15:04:28 +0000 (15:04 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Jan 2025 15:04:28 +0000 (15:04 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builders.py
src/templates/builders/show.html

index 893fe1ea4ce7a07e7eb6612993d7938900dfaa0d..03c53488eff0c45476a98a8adab64d1d6a1f2cf5 100644 (file)
@@ -728,25 +728,28 @@ class Builder(database.Base, database.BackendMixin, database.SoftDeleteMixin):
 
        # Stats
 
-       @functools.cached_property
-       def total_build_time(self):
-               res = self.db.get("""
-                       SELECT
-                               SUM(
-                                       COALESCE(jobs.finished_at, CURRENT_TIMESTAMP)
-                                       -
-                                       jobs.started_at
-                               ) AS t
-                       FROM
-                               jobs
-                       WHERE
-                               started_at IS NOT NULL
-                       AND
-                               builder_id = %s""",
-                       self.id,
+       async def get_total_build_time(self):
+               """
+                       Returns the total build time
+               """
+               stmt = (
+                       sqlalchemy
+                       .select(
+                               sqlalchemy.func.sum(
+                                       sqlalchemy.func.coalesce(
+                                               jobs.Job.finished_at,
+                                               sqlalchemy.func.current_timestamp()
+                                       )
+                                       - jobs.Job.started_at,
+                               ).label("total_build_time")
+                       )
+                       .where(
+                               jobs.Job.builder == self,
+                               jobs.Job.started_at != None,
+                       )
                )
 
-               return res.t
+               return await self.db.select_one(stmt, "total_build_time")
 
        # Connections
 
index 471ce4355ff4902a336e7ab8b28ece34a28679c3..f253f5c9e4c62b9d17d9d077169d566da780033b 100644 (file)
                                                </div>
                                        {% endif %}
 
-                                       {% if builder.total_build_time %}
+                                       {% set total_build_time = builder.get_total_build_time() %}
+                                       {% if total_build_time %}
                                                <div class="level-item has-text-centered">
                                                        <div>
-                                                               <p class="heading">{{ _("Total Build Time") }}</p>
+                                                               <p class="heading">
+                                                                       {{ _("Total Build Time") }}
+                                                               </p>
+
                                                                <p>
-                                                                       {{ format_time(builder.total_build_time) }}
+                                                                       {{ total_build_time | format_time }}
                                                                </p>
                                                        </div>
                                                </div>