Add --verbose and --dry-run option to tootctl media remove (#8519)

* Add --verbose and --dry-run options to CLI interface for removing remote media.

* Fix coding style problem.
pull/694/head^2
mayaeh 2018-08-31 10:46:13 +09:00 committed by Eugen Rochko
parent f5c052b5e6
commit 18eb565755
1 changed files with 12 additions and 5 deletions

View File

@ -10,6 +10,8 @@ module Mastodon
class MediaCLI < Thor class MediaCLI < Thor
option :days, type: :numeric, default: 7 option :days, type: :numeric, default: 7
option :background, type: :boolean, default: false option :background, type: :boolean, default: false
option :verbose, type: :boolean, default: false
option :dry_run, type: :boolean, default: false
desc 'remove', 'Remove remote media files' desc 'remove', 'Remove remote media files'
long_desc <<-DESC long_desc <<-DESC
Removes locally cached copies of media attachments from other servers. Removes locally cached copies of media attachments from other servers.
@ -22,22 +24,27 @@ module Mastodon
possible. In Sidekiq they will be processed with higher concurrency, but possible. In Sidekiq they will be processed with higher concurrency, but
it may impact other operations of the Mastodon server, and it may overload it may impact other operations of the Mastodon server, and it may overload
the underlying file storage. the underlying file storage.
With the --verbose option, output deleting file ID to console (only when --background false).
With the --dry-run option, output the number of files to delete without deleting.
DESC DESC
def remove def remove
time_ago = options[:days].days.ago time_ago = options[:days].days.ago
queued = 0 queued = 0
processed = 0 processed = 0
dry_run = options[:dry_run] ? '(DRY RUN)' : ''
if options[:background] if options[:background]
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| 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|
queued += media_attachments.size queued += media_attachments.size
Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id)) Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id)) unless options[:dry_run]
end end
else else
MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).reorder(nil).find_in_batches do |media_attachments| MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).reorder(nil).find_in_batches do |media_attachments|
media_attachments.each do |m| media_attachments.each do |m|
Maintenance::UncacheMediaWorker.new.perform(m) Maintenance::UncacheMediaWorker.new.perform(m) unless options[:dry_run]
say('.', :green, false) options[:verbose] ? say(m.id) : say('.', :green, false)
processed += 1 processed += 1
end end
end end
@ -46,9 +53,9 @@ module Mastodon
say say
if options[:background] if options[:background]
say("Scheduled the deletion of #{queued} media attachments", :green) say("Scheduled the deletion of #{queued} media attachments #{dry_run}.", :green)
else else
say("Removed #{processed} media attachments", :green) say("Removed #{processed} media attachments #{dry_run}.", :green)
end end
end end
end end