queue_map 0.1 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/queue_map_consumer +58 -18
- data/lib/queue_map/consumer.rb +8 -1
- data/lib/queue_map/version.rb +1 -1
- metadata +4 -4
data/bin/queue_map_consumer
CHANGED
@@ -1,39 +1,79 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'optparse'
|
4
|
-
options = {}
|
4
|
+
@options = {}
|
5
5
|
opt_p = OptionParser.new do |opts|
|
6
|
-
opts.banner = "Usage:
|
6
|
+
opts.banner = "Usage: queue_map_consumer [options] [ start | stop | restart ] path/to/consumer.rb"
|
7
7
|
opts.separator "Options:"
|
8
8
|
opts.on('-f', '--foreground', "Run appraiser in the foreground") do
|
9
|
-
options[:foreground] = true
|
9
|
+
@options[:foreground] = true
|
10
10
|
end
|
11
11
|
opts.on_tail("-h", "--help", "Show this message")
|
12
12
|
end
|
13
13
|
opt_p.parse!
|
14
|
-
consumer_path = ARGV
|
14
|
+
action, consumer_path = ARGV
|
15
15
|
if consumer_path.nil?
|
16
16
|
puts opt_p
|
17
17
|
exit 1
|
18
18
|
end
|
19
19
|
|
20
20
|
require "rubygems"
|
21
|
+
require "background_process"
|
21
22
|
require File.dirname(__FILE__) + "/../lib/queue_map"
|
22
23
|
require File.dirname(__FILE__) + "/../lib/queue_map/consumer"
|
23
24
|
|
24
|
-
consumer = QueueMap::Consumer.from_file(consumer_path, :strategy => :fork)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
pid =
|
30
|
-
|
31
|
-
Process.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
25
|
+
@consumer = QueueMap::Consumer.from_file(consumer_path, :strategy => :fork)
|
26
|
+
@pid_file = @consumer.pid_file
|
27
|
+
|
28
|
+
def pid
|
29
|
+
return nil unless File.exist?(@pid_file)
|
30
|
+
pid = File.read(@pid_file).to_i
|
31
|
+
begin
|
32
|
+
Process.getpgid(pid)
|
33
|
+
pid
|
34
|
+
rescue Errno::ESRCH
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def stop
|
40
|
+
(puts "Not running"; exit 1) unless pid
|
41
|
+
Process.kill("INT", pid)
|
42
|
+
puts "Sending INT to #{pid}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def start
|
46
|
+
(puts "Already running as #{pid}"; exit 1) if pid
|
47
|
+
puts "Starting consumers..."
|
48
|
+
unless @options[:foreground]
|
49
|
+
# daemonize
|
50
|
+
puts "Daemonizing"
|
51
|
+
pid = Kernel.fork
|
52
|
+
if pid
|
53
|
+
Process.detach(pid)
|
54
|
+
puts "Daemonized as #{pid}"
|
55
|
+
File.open(@consumer.pid_file, "w") { |f| f << pid.to_s }
|
56
|
+
exit 0
|
57
|
+
else
|
58
|
+
Signal.trap('HUP', 'IGNORE') # Don't die upon logout
|
59
|
+
end
|
36
60
|
end
|
61
|
+
@consumer.start
|
62
|
+
end
|
63
|
+
|
64
|
+
def restart
|
65
|
+
old_pid = pid
|
66
|
+
@consumer.before_fork_procs << (lambda do
|
67
|
+
Process.kill("INT", old_pid) rescue Errno::ESRCH
|
68
|
+
end)
|
69
|
+
FileUtils.rm_f(@pid_file)
|
70
|
+
start
|
71
|
+
end
|
72
|
+
|
73
|
+
case action
|
74
|
+
when "start" then start
|
75
|
+
when "stop" then stop
|
76
|
+
when "restart" then restart
|
77
|
+
else
|
78
|
+
puts "Unknown action: #{action}"
|
37
79
|
end
|
38
|
-
puts "Starting consumers..."
|
39
|
-
consumer.start
|
data/lib/queue_map/consumer.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class QueueMap::Consumer
|
2
2
|
attr_accessor :count_workers, :worker_proc, :on_exception_proc
|
3
|
-
attr_reader :name
|
3
|
+
attr_reader :name, :master_pid
|
4
|
+
attr_writer :pid_file
|
4
5
|
class Configurator
|
5
6
|
def initialize(base)
|
6
7
|
@base = base
|
@@ -12,6 +13,7 @@ class QueueMap::Consumer
|
|
12
13
|
def worker(&block); @base.worker_proc = block; end
|
13
14
|
def on_exception(&block); @base.on_exception_proc = block; end
|
14
15
|
def count_workers(value); @base.count_workers = value; end
|
16
|
+
def pid_file(value); @base.pid_file = value; end
|
15
17
|
end
|
16
18
|
|
17
19
|
|
@@ -53,6 +55,10 @@ class QueueMap::Consumer
|
|
53
55
|
def between_responses_procs
|
54
56
|
@between_responses_procs ||= []
|
55
57
|
end
|
58
|
+
|
59
|
+
def pid_file
|
60
|
+
"#{name}_consumer.pid"
|
61
|
+
end
|
56
62
|
|
57
63
|
def start
|
58
64
|
raise RuntimeError, "Called start on Consumer without strategy"
|
@@ -134,6 +140,7 @@ class QueueMap::Consumer
|
|
134
140
|
end
|
135
141
|
|
136
142
|
def stop(graceful = true)
|
143
|
+
$0 = $0 + " [shutting down]"
|
137
144
|
@child_pids.each do |pid|
|
138
145
|
begin
|
139
146
|
Process.kill(graceful ? "INT" : "TERM", pid)
|
data/lib/queue_map/version.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: queue_map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 2
|
9
|
+
version: "0.2"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Tim Harper
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-12 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|