problem_recacher.rb 608 Bytes
class ProblemRecacher
  LOG_EVERY = 100
  LOG_ITR = '%.1f%% complete, %i problem(s) remaining'
  LOG_START = 'Re-caching problem attributes for %i problems'

  def self.run
    count = Problem.count
    puts format(LOG_START, count)

    Problem.no_timeout.each_with_index do |problem, index|
      problem.recache
      problem.destroy if problem.notices_count == 0

      next unless (index + 1) % LOG_EVERY == 0
      puts format(LOG_ITR, (index * 100 / count), count - index)
    end

    puts "Finished re-caching problem attributes"
  end

  def self.puts(*args)
    Rails.logger.info(*args)
  end
end