Class: Clockwork::Manager
- Inherits:
-
Object
- Object
- Clockwork::Manager
show all
- Defined in:
- lib/clockwork/manager.rb
Defined Under Namespace
Classes: NoHandlerDefined
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of Manager.
7
8
9
10
11
12
|
# File 'lib/clockwork/manager.rb', line 7
def initialize
@events = []
@callbacks = {}
@config = default_configuration
@handler = nil
end
|
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
5
6
7
|
# File 'lib/clockwork/manager.rb', line 5
def config
@config
end
|
Instance Method Details
18
19
20
|
# File 'lib/clockwork/manager.rb', line 18
def configure
yield(config)
end
|
#default_configuration ⇒ Object
22
23
24
|
# 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) ⇒ Object
32
33
34
35
|
# 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) ⇒ Object
42
43
44
45
46
47
48
|
# 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) ⇒ Object
50
51
52
|
# 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) ⇒ Object
80
81
82
|
# File 'lib/clockwork/manager.rb', line 80
def handle_error(e)
error_handler.call(e) if error_handler
end
|
#handler(&block) ⇒ Object
26
27
28
29
30
|
# File 'lib/clockwork/manager.rb', line 26
def handler(&block)
@handler = block if block_given?
raise NoHandlerDefined unless @handler
@handler
end
|
#log(msg) ⇒ Object
84
85
86
|
# File 'lib/clockwork/manager.rb', line 84
def log(msg)
config[:logger].info(msg)
end
|
#log_error(e) ⇒ Object
76
77
78
|
# File 'lib/clockwork/manager.rb', line 76
def log_error(e)
config[:logger].error(e)
end
|
#on(event, options = {}, &block) ⇒ Object
37
38
39
40
|
# 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 ⇒ Object
54
55
56
57
58
59
60
|
# 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? ⇒ Boolean
14
15
16
|
# 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) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# 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
|