lib/good_job/cli.rb in good_job-0.8.2 vs lib/good_job/cli.rb in good_job-0.9.0
- old
+ new
@@ -38,11 +38,16 @@
job_query = GoodJob::Job.all.priority_ordered
queue_names_without_all = queue_names.reject { |q| q == '*' }
job_query = job_query.where(queue_name: queue_names_without_all) unless queue_names_without_all.size.zero?
- job_performer = job_query.to_performer
+ performer_method = if GoodJob.preserve_job_records
+ :perform_with_advisory_lock_and_preserve_job_records
+ else
+ :perform_with_advisory_lock_and_destroy_job_records
+ end
+ job_performer = GoodJob::Performer.new(job_query, performer_method)
$stdout.puts "GoodJob worker starting with max_threads=#{max_threads} on queues=#{queue_names.join(',')}"
timer_options = {}
timer_options[:execution_interval] = poll_interval if poll_interval.positive?
@@ -64,9 +69,22 @@
end
$stdout.puts "\nFinishing GoodJob's current jobs before exiting..."
scheduler.shutdown
$stdout.puts "GoodJob's jobs finished, exiting..."
+ end
+
+ desc :cleanup_preserved_jobs, "Delete preserved job records"
+ method_option :before_seconds_ago,
+ type: :numeric,
+ default: 24 * 60 * 60,
+ desc: "Delete records finished more than this many seconds ago"
+ def cleanup_preserved_jobs
+ require RAILS_ENVIRONMENT_RB
+
+ timestamp = Time.current - options[:before_seconds_ago]
+ result = GoodJob::Job.finished(timestamp).delete_all
+ $stdout.puts "Deleted #{result} preserved #{'job'.pluralize(result)} finished before #{timestamp}."
end
default_task :start
end
end