forked from mastodon/mastodon
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move more tasks to tootctl (mastodon#8675)
* Move more tasks to tootctl - tootctl feeds build - tootctl feeds clear - tootctl accounts refresh Clean up exit codes and help messages * Move user modifying to tootctl * Improve user modification through CLI, rename commands add -> create mod -> modify del -> delete To remove ambiguity * Fix code style issues * Fix not being able to unset admin/mod role
- Loading branch information
Showing
7 changed files
with
205 additions
and
387 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
# frozen_string_literal: true | ||
|
||
require_relative '../../config/boot' | ||
require_relative '../../config/environment' | ||
require_relative 'cli_helper' | ||
|
||
module Mastodon | ||
class FeedsCLI < Thor | ||
option :all, type: :boolean, default: false | ||
option :background, type: :boolean, default: false | ||
option :dry_run, type: :boolean, default: false | ||
option :verbose, type: :boolean, default: false | ||
desc 'build [USERNAME]', 'Build home and list feeds for one or all users' | ||
long_desc <<-LONG_DESC | ||
Build home and list feeds that are stored in Redis from the database. | ||
With the --all option, all active users will be processed. | ||
Otherwise, a single user specified by USERNAME. | ||
With the --background option, regeneration will be queued into Sidekiq, | ||
and the command will exit as soon as possible. | ||
With the --dry-run option, no work will be done. | ||
With the --verbose option, when accounts are processed sequentially in the | ||
foreground, the IDs of the accounts will be printed. | ||
LONG_DESC | ||
def build(username = nil) | ||
dry_run = options[:dry_run] ? '(DRY RUN)' : '' | ||
|
||
if options[:all] || username.nil? | ||
processed = 0 | ||
queued = 0 | ||
|
||
User.active.select(:id, :account_id).reorder(nil).find_in_batches do |users| | ||
if options[:background] | ||
RegenerationWorker.push_bulk(users.map(&:account_id)) unless options[:dry_run] | ||
queued += users.size | ||
else | ||
users.each do |user| | ||
RegenerationWorker.new.perform(user.account_id) unless options[:dry_run] | ||
options[:verbose] ? say(user.account_id) : say('.', :green, false) | ||
processed += 1 | ||
end | ||
end | ||
end | ||
|
||
if options[:background] | ||
say("Scheduled feed regeneration for #{queued} accounts #{dry_run}", :green, true) | ||
else | ||
say | ||
say("Regenerated feeds for #{processed} accounts #{dry_run}", :green, true) | ||
end | ||
elsif username.present? | ||
account = Account.find_local(username) | ||
|
||
if options[:background] | ||
RegenerationWorker.perform_async(account.id) unless options[:dry_run] | ||
else | ||
RegenerationWorker.new.perform(account.id) unless options[:dry_run] | ||
end | ||
|
||
say("OK #{dry_run}", :green, true) | ||
else | ||
say('No account(s) given', :red) | ||
exit(1) | ||
end | ||
end | ||
|
||
desc 'clear', 'Remove all home and list feeds from Redis' | ||
def clear | ||
keys = Redis.current.keys('feed:*') | ||
|
||
Redis.current.pipelined do | ||
keys.each { |key| Redis.current.del(key) } | ||
end | ||
|
||
say('OK', :green) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.