Class: Seijaku::Scheduler

Inherits:
Object
  • Object
show all
Defined in:
lib/seijaku/scheduler.rb

Instance Method Summary collapse

Constructor Details

#initialize(scheduler, logger) ⇒ Scheduler



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/seijaku/scheduler.rb', line 5

def initialize(scheduler, logger)
  @name = scheduler.fetch("name", nil)
  @logger = logger
  @scheduler_executors = scheduler.fetch("payloads", []).map do |payload_spec|
    payload = File.read(payload_spec["payload"]).then do |data|
      YAML.safe_load(data).then do |data|
        Payload.new(data, logger)
      end
    end

    SchedulerExecutor.new(payload, payload_spec, logger)
  end
end

Instance Method Details

#monitor! ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/seijaku/scheduler.rb', line 19

def monitor!
  thd = []
  @scheduler_executors.each do |scheduler_executor|
    @logger.info "scheduling... #{scheduler_executor.name}"
    thd << Thread.new do
      scheduler_executor.execute!
    end
  end

  thd.each &:join
end

#soft_exit! ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/seijaku/scheduler.rb', line 31

def soft_exit!
  @logger.info "Soft exit asked by user, waiting for payloads to stop naturally..."
  thd = []
  @scheduler_executors.each do |scheduler_executor|
    thd << Thread.new do
      scheduler_executor.status = :exiting
      while scheduler_executor.status != :exited
        @logger.info "#{scheduler_executor.name}: still waiting..."
        sleep 1
      end

      @logger.info "#{scheduler_executor.name}: stopped gracefully"
    end
  end
  thd.each &:join
end