class Sidekiq::Dejavu::Middleware::Server::Scheduler
Attributes
options[R]
schedules[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/sidekiq/dejavu/middleware/server/scheduler.rb, line 10 def initialize(options = {}) # Sidekiq.logger.info "Intialized #{self.class} with options #{options.inspect}" @schedules = Sidekiq::ScheduledSet.new @options = options end
Public Instance Methods
call(worker, item, queue) { || ... }
click to toggle source
# File lib/sidekiq/dejavu/middleware/server/scheduler.rb, line 16 def call(worker, item, queue) start = Time.now interval = item['interval'] schedule = item['schedule'] yield ensure if interval && not_already_scheduled?(schedule) time = relative_to_start? ? start : Time.now schedule_next_run(worker, item, interval, time) end end
Private Instance Methods
not_already_scheduled?(schedule)
click to toggle source
# File lib/sidekiq/dejavu/middleware/server/scheduler.rb, line 32 def not_already_scheduled?(schedule) !!schedule && schedules.select{ |job| job.item['schedule'] == schedule }.empty? end
relative_to_start?()
click to toggle source
# File lib/sidekiq/dejavu/middleware/server/scheduler.rb, line 43 def relative_to_start? !!options[:relative] end
schedule_next_run(worker, item, interval, from_time)
click to toggle source
# File lib/sidekiq/dejavu/middleware/server/scheduler.rb, line 36 def schedule_next_run(worker, item, interval, from_time) timestamp = next_timestamp(interval, from_time) Sidekiq.logger.info "Scheduling #{worker.class} for #{Time.at timestamp}" item['at'] = timestamp worker.class.client_push(item) end