module SidekiqRemoveScheduled::Hooks::JobHook::ClassMethods
Public Class Methods
extended(base)
click to toggle source
# File lib/sidekiq_remove_scheduled/hooks/job_hook.rb, line 14 def self.extended(base) perform_in_hook base remove_scheduled_jobs base end
perform_in_hook(base)
click to toggle source
This method is responsible for extending perform_in and perform_at method It stores all job ids in redis for easy dequeueing
# File lib/sidekiq_remove_scheduled/hooks/job_hook.rb, line 22 def self.perform_in_hook(base) default_perform_in = base::ClassMethods.instance_method(:perform_in) base::ClassMethods.send :define_method, :perform_in do |interval, *args| jid = default_perform_in.bind(self).call(interval, *args) field = "#{self.to_s}-#{args.to_s}" ::SidekiqRemoveScheduled::Logger.log("Storing job id: #{jid} for field: #{field}") jobs = ::SidekiqRemoveScheduled::Redis.job_queue.get(field).to_s.split(',') jobs << jid ::SidekiqRemoveScheduled::Redis.job_queue.set(field, jobs.uniq.join(',')) jid end base::ClassMethods.send :alias_method, :perform_at, :perform_in end
remove_scheduled_jobs(base)
click to toggle source
This method is responsible for declaring remove_scheduled method It search redis for worker name and arguments, fetch all job ids and remove those jobs from sidekiq queue
# File lib/sidekiq_remove_scheduled/hooks/job_hook.rb, line 41 def self.remove_scheduled_jobs(base) base::ClassMethods.send :define_method, :remove_scheduled do |*args| field = "#{self.to_s}-#{args.to_s}" ::SidekiqRemoveScheduled::Logger.log("Removing scheduled jobs for field: #{field}") jobs = ::SidekiqRemoveScheduled::Redis.job_queue.get(field).to_s.split(',') jobs.each do |job_id| pattern = '*,\"jid\":\"'+job_id+'\",*' itterator = 0 begin job = ::SidekiqRemoveScheduled::Redis.client.zscan('schedule', itterator, match: pattern) itterator = job.first.to_i end until job.last.count != 0 || itterator == 0 ::SidekiqRemoveScheduled::Redis.client.zrem('schedule', job.last.first) if job.last.count != 0 end ::SidekiqRemoveScheduled::Redis.job_queue.del(field) end end