You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.6 KiB

# frozen_string_literal: true
require_relative '../../config/boot'
require_relative '../../config/environment'
# rubocop:disable Rails/Output
module Mastodon
class MediaCLI < Thor
option :days, type: :numeric, default: 7
option :background, type: :boolean, default: false
desc 'remove', 'remove remote media files'
long_desc <<-DESC
Removes locally cached copies of media attachments from other servers.
The --days option specifies how old media attachments have to be before
they are removed. It defaults to 7 days.
With the --background option, instead of deleting the files sequentially,
they will be queued into Sidekiq and the command will exit as soon as
possible. In Sidekiq they will be processed with higher concurrency, but
it may impact other operations of the Mastodon server, and it may overload
the underlying file storage.
DESC
def remove
time_ago = options[:days].days.ago
queued = 0
MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id).reorder(nil).find_in_batches do |media_attachments|
if options[:background]
queued += media_attachments.size
Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id))
else
media_attachments.each do |m|
Maintenance::UncacheMediaWorker.new.perform(m)
print '.'
end
end
end
puts
puts "Scheduled the deletion of #{queued} media attachments" if options[:background]
end
end
end
# rubocop:enable Rails/Output