forked from tobi/delayed_job
-
Notifications
You must be signed in to change notification settings - Fork 0
/
worker.rb
55 lines (42 loc) · 1.26 KB
/
worker.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
module Delayed
class Worker
SLEEP = 5
cattr_accessor :logger
self.logger = if defined?(Merb::Logger)
Merb.logger
elsif defined?(RAILS_DEFAULT_LOGGER)
RAILS_DEFAULT_LOGGER
end
def initialize(options={})
@quiet = options[:quiet]
Delayed::Job.worker_name = options[:worker_name] if options.has_key?(:worker_name)
Delayed::Job.min_priority = options[:min_priority] if options.has_key?(:min_priority)
Delayed::Job.max_priority = options[:max_priority] if options.has_key?(:max_priority)
end
def start
say "*** Starting job worker #{Delayed::Job.worker_name}"
trap('TERM') { say 'Exiting...'; $exit = true }
trap('INT') { say 'Exiting...'; $exit = true }
loop do
result = nil
realtime = Benchmark.realtime do
result = Delayed::Job.work_off
end
count = result.sum
break if $exit
if count.zero?
sleep(SLEEP)
else
say "#{count} jobs processed at %.4f j/s, %d failed ..." % [count / realtime, result.last]
end
break if $exit
end
ensure
Delayed::Job.clear_locks!
end
def say(text)
puts text unless @quiet
logger.info text if logger
end
end
end