Add optional domain restrict to tootctl accounts cull (#16511)

* Add optional domain restrict to accounts cull

* Use "unless" - codeclimate
lolsob-rspec
Jeong Arm 2021-10-15 04:09:56 +09:00 committed by GitHub
parent f940e4871d
commit 5f554f1171
1 changed files with 6 additions and 3 deletions

View File

@ -287,7 +287,7 @@ module Mastodon
option :concurrency, type: :numeric, default: 5, aliases: [:c] option :concurrency, type: :numeric, default: 5, aliases: [:c]
option :dry_run, type: :boolean option :dry_run, type: :boolean
desc 'cull', 'Remove remote accounts that no longer exist' desc 'cull [DOMAIN...]', 'Remove remote accounts that no longer exist'
long_desc <<-LONG_DESC long_desc <<-LONG_DESC
Query every single remote account in the database to determine Query every single remote account in the database to determine
if it still exists on the origin server, and if it doesn't, if it still exists on the origin server, and if it doesn't,
@ -296,12 +296,15 @@ module Mastodon
Accounts that have had confirmed activity within the last week Accounts that have had confirmed activity within the last week
are excluded from the checks. are excluded from the checks.
LONG_DESC LONG_DESC
def cull def cull(*domains)
skip_threshold = 7.days.ago skip_threshold = 7.days.ago
dry_run = options[:dry_run] ? ' (DRY RUN)' : '' dry_run = options[:dry_run] ? ' (DRY RUN)' : ''
skip_domains = Concurrent::Set.new skip_domains = Concurrent::Set.new
processed, culled = parallelize_with_progress(Account.remote.where(protocol: :activitypub).partitioned) do |account| query = Account.remote.where(protocol: :activitypub)
query = query.where(domain: domains) unless domains.empty?
processed, culled = parallelize_with_progress(query.partitioned) do |account|
next if account.updated_at >= skip_threshold || (account.last_webfingered_at.present? && account.last_webfingered_at >= skip_threshold) || skip_domains.include?(account.domain) next if account.updated_at >= skip_threshold || (account.last_webfingered_at.present? && account.last_webfingered_at >= skip_threshold) || skip_domains.include?(account.domain)
code = 0 code = 0