class Clockwork::Manager
Attributes
config[R]
Public Class Methods
new()
click to toggle source
# File lib/clockwork/manager.rb, line 7 def initialize @events = [] @callbacks = {} @config = default_configuration @handler = nil end
Public Instance Methods
configure() { |config| ... }
click to toggle source
# File lib/clockwork/manager.rb, line 18 def configure yield(config) end
default_configuration()
click to toggle source
# File lib/clockwork/manager.rb, line 22 def default_configuration { :sleep_timeout => 1, :logger => Logger.new(STDOUT), :thread => false, :max_threads => 10 } end
error_handler(&block)
click to toggle source
# File lib/clockwork/manager.rb, line 32 def error_handler(&block) @error_handler = block if block_given? @error_handler end
every(period, job, options={}, &block)
click to toggle source
# File lib/clockwork/manager.rb, line 42 def every(period, job, options={}, &block) if options[:at].respond_to?(:each) every_with_multiple_times(period, job, options, &block) else register(period, job, block, options) end end
fire_callbacks(event, *args)
click to toggle source
# File lib/clockwork/manager.rb, line 50 def fire_callbacks(event, *args) @callbacks[event].nil? || @callbacks[event].all? { |h| h.call(*args) } end
handle_error(e)
click to toggle source
# File lib/clockwork/manager.rb, line 80 def handle_error(e) error_handler.call(e) if error_handler end
handler(&block)
click to toggle source
# File lib/clockwork/manager.rb, line 26 def handler(&block) @handler = block if block_given? raise NoHandlerDefined unless @handler @handler end
log(msg)
click to toggle source
# File lib/clockwork/manager.rb, line 84 def log(msg) config[:logger].info(msg) end
log_error(e)
click to toggle source
# File lib/clockwork/manager.rb, line 76 def log_error(e) config[:logger].error(e) end
on(event, options={}, &block)
click to toggle source
# File lib/clockwork/manager.rb, line 37 def on(event, options={}, &block) raise "Unsupported callback #{event}" unless [:before_tick, :after_tick, :before_run, :after_run].include?(event.to_sym) (@callbacks[event.to_sym]||=[]) << block end
run()
click to toggle source
# File lib/clockwork/manager.rb, line 54 def run log "Starting clock for #{@events.size} events: [ #{@events.map(&:to_s).join(' ')} ]" loop do tick sleep(config[:sleep_timeout]) end end
thread_available?()
click to toggle source
# File lib/clockwork/manager.rb, line 14 def thread_available? Thread.list.select { |t| t['creator'] == self }.count < config[:max_threads] end
tick(t=Time.now)
click to toggle source
# File lib/clockwork/manager.rb, line 62 def tick(t=Time.now) if (fire_callbacks(:before_tick)) events = events_to_run(t) events.each do |event| if (fire_callbacks(:before_run, event, t)) event.run(t) fire_callbacks(:after_run, event, t) end end end fire_callbacks(:after_tick) events end
Private Instance Methods
events_to_run(t)
click to toggle source
# File lib/clockwork/manager.rb, line 89 def events_to_run(t) @events.select{ |event| event.run_now?(t) } end
every_with_multiple_times(period, job, options={}, &block)
click to toggle source
# File lib/clockwork/manager.rb, line 99 def every_with_multiple_times(period, job, options={}, &block) each_options = options.clone options[:at].each do |at| each_options[:at] = at register(period, job, block, each_options) end end
register(period, job, block, options)
click to toggle source
# File lib/clockwork/manager.rb, line 93 def register(period, job, block, options) event = Event.new(self, period, job, block || handler, options) @events << event event end