Skip to content

Instantly share code, notes, and snippets.

@mchaisse
Last active August 29, 2015 13:58
Show Gist options
  • Save mchaisse/9936343 to your computer and use it in GitHub Desktop.
Save mchaisse/9936343 to your computer and use it in GitHub Desktop.
resque.rake
require 'progress_bar'
namespace :resque do
namespace :clear do
desc 'Clear empty workers'
task :empty_workers => :environment do
workers = Resque.workers
bar = ProgressBar.new(workers.size)
workers.each do |worker|
matches = worker.id.match(/^[^:]*:([0-9]*):[^:]*$/)
pid = matches[1]
worker.unregister_worker unless worker.worker_pids.include?(pid.to_s)
bar.increment!
end
end
desc 'Clear empty delayed jobs'
task :empty_delayed => :environment do
delayed_size = Resque.delayed_queue_schedule_size
bar = ProgressBar.new(delayed_size)
Resque.delayed_queue_peek(0, delayed_size).each do |timestamp|
size = Resque.delayed_timestamp_size(timestamp)
Resque.redis.zrem(:delayed_queue_schedule, timestamp) if size == 0
bar.increment!
end
end
desc 'Clear stats'
task :stats => :environment do
puts 'Clearing stats...'
Resque.redis.set 'stat:failed', 0
Resque.redis.set 'stat:processed', 0
end
# Too dangerous for prod ;-)
unless Rails.env.production?
desc 'Clear pending tasks'
task :queues => :environment do
queues = Resque.queues
bar = ProgressBar.new(queues.size)
queues.each do |queue_name|
Resque.redis.del("queue:#{queue_name}")
bar.increment!
end
end
desc 'Clear pending workers'
task :workers => :environment do
workers = Resque.workers
bar = ProgressBar.new(workers.size)
workers.each do |worker|
worker.unregister_worker
bar.increment!
end
end
desc 'Clear pending delayed jobs'
task :delayed => :environment do
delayed = Resque.redis.keys("delayed:*")
bar = ProgressBar.new(delayed.size)
delayed.each do |key|
Resque.redis.del("#{key}")
bar.increment!
end
Resque.redis.del 'delayed_queue_schedule'
end
end
desc 'Run all clear tasks'
task :all => :environment do
tasks = [ :empty_delayed,
:empty_workers,
:stats
]
tasks.concat([ :queues,
:delayed,
:workers
]) unless Rails.env.production?
tasks.each{ |task| Rake::Task["resque:clear:#{task.to_s}"].invoke }
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment