Sha256: c6b5b1d68be91842f2edda3716654c602986c44b7731f5bb565ec14732230b20
Contents?: true
Size: 1.95 KB
Versions: 1
Compression:
Stored size: 1.95 KB
Contents
require 'rufus-scheduler' require_relative 'cron_process_monitor' require_relative 'notifier_factory' module Salemove module ProcessHandler class CronScheduler < Rufus::Scheduler def initialize(exception_notifier, options) super options @exception_notifier = exception_notifier end def on_error(job, error) @exception_notifier.notify_or_ignore(error, {}) if @exception_notifier super end end class CronProcess attr_reader :process_monitor 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 # @param [String] expression # 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 def schedule(expression, params={}, overlap=false) @schedules << { expression: expression, params: params, overlap: overlap } end def spawn(service, blocking: true) @process_monitor.start @schedules.each do |schedule| spawn_schedule(service, schedule) end @scheduler.join if blocking end 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 def stop #Separate thread to avoid Ruby 2.0+ trap context 'synchronize' exception Thread.new do @scheduler.shutdown(:wait) @process_monitor.shutdown end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
process_handler-4.0.0 | lib/salemove/process_handler/cron_process.rb |