module Sidetiq # Public: Sidetiq API methods. module API # Public: Returns an Array of workers including # Sidetiq::Schedulable. Excludes classes which don't define # a #perform method. def workers Sidetiq::Schedulable.subclasses(true).select do |klass| klass.method_defined?(:perform) end end # Public: Returns a Hash of Sidetiq::Schedule instances. def schedules workers.map(&:schedule) end # Public: Currently scheduled recurring jobs. # # worker - A Sidekiq::Worker class or String of the class name (optional) # block - An optional block that can be given to which each # Sidekiq::SortedEntry instance corresponding to a scheduled job will # be yielded. # # Examples # # Sidetiq.scheduled # # => [#, ...] # # Sidetiq.scheduled(MyWorker) # # => [#, ...] # # Sidetiq.scheduled("MyWorker") # # => [#, ...] # # Sidetiq.scheduled do |job| # # do stuff ... # end # # => [#, ...] # # Sidetiq.scheduled(MyWorker) do |job| # # do stuff ... # end # # => [#, ...] # # Sidetiq.scheduled("MyWorker") do |job| # # do stuff ... # end # # => [#, ...] # # Yields each Sidekiq::SortedEntry instance. # Returns an Array of Sidekiq::SortedEntry objects. def scheduled(worker = nil, &block) filter_set(Sidekiq::ScheduledSet.new, worker, &block) end # Public: Recurring jobs currently scheduled for retries. # # worker - A Sidekiq::Worker class or String of the class name (optional) # block - An optional block that can be given to which each # Sidekiq::SortedEntry instance corresponding to a scheduled job will # be yielded. # # Examples # # Sidetiq.retries # # => [#, ...] # # Sidetiq.retries(MyWorker) # # => [#, ...] # # Sidetiq.retries("MyWorker") # # => [#, ...] # # Sidetiq.retries do |job| # # do stuff ... # end # # => [#, ...] # # Sidetiq.retries(MyWorker) do |job| # # do stuff ... # end # # => [#, ...] # # Sidetiq.retries("MyWorker") do |job| # # do stuff ... # end # # => [#, ...] # # Yields each Sidekiq::SortedEntry instance. # Returns an Array of Sidekiq::SortedEntry objects. def retries(worker = nil, &block) filter_set(Sidekiq::RetrySet.new, worker, &block) end private def filter_set(set, worker, &block) worker = worker.constantize if worker.kind_of?(String) jobs = set.select do |job| klass = job.klass.constantize ret = klass.include?(Schedulable) ret = ret && klass == worker if worker ret end jobs.each(&block) if block_given? jobs end end end