class Sidekiq::Dejavu::Manager
Attributes
scheduled_set[RW]
schedules[RW]
Public Class Methods
new(schedules = {}, scheduled_set = Sidekiq::ScheduledSet.new)
click to toggle source
# File lib/sidekiq/dejavu/manager.rb, line 8 def initialize(schedules = {}, scheduled_set = Sidekiq::ScheduledSet.new) @schedules = schedules @scheduled_set = scheduled_set end
Public Instance Methods
reload_schedule!()
click to toggle source
# File lib/sidekiq/dejavu/manager.rb, line 13 def reload_schedule! clear_changed_schedules add_new_schedules end
scheduled_jobs()
click to toggle source
# File lib/sidekiq/dejavu/manager.rb, line 18 def scheduled_jobs scheduled_set.select { |job| job.item.has_key? 'schedule' } end
Private Instance Methods
add_new_schedules()
click to toggle source
# File lib/sidekiq/dejavu/manager.rb, line 46 def add_new_schedules existing = scheduled_jobs.map { |job| job.item['schedule'] } schedules.each do |name, options| next if existing.include? name args = Array(options['args']) interval = options['interval'] first_run = valid_cron?(interval) ? next_timestamp(interval) : next_randomized_timestamp(interval) job = options.merge('args' => args, 'schedule' => name, 'at' => first_run) Sidekiq.logger.info "Scheduling #{name} for first run at #{Time.at first_run}." Sidekiq::Client.push(job) end end
clear_changed_schedules()
click to toggle source
# File lib/sidekiq/dejavu/manager.rb, line 24 def clear_changed_schedules scheduled_jobs.each do |job| item = job.item name = item['schedule'] unless schedules.has_key? name Sidekiq.logger.info "Clearing schedule #{name} (not listed in config)." job.delete next end schedule_options = schedules[name] schedule_options['args'] = Array(schedule_options['args']) item_options = item.select { |k,v| schedule_options.keys.include? k } if item_options != schedule_options Sidekiq.logger.info "Clearing schedule #{name} (config changed)." job.delete end end end