Files
redux-scraper/rake/e621.rake
2025-07-10 19:24:41 +00:00

98 lines
3.3 KiB
Ruby

# typed: false
# frozen_string_literal: true
T.bind(self, T.all(Rake::DSL, Object))
namespace :e621 do
desc "run a single e621 posts index job"
task posts_index_job: :environment do
Domain::E621::Job::PostsIndexJob.set(priority: -10).perform_later({})
end
desc "download files for posts missing files"
task download_missing_files: %i[environment set_logger_stdout] do
relation =
Domain::Post::E621Post
.where(file: nil, state: :ok)
.where.not(file_url_str: nil)
puts "will download #{relation.count} posts"
relation.find_each do |p|
Domain::E621::Job::StaticFileJob.perform_now(post: p)
end
end
desc "scan e621 user favs"
task scan_user_favs: :environment do
while user =
Domain::User::E621User
.where(scanned_favs_at: nil)
.where(num_other_favs_cached: ..200)
.order("RANDOM()")
.take
Domain::E621::Job::ScanUserFavsJob.perform_now(user: user)
end
end
desc "scan e621 user favs, descending by num_other_favs_cached"
task scan_user_favs_descending: %i[environment set_logger_stdout] do
user_query =
lambda do
Domain::User::E621User
.where(scanned_favs_status: nil)
.or(Domain::User::E621User.where.not(scanned_favs_status: "error"))
.where(scanned_favs_at: nil)
.where.not(num_other_favs_cached: nil)
.order(num_other_favs_cached: :desc)
end
while user = user_query.call.first
Domain::E621::Job::ScanUserFavsJob.perform_now(user: user)
end
end
desc "Gather cached user fav counts based on post fav lists"
task collect_post_favs: :environment do
max_page = (ENV["MAX_PAGE"] || 5).to_i
start_page = (ENV["START_PAGE"] || 1).to_i
default_query = "status:any order:favcount"
query = nil
while query.blank?
print "query (#{default_query})> "
query = $stdin.gets&.chomp || default_query
end
Domain::E621::Task::CollectPostFavsTask.new.run(
query:,
start_page:,
max_page:,
)
end
desc "Show statistics about e621 favs"
task fav_stats: :environment do
puts "counting total users with cached favs..."
user_relation = Domain::User::E621User.where.not(num_other_favs_cached: nil)
total_users = user_relation.count
puts "total users: #{total_users}"
puts "counting how many of those users have favs scanned..."
users_with_favs_scanned =
user_relation.where.not(scanned_favs_at: nil).count
puts "users with favs scanned: #{users_with_favs_scanned}"
puts "percent scanned: #{((users_with_favs_scanned.to_f / total_users.to_f) * 100).round(1)}%"
puts "counting total cached..."
total_cached =
ReduxApplicationRecord.connection.execute(<<~SQL).first["total"]
select SUM((json_attributes->>'num_other_favs_cached')::int) as total
from domain_e621_users
SQL
puts "counting total have..."
total_have = Domain::UserPostFav.for_post_type(Domain::Post::E621Post).count
helper = Class.new.extend(ActionView::Helpers::NumberHelper)
puts "total cached: #{helper.number_with_delimiter(total_cached)}"
puts "total have: #{helper.number_with_delimiter(total_have)}"
puts "percent cached: #{((total_have.to_f / total_cached.to_f) * 100).round(1)}%"
end
end