Last active
August 29, 2015 13:58
-
-
Save mchaisse/9936343 to your computer and use it in GitHub Desktop.
resque.rake
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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