Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions app/jobs/application_job.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
class ApplicationJob < ActiveJob::Base
# Automatically retry jobs that encountered a deadlock
# retry_on ActiveRecord::Deadlocked
retry_on ActiveRecord::Deadlocked

# Most jobs are safe to ignore if the underlying records are no longer available
# discard_on ActiveJob::DeserializationError
discard_on ActiveJob::DeserializationError

def initialize
@job_id = SecureRandom.uuid
super
end

def logger
Rails.job_logger.tagged(self.class.name, @job_id)
end
end
4 changes: 3 additions & 1 deletion app/jobs/auto_close_complaints_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ class AutoCloseComplaintsJob < ApplicationJob
def perform(*_args)
complaints = Complaint.where(status: 'reviewed')
.where(Arel.sql('status_updated_at <= ?', 14.days.ago))
complaints.each do |complaint|
statuses = complaints.map do |complaint|
complaint.update_status 'closed'
end
successful = statuses.compact_blank.size
logger.info "Found #{complaints.size} inactive complaints, successfully closed #{successful} of them."
end
end
11 changes: 8 additions & 3 deletions app/jobs/clean_up_new_thread_followers_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,15 @@ def perform
duplicate = followers.first
result = duplicate.destroy

unless result
puts "failed to destroy new thread follower duplicate \"#{duplicate.id}\""
duplicate.errors.each { |e| puts e.full_message }
next if result

logger.warn "Failed to destroy new thread follower duplicate \"#{duplicate.id}. Validations follow."
duplicate.errors.full_messages.each do |msg|
logger.warn msg
end
duplicate.errors.each { |e| puts e.full_message }
end

logger.info "Processed #{posts.size} posts."
end
end
13 changes: 9 additions & 4 deletions app/jobs/clean_up_spammy_users_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,22 @@ def perform(created_after: 1.month.ago)
.where(users: { deleted: false }).group('users.id').having('count(posts.id) > 0')
.having('count(distinct if(posts.deleted = true, null, posts.id)) = 0')

blocked = 0

possible_spammers.each do |spammer|
all_posts_spam = spammer.posts.all? do |post|
# A post is considered spam if there are any helpful spam flags on it.
post.flags.any? do |flag|
flag.post_flag_type.name == "it's spam" && flag.status == 'helpful'
end
end
if all_posts_spam
spammer.block('automatic block from spam cleanup job', length: 2.years)
spammer.soft_delete(User.system)
end
next unless all_posts_spam

blocked += 1
spammer.block('automatic block from spam cleanup job', length: 2.years)
spammer.soft_delete(User.system)
end

logger.info "Considered #{possible_spammers.size} potential spammers, blocked #{blocked}."
end
end
11 changes: 8 additions & 3 deletions app/jobs/clean_up_thread_followers_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,15 @@ def perform
duplicate = followers.first
result = duplicate.destroy

unless result
puts "failed to destroy thread follower duplicate \"#{duplicate.id}\""
duplicate.errors.each { |e| puts e.full_message }
next if result

logger.warn "Failed to destroy thread follower duplicate \"#{duplicate.id}. Validations follow."
duplicate.errors.full_messages.each do |msg|
logger.warn msg
end
duplicate.errors.each { |e| puts e.full_message }
end

logger.info "Processed #{threads.size} threads."
end
end
40 changes: 22 additions & 18 deletions app/jobs/cleanup_votes_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,32 @@ class CleanupVotesJob < ApplicationJob

def perform
Community.all.each do |c|
RequestContext.community = c
orphan_votes = Vote.all.reject { |v| v.post.present? }
logger.tagged(c.name) do
RequestContext.community = c
orphan_votes = Vote.all.reject { |v| v.post.present? }

puts "[#{c.name}] destroying #{orphan_votes.length} #{'orphan vote'.pluralize(orphan_votes.length)}"
logger.info "Removing #{orphan_votes.length} #{'orphan vote'.pluralize(orphan_votes.length)}"

system_user = User.find(-1)
system_user = User.find(-1)

orphan_votes.each do |v|
result = v.destroy
orphan_votes.each do |v|
result = v.destroy

if result
AuditLog.admin_audit(
comment: "Deleted orphaned vote for user ##{v.recv_user_id} " \
"on post ##{v.post_id} " \
"in community ##{c.id} (#{c.name})",
event_type: 'vote_delete',
related: v,
user: system_user
)
else
puts "[#{c.name}] failed to destroy vote \"#{v.id}\""
v.errors.each { |e| puts e.full_message }
if result
AuditLog.admin_audit(
comment: "Deleted orphaned vote for user ##{v.recv_user_id} " \
"on post ##{v.post_id} " \
"in community ##{c.id} (#{c.name})",
event_type: 'vote_delete',
related: v,
user: system_user
)
else
logger.warn "Failed to remove vote #{v.id}. Validations follow."
v.errors.full_messages.each do |msg|
logger.warn msg
end
end
end
end
end
Expand Down
2 changes: 2 additions & 0 deletions app/jobs/potential_spam_profiles_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@ def perform
UserAbility.where(community_user_id: cu_ids, ability_id: ability_ids)
.update_all(is_suspended: true, suspension_message: 'This ability has been automatically suspended.')
end

logger.info "Found #{users.size} likely spam profiles & suspended abilities."
end
end
2 changes: 2 additions & 0 deletions app/jobs/send_summary_emails_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,7 @@ def perform
.content_summary
.deliver_later
end

logger.info "Scheduled send of #{staff.size} emails."
end
end
16 changes: 16 additions & 0 deletions config/initializers/job_logger.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module Rails
class << self
@job_logger = nil

def job_logger
if @job_logger.nil?
logger = ActiveSupport::Logger.new(Rails.root.join('log/jobs.log'))
logger.level = Rails.configuration.log_level
logger.formatter = ::Logger::Formatter.new
@job_logger = ActiveSupport::TaggedLogging.new(logger)
else
@job_logger
end
end
end
end
70 changes: 0 additions & 70 deletions config/initializers/new_framework_defaults_7_2.rb

This file was deleted.

Loading