Class: Salemove::ProcessHandler::CronProcess

Inherits:
Object
  • Object
show all
Defined in:
lib/salemove/process_handler/cron_process.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(notifier: nil, notifier_factory: NotifierFactory, scheduler_options: {}) ⇒ CronProcess

Returns a new instance of CronProcess.



26
27
28
29
30
31
32
33
# File 'lib/salemove/process_handler/cron_process.rb', line 26

def initialize(notifier: nil,
               notifier_factory: NotifierFactory,
               scheduler_options: {})
  @schedules = []
  @exception_notifier = notifier_factory.get_notifier('Cron Process', notifier)
  @scheduler = CronScheduler.new @exception_notifier, scheduler_options
  @process_monitor = CronProcessMonitor.new(self)
end

Instance Attribute Details

#process_monitorObject (readonly)

Returns the value of attribute process_monitor.



24
25
26
# File 'lib/salemove/process_handler/cron_process.rb', line 24

def process_monitor
  @process_monitor
end

Instance Method Details

#schedule(expression, params = {}, overlap = false) ⇒ Object

Parameters:

  • expression (String)

    can either be a any cron expression like every five minutes: ‘5 * * * *’ or interval like ‘1’ for seconds, ‘2h’ for hours and ‘2d’ for days



38
39
40
# File 'lib/salemove/process_handler/cron_process.rb', line 38

def schedule(expression, params={}, overlap=false)
  @schedules << { expression: expression, params: params, overlap: overlap }
end

#spawn(service, blocking: true) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/salemove/process_handler/cron_process.rb', line 42

def spawn(service, blocking: true)
  @process_monitor.start
  @schedules.each do |schedule|
    spawn_schedule(service, schedule)
  end
  @scheduler.join if blocking
end

#spawn_schedule(service, expression:, params:, overlap:) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/salemove/process_handler/cron_process.rb', line 50

def spawn_schedule(service, expression:, params:, overlap:)
  if params.empty?
    @scheduler.repeat(expression, {overlap: overlap}) { service.call }
  else
    @scheduler.repeat(expression, {overlap: overlap}) { service.call(params) }
  end
end

#stopObject



58
59
60
61
62
63
64
# File 'lib/salemove/process_handler/cron_process.rb', line 58

def stop
  #Separate thread to avoid Ruby 2.0+ trap context 'synchronize' exception
  Thread.new do
    @scheduler.shutdown(:wait)
    @process_monitor.shutdown
  end
end