Sha256: ba5192f0676c38983ea3ec74eed961eab92811e1cacbfab5d31045978edf02e5

Contents?: true

Size: 1 KB

Versions: 8

Compression:

Stored size: 1 KB

Contents

module Puppet::Scheduler
  class Scheduler
    def initialize(jobs, timer=Puppet::Scheduler::Timer.new)
      @timer = timer
      @jobs = jobs
    end

    def run_loop
      mark_start_times(@timer.now)
      while not enabled_jobs.empty?
        @timer.wait_for(min_interval_to_next_run_from(@timer.now))
        run_ready(@timer.now)
      end
    end

    private

    def enabled_jobs
      @jobs.select(&:enabled?)
    end

    def mark_start_times(start_time)
      @jobs.each do |job|
        job.start_time = start_time
      end
    end

    def min_interval_to_next_run_from(from_time)
      enabled_jobs.map do |j|
        j.interval_to_next_from(from_time)
      end.min
    end

    def run_ready(at_time)
      enabled_jobs.each do |j|
        # This check intentionally happens right before each run,
        # instead of filtering on ready schedulers, since one may adjust
        # the readiness of a later one
        if j.ready?(at_time)
          j.run(at_time)
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
puppet-3.2.4 lib/puppet/scheduler/scheduler.rb
puppet-3.2.3 lib/puppet/scheduler/scheduler.rb
puppet-3.2.3.rc1 lib/puppet/scheduler/scheduler.rb
puppet-3.2.2 lib/puppet/scheduler/scheduler.rb
puppet-3.2.1 lib/puppet/scheduler/scheduler.rb
puppet-3.2.1.rc1 lib/puppet/scheduler/scheduler.rb
puppet-3.2.0.rc2 lib/puppet/scheduler/scheduler.rb
puppet-3.2.0.rc1 lib/puppet/scheduler/scheduler.rb