From: Michael Tremer Date: Wed, 20 Sep 2023 15:43:54 +0000 (+0000) Subject: users: Show used daily build quota X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=607a2fbad2898f7278f3c48bd2238c4f683f0e6e;p=pbs.git users: Show used daily build quota Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/users.py b/src/buildservice/users.py index 6d21f89d..84e3a8c7 100644 --- a/src/buildservice/users.py +++ b/src/buildservice/users.py @@ -52,11 +52,11 @@ LDAP_ATTRS = ( "mailAlternateAddress", ) -WITH_EXCEEDED_QUOTAS_CTE = """ - users_with_exceeded_quotas AS ( +WITH_USED_BUILD_TIME_CTE = """ + user_build_times AS ( SELECT users.id AS user_id, - SUM(jobs.finished_at - jobs.started_at) AS used_quota + SUM(jobs.finished_at - jobs.started_at) AS used FROM users LEFT JOIN @@ -75,11 +75,27 @@ WITH_EXCEEDED_QUOTAS_CTE = """ jobs.finished_at >= CURRENT_TIMESTAMP - INTERVAL '24 hours' GROUP BY users.id - HAVING - SUM(jobs.finished_at - jobs.started_at) >= users.daily_build_quota ) """ +WITH_EXCEEDED_QUOTAS_CTE = """ + -- Include used build time + %s, + + users_with_exceeded_quotas AS ( + SELECT + * + FROM + user_build_times build_times + LEFT JOIN + users ON build_times.user_id = users.id + WHERE + users.daily_build_quota IS NOT NULL + AND + build_times.used >= users.daily_build_quota + ) +""" % WITH_USED_BUILD_TIME_CTE + class QuotaExceededError(Exception): pass @@ -668,30 +684,49 @@ class User(base.DataObject): # Build Quota def get_daily_build_quota(self): - return self.data.build_quota + return self.data.daily_build_quota def set_daily_build_quota(self, quota): self._set_attribute("daily_build_quota", quota) daily_build_quota = property(get_daily_build_quota, set_daily_build_quota) - def has_exceeded_build_quota(self): + @property + def _build_times(self): + return self.db.get(""" + WITH %s + + SELECT + * + FROM + user_build_times + WHERE + user_build_times.user_id = %%s + """ % WITH_BUILD_TIMES_CTE, self.id, + ) + + @property + def used_daily_build_quota(self): res = self.db.get(""" WITH %s SELECT - 1 AS result + user_build_times.used AS used FROM - users_with_exceeded_quotas + user_build_times WHERE - users_with_exceeded_quotas.user_id = %%s - """ % WITH_EXCEEDED_QUOTAS_CTE, self.id, + user_build_times.user_id = %%s + """ % WITH_USED_BUILD_TIME_CTE, self.id, ) - if res and res.result: - return True + if res: + return res.used - return False + def has_exceeded_build_quota(self): + if not self.daily_build_quota: + return False + + return self.used_daily_build_quota >= self.daily_build_quota # Storage Quota diff --git a/src/templates/users/show.html b/src/templates/users/show.html index b4b5c563..0fff9e4c 100644 --- a/src/templates/users/show.html +++ b/src/templates/users/show.html @@ -42,8 +42,27 @@ {% end %} - {# Quota/Disk Usage #} + {# Quotas #} {% if user.has_perm(current_user) %} + {# Build Time #} +
+
+ {% if user.daily_build_quota %} +

{{ _("Daily Build Quota") }}

+

+ {{ format_time(user.used_daily_build_quota) }}/{{ format_time(user.daily_build_quota) }} +

+ {% else %} +

{{ _("Daily Build Usage") }}

+

+ {{ format_time(user.used_daily_build_quota) }} +

+ {% end %} +
+
+ + + {# Disk Usage #}
{% if user.storage_quota %}