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

* Add optional domain restrict to accounts cull

* Use "unless" - codeclimate
This commit is contained in:
Jeong Arm 2021-10-15 04:09:56 +09:00 committed by GitHub
parent a8ef6d24d8
commit 3f5f4273b3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

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