Class: Debci::StorageLimit
- Inherits:
-
Object
- Object
- Debci::StorageLimit
- Defined in:
- lib/debci/storage_limit.rb
Defined Under Namespace
Classes: CLI
Instance Method Summary collapse
- #cleanup_package(package) ⇒ Object
- #packages_with_excess_storage(all: false) ⇒ Object
- #run ⇒ Object
- #storage_limit ⇒ Object
Instance Method Details
#cleanup_package(package) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/debci/storage_limit.rb', line 37 def cleanup_package(package) storage = 0 limit = package.storage_limit || storage_limit package.jobs.where(files_purged: false).order("date DESC").in_batches.each do |subset| subset.each do |job| storage += job.disk_usage if storage > limit job.cleanup(reason: "package taking too much disk space") end end end end |
#packages_with_excess_storage(all: false) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/debci/storage_limit.rb', line 12 def packages_with_excess_storage(all: false) expiration = Time.now - Debci.config.data_retention.days query = " SELECT packages.*, sum(jobs.log_size + jobs.artifacts_size) AS storage_used FROM packages JOIN jobs ON packages.id = jobs.package_id WHERE jobs.date > '#{expiration}' AND NOT jobs.files_purged GROUP BY packages.id " unless all query += " HAVING sum(jobs.log_size + jobs.artifacts_size) >= (CASE WHEN packages.storage_limit IS NOT NULL THEN packages.storage_limit ELSE #{storage_limit} END) " end Debci::Package.find_by_sql(query) end |
#run ⇒ Object
31 32 33 34 35 |
# File 'lib/debci/storage_limit.rb', line 31 def run packages_with_excess_storage.each do |package| self.cleanup_package(package) end end |