From: Michael Tremer Date: Thu, 11 May 2023 19:05:40 +0000 (+0000) Subject: repos: Improve stats X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35beb6a84cd0e10ba8a0bea2f91ef7915b5cd48d;p=pbs.git repos: Improve stats Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/repository.py b/src/buildservice/repository.py index 8f44b1c7..a16036b4 100644 --- a/src/buildservice/repository.py +++ b/src/buildservice/repository.py @@ -529,6 +529,8 @@ class Repository(base.DataObject): builds.deleted_at IS NULL AND repository_builds.repo_id = %s + AND + repository_builds.removed_at IS NULL ORDER BY packages.name, packages.evr""", self.id, @@ -536,6 +538,26 @@ class Repository(base.DataObject): return list(builds) + @lazy_property + def total_builds(self): + res = self.db.get(""" + SELECT + COUNT(*) AS count + FROM + repository_builds + LEFT JOIN + builds ON repository_builds.build_id = builds.id + WHERE + builds.deleted_at IS NULL + AND + repository_builds.repo_id = %s + AND + repository_builds.removed_at IS NULL + """, self.id, + ) + + return res.count + def get_builds_by_name(self, name): """ Returns an ordered list of all builds that match this name @@ -684,6 +706,67 @@ class Repository(base.DataObject): return { row.arch : row.size for row in res if row.arch in self.distro.arches } + @lazy_property + def total_size(self): + res = self.db.get(""" + WITH packages AS ( + -- Source Packages + SELECT + packages.filesize AS size + FROM + repository_builds + LEFT JOIN + builds ON repository_builds.build_id = builds.id + LEFT JOIN + packages ON builds.pkg_id = packages.id + WHERE + builds.deleted_at IS NULL + AND + packages.deleted_at IS NULL + AND + repository_builds.repo_id = %s + AND + repository_builds.removed_at IS NULL + + UNION ALL + + -- Binary Packages + SELECT + packages.filesize AS size + FROM + repository_builds + LEFT JOIN + builds ON repository_builds.build_id = builds.id + LEFT JOIN + jobs ON builds.id = jobs.build_id + LEFT JOIN + job_packages ON jobs.id = job_packages.job_id + LEFT JOIN + packages ON job_packages.pkg_id = packages.id + WHERE + builds.deleted_at IS NULL + AND + jobs.deleted_at IS NULL + AND + packages.deleted_at IS NULL + AND + repository_builds.repo_id = %s + AND + repository_builds.removed_at IS NULL + ) + + SELECT + SUM(packages.size) AS size + FROM + packages + """, self.id, self.id, + ) + + if res: + return res.size + + return 0 + # Pakfire def pakfire(self, **kwargs): diff --git a/src/templates/repos/show.html b/src/templates/repos/show.html index f2de048b..54d8b0b1 100644 --- a/src/templates/repos/show.html +++ b/src/templates/repos/show.html @@ -44,23 +44,31 @@ {# Description #} {% if repo.description %} {% module Text(repo.description) %} + +
{% end %}