File: scheduler.rb

package info (click to toggle)
puppet-agent 7.23.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 19,092 kB
  • sloc: ruby: 245,074; sh: 456; makefile: 38; xml: 33
file content (44 lines) | stat: -rw-r--r-- 1,043 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module Puppet::Scheduler
  class Scheduler
    def initialize(timer=Puppet::Scheduler::Timer.new)
      @timer = timer
    end

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

    private

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

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

    def min_interval_to_next_run_from(jobs, from_time)
      enabled(jobs).map do |j|
        j.interval_to_next_from(from_time)
      end.min
    end

    def run_ready(jobs, 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