# Run the query
return await self.db.select_one(stmt, "count")
- @lazy_property
- def total_build_time(self):
- res = self.db.get("""
- SELECT
- SUM(jobs.finished_at - jobs.started_at) AS total_time
- FROM
- jobs
- LEFT JOIN
- builds ON jobs.build_id = builds.id
- WHERE
- jobs.finished_at IS NOT NULL
- AND
- jobs.started_at IS NOT NULL
- AND
- builds.owner_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")
+ )
+ .join(
+ builds.Build,
+ builds.Build.id == jobs.Job.build_id,
+ )
+ .where(
+ jobs.Job.started_at != None,
+ builds.Build.owner == self,
+ )
)
- if res:
- return res.total_time
+ return await self.db.select_one(stmt, "total_build_time")
# Custom repositories
<div class="block">
<nav class="level">
{# Total Builds #}
+ {% set total_builds = user.get_total_builds() %}
+
<div class="level-item has-text-centered">
<div>
<p class="heading">{{ _("Total Builds") }}</p>
- <p class="title">{{ user.total_builds }}</p>
+ <p class="title">{{ total_builds }}</p>
</div>
</div>
{# Total Build Time #}
- {% if user.total_build_time %}
+ {% set total_build_time = user.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="title">
- {{ user.total_build_time | format_time }}
+ {{ total_build_time | format_time }}
</p>
</div>
</div>