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