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: