]> git.ipfire.org Git - pbs.git/commitdiff
users: Fix how we are calculating disk usage
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 20 Sep 2023 14:37:30 +0000 (14:37 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 20 Sep 2023 14:37:30 +0000 (14:37 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/users.py

index 12b1c9c8392018e63eee2254314fd3ea62399979..c287317f33fd4e5542467aa3318f122d42a71f8d 100644 (file)
@@ -672,96 +672,83 @@ class User(base.DataObject):
                        Returns the total disk usage of this user
                """
                res = self.db.get("""
-                       WITH user_disk_usages AS (
-                               WITH objects AS (
-                                       -- Uploads
-                                       SELECT
-                                               uploads.user_id,
-                                               uploads.size
-                                       FROM
-                                               uploads
-                                       WHERE
-                                               uploads.expires_at > CURRENT_TIMESTAMP
-
-                                       UNION ALL
-
-                                       -- Source Packages
-                                       SELECT
-                                               builds.owner_id,
-                                               packages.size
-                                       FROM
-                                               builds
-                                       JOIN
-                                               packages ON builds.pkg_id = packages.id
-                                       WHERE
-                                               builds.deleted_at IS NULL
-                                       AND
-                                               builds.owner_id IS NOT NULL
-                                       AND
-                                               packages.deleted_at IS NULL
-
-                                       UNION ALL
-
-                                       -- Binary Packages
-                                       SELECT
-                                               builds.owner_id,
-                                               packages.size
-                                       FROM
-                                               builds
-                                       JOIN
-                                               jobs ON builds.id = jobs.build_id
-                                       JOIN
-                                               job_packages ON jobs.id = job_packages.job_id
-                                       JOIN
-                                               packages ON job_packages.pkg_id = packages.id
-                                       WHERE
-                                               builds.deleted_at IS NULL
-                                       AND
-                                               builds.owner_id IS NOT NULL
-                                       AND
-                                               builds.test IS FALSE
-                                       AND
-                                               jobs.deleted_at IS NULL
-                                       AND
-                                               packages.deleted_at IS NULL
-
-                                       UNION ALL
-
-                                       -- Build Logs
-                                       SELECT
-                                               builds.owner_id,
-                                               jobs.log_size
-                                       FROM
-                                               jobs
-                                       JOIN
-                                               builds ON builds.id = jobs.build_id
-                                       WHERE
-                                               builds.deleted_at IS NULL
-                                       AND
-                                               jobs.deleted_at IS NULL
-                                       AND
-                                               builds.owner_id IS NOT NULL
-                                       AND
-                                               jobs.log_size IS NOT NULL
-                               )
-
-                               -- Sum up all objects and group by user ID
+                       WITH objects AS (
+                               -- Uploads
                                SELECT
-                                       objects.user_id,
-                                       SUM(objects.size) AS disk_usage
+                                       uploads.size AS size
                                FROM
-                                       objects
-                               GROUP BY
-                                       objects.user_id
+                                       uploads
+                               WHERE
+                                       uploads.user_id = %s
+                               AND
+                                       uploads.expires_at > CURRENT_TIMESTAMP
+
+                               UNION ALL
+
+                               -- Source Packages
+                               SELECT
+                                       packages.filesize AS size
+                               FROM
+                                       builds
+                               LEFT JOIN
+                                       packages ON builds.pkg_id = packages.id
+                               WHERE
+                                       builds.deleted_at IS NULL
+                               AND
+                                       builds.owner_id = %s
+                               AND
+                                       builds.test IS FALSE
+                               AND
+                                       packages.deleted_at IS NULL
+
+                               UNION ALL
+
+                               -- Binary Packages
+                               SELECT
+                                       packages.filesize AS size
+                               FROM
+                                       builds
+                               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
+                                       builds.owner_id = %s
+                               AND
+                                       builds.test IS FALSE
+                               AND
+                                       jobs.deleted_at IS NULL
+                               AND
+                                       packages.deleted_at IS NULL
+
+                               UNION ALL
+
+                               -- Build Logs
+                               SELECT
+                                       jobs.log_size AS size
+                               FROM
+                                       jobs
+                               LEFT JOIN
+                                       builds ON builds.id = jobs.build_id
+                               WHERE
+                                       builds.deleted_at IS NULL
+                               AND
+                                       jobs.deleted_at IS NULL
+                               AND
+                                       builds.owner_id = %s
+                               AND
+                                       jobs.log_size IS NOT NULL
                        )
 
                        SELECT
-                               disk_usage
+                               SUM(size) AS disk_usage
                        FROM
-                               user_disk_usages
-                       WHERE
-                               user_id = %s""",
-                       self.id,
+                               objects
+                       """, self.id, self.id, self.id, self.id,
                )
 
                if res: