class Bosh::Director::Scheduler
Public Class Methods
new(scheduled_jobs=[], options={})
click to toggle source
# File lib/bosh/director/scheduler.rb, line 5 def initialize(scheduled_jobs=[], options={}) if scheduled_jobs.nil? || scheduled_jobs.is_a?(Array) @scheduled_jobs = scheduled_jobs @scheduler = options.fetch(:scheduler) { Rufus::Scheduler::PlainScheduler.new } @queue = options.fetch(:queue) { JobQueue.new } else raise 'scheduled_jobs must be an array' end end
Public Instance Methods
logger()
click to toggle source
# File lib/bosh/director/scheduler.rb, line 27 def logger @logger ||= Config.logger end
start!()
click to toggle source
# File lib/bosh/director/scheduler.rb, line 15 def start! logger.info('starting scheduler') add_jobs unless @added_already @scheduler.start @scheduler.join end
stop!()
click to toggle source
# File lib/bosh/director/scheduler.rb, line 22 def stop! logger.info('stopping scheduler') @scheduler.stop end
Private Instance Methods
add_jobs()
click to toggle source
# File lib/bosh/director/scheduler.rb, line 33 def add_jobs return if @scheduled_jobs.nil? @added_already = true @scheduled_jobs.each do |scheduled_job| begin director_job_class = Bosh::Director::Jobs.const_get(scheduled_job['command'].to_s) rescue NameError raise "unknown job 'Bosh::Director::Jobs::#{scheduled_job['command']}'" end @scheduler.cron(scheduled_job['schedule']) do |_| should_enqueue = true if director_job_class.respond_to?(:has_work) logger.debug("Scheduler cron - checking / #{director_job_class}.has_work:#{director_job_class.has_work(scheduled_job['params'])} / with params #{scheduled_job['params']}") should_enqueue = director_job_class.has_work(scheduled_job['params']) end if should_enqueue logger.info("enqueueing '#{scheduled_job['command']}'") schedule_message = "scheduled #{scheduled_job['command']}" if director_job_class.respond_to?(:schedule_message) schedule_message = director_job_class.schedule_message end @queue.enqueue('scheduler', director_job_class, schedule_message, scheduled_job['params']) end end logger.info("added scheduled job '#{director_job_class}' with interval '#{scheduled_job['schedule']}'") end end