1
0
Fork 0
mirror of https://github.com/endofunky/sidetiq.git synced 2022-11-09 13:53:30 -05:00
endofunky--sidetiq/lib/sidetiq/api.rb
Tobias Svensson e0ebcaacd9 Move to actor-based concurrency.
Using plain threads in Sidekiq's Celluloid-based actor
model is a little bit like riding a motorcycle without
a helmet, so let's try to fit in a bit better.
2013-09-16 12:01:37 +01:00

109 lines
3 KiB
Ruby

module Sidetiq
# Public: Sidetiq API methods.
module API
# Public: Returns an Array of workers including Sidetiq::Schedulable.
def workers
schedules.keys
end
# Public: Returns a Hash of Sidetiq::Schedule instances.
def schedules
clock.schedules.dup
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
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.scheduled(MyWorker)
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.scheduled("MyWorker")
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.scheduled do |job|
# # do stuff ...
# end
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.scheduled(MyWorker) do |job|
# # do stuff ...
# end
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.scheduled("MyWorker") do |job|
# # do stuff ...
# end
# # => [#<Sidekiq::SortedEntry>, ...]
#
# 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
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.retries(MyWorker)
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.retries("MyWorker")
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.retries do |job|
# # do stuff ...
# end
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.retries(MyWorker) do |job|
# # do stuff ...
# end
# # => [#<Sidekiq::SortedEntry>, ...]
#
# Sidetiq.retries("MyWorker") do |job|
# # do stuff ...
# end
# # => [#<Sidekiq::SortedEntry>, ...]
#
# 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