mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 09:53:43 +08:00
a3d576534a
Follows up #64b35120 This also corrects it so bytes used for internal storage counts all the space used, previously it was only counting uploads not optimized images. Additionally we now correctly count storage for optimized images.
41 lines
922 B
Ruby
41 lines
922 B
Ruby
# frozen_string_literal: true
|
|
|
|
class DiskSpace
|
|
def self.uploads_used_bytes
|
|
if Discourse.store.external?
|
|
Upload.sum(:filesize).to_i + OptimizedImage.sum(:filesize).to_i
|
|
else
|
|
used(uploads_path)
|
|
end
|
|
end
|
|
|
|
def self.uploads_free_bytes
|
|
if Discourse.store.external?
|
|
0
|
|
else
|
|
free(uploads_path)
|
|
end
|
|
end
|
|
|
|
def self.free(path)
|
|
output = Discourse::Utils.execute_command('df', '-Pk', path)
|
|
size_line = output.split("\n")[1]
|
|
size_line.split(/\s+/)[3].to_i * 1024
|
|
end
|
|
|
|
def self.percent_free(path)
|
|
output = Discourse::Utils.execute_command('df', '-P', path)
|
|
size_line = output.split("\n")[1]
|
|
size_line.split(/\s+/)[4].to_i
|
|
end
|
|
|
|
def self.used(path)
|
|
Discourse::Utils.execute_command("du", "-s", path).to_i * 1024
|
|
end
|
|
|
|
def self.uploads_path
|
|
"#{Rails.root}/public/#{Discourse.store.upload_path}"
|
|
end
|
|
private_class_method :uploads_path
|
|
end
|