Class: Salemove::ProcessHandler::CronProcess
- Inherits:
-
Object
- Object
- Salemove::ProcessHandler::CronProcess
- Defined in:
- lib/salemove/process_handler/cron_process.rb
Instance Attribute Summary collapse
-
#process_monitor ⇒ Object
readonly
Returns the value of attribute process_monitor.
Instance Method Summary collapse
-
#initialize(notifier: nil, notifier_factory: NotifierFactory, scheduler_options: {}) ⇒ CronProcess
constructor
A new instance of CronProcess.
- #schedule(expression, params = {}, overlap = false) ⇒ Object
- #spawn(service, blocking: true) ⇒ Object
- #spawn_schedule(service, expression:, params:, overlap:) ⇒ Object
- #stop ⇒ Object
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, @process_monitor = CronProcessMonitor.new(self) end |
Instance Attribute Details
#process_monitor ⇒ Object (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
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 |
#stop ⇒ Object
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 |