resque-pool-dynamic 0.1.0

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.
@@ -0,0 +1,106 @@
1
+ require 'pathname'
2
+ require 'json'
3
+
4
+ require 'ripl'
5
+
6
+ require 'resque/pool/dynamic'
7
+
8
+ module Resque
9
+ class Pool
10
+ # Add-on to resque-pool to allow manually controlled, dynamic sessions
11
+ class Dynamic
12
+ # Run a dynamic resque pool session.
13
+ # @param [Hash] options Options passed to the Shell instance
14
+ # @option opts [String] :no_start Don't start resque-pool automatically
15
+ def self.shell(options={})
16
+ myself = self.new
17
+ myself.start unless options[:no_start]
18
+ myself.status
19
+ Shell.run(myself, options)
20
+ puts "\nBye!"
21
+ ensure
22
+ myself.stop if myself
23
+ end
24
+
25
+ # Ripl shell subclassed for nicer CLI experience
26
+ class Shell < Ripl::Shell
27
+ # When printing error, cut backtrace at (ripl)
28
+ def print_eval_error(e)
29
+ i = e.backtrace.index { |ln| ln =~ /\(ripl\):\d+:in `run'/ }
30
+ if not i
31
+ bt = e.backtrace
32
+ elsif i > 0
33
+ bt = e.backtrace[0..i-1]
34
+ else
35
+ bt = []
36
+ end
37
+ bt = bt.map { |ln| " " << ln }.join("\n")
38
+ puts "ERROR: #{e.to_s}\n#{bt}"
39
+ end
40
+
41
+ # Don't print nil return values
42
+ def print_result(result)
43
+ super if @error_raised or !result.nil?
44
+ end
45
+
46
+ # Show help
47
+ # @param [String] subject Topic to display
48
+ def help(subject=nil)
49
+ @help ||= File.open(
50
+ Pathname.new(__FILE__).dirname.join('help.json')
51
+ ) { |f| JSON::load(f.read) }
52
+ if subject
53
+ if @help.has_key?(subject)
54
+ puts @help[subject]['full']
55
+ return
56
+ end
57
+ puts "I don't know anything about #{subject}."
58
+ end
59
+ puts "Known commands:"
60
+ @help.keys.sort.each do |cmd|
61
+ puts " #{cmd} - #{@help[cmd]['summary']}"
62
+ end
63
+ puts "For details, type: help command"
64
+ end
65
+
66
+ # Handle help as special command
67
+ # @param [String] input Input string
68
+ def eval_input(input)
69
+ splut = input.split(/\s+/,2)
70
+ if splut.first == 'help'
71
+ help(splut[1])
72
+ else
73
+ super
74
+ end
75
+ end
76
+
77
+ # Run the Ripl shell in context of specified instance
78
+ # @param [Object] instance Instance to get bindings from
79
+ # @param [Hash] opts Options passed to Ripl::Shell
80
+ def self.run(instance, opts={})
81
+ options = {
82
+ :readline => true,
83
+ :riplrc => ENV['RIPL_RC'] || '~/.riplrc',
84
+ :completion => {},
85
+ :binding => instance.instance_eval { binding }
86
+ }
87
+ options.update(opts)
88
+ Ripl::Runner::load_rc(options[:riplrc]) if options[:riplrc]!=''
89
+ create(options).loop
90
+ end
91
+ end
92
+
93
+ ### Utility functions
94
+
95
+ # Loop, providing index to the block
96
+ # @yield [i] Ever increasing index
97
+ def loop_with_index
98
+ index = 0
99
+ loop do
100
+ yield(index)
101
+ index += 1
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,29 @@
1
+
2
+ desc <<EOF
3
+ Starts a dynamic pool of Resque worker processes.
4
+
5
+ Variables:
6
+ WORKERS=worker spec - specify initial numbers of workers
7
+ (look below for format description)
8
+ NO_START=1 - don't start resque-pool master automatically
9
+ (default is to start)
10
+
11
+ Workers spec format:
12
+ queue_name=process_number[:queue_name=process_number[:...]]
13
+
14
+ queue_name can be whatever resque:work will accept as QUEUE=
15
+ parameter.
16
+
17
+ Example:
18
+ $ rake resque:pool:dynamic WORKERS=foo=1:bar=1:baz,quux,xyzzy=5:*=2
19
+ will start:
20
+ - one worker for queue 'foo'
21
+ - one worker for queue 'bar'
22
+ - five workers for queues baz,quux,xyzzy
23
+ - two workers for all queues
24
+ EOF
25
+ task "resque:pool:dynamic" do
26
+ require 'resque/pool/dynamic/shell'
27
+
28
+ Resque::Pool::Dynamic.shell(:no_start => ENV['NO_START'])
29
+ end
@@ -0,0 +1,7 @@
1
+ module Resque
2
+ class Pool
3
+ class Dynamic
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,217 @@
1
+ require 'tempfile'
2
+ require 'yaml'
3
+
4
+ require "resque/pool/dynamic/version"
5
+ require "resque/pool/dynamic/logfile"
6
+
7
+ module Resque
8
+ class Pool
9
+ class Dynamic
10
+ # PID of the resque-pool process, or nil if it's not running
11
+ # @return [Integer, NilClass]
12
+ # @api cli
13
+ attr_reader :pid
14
+
15
+ def initialize
16
+ # Make myself a project group leader
17
+ Process.setpgid(0, 0)
18
+ end
19
+
20
+ # Tempfile instance for configuration file
21
+ # @return [Tempfile]
22
+ def config_tempfile
23
+ @config_tempfile ||= Tempfile.new(%w(resque-pool-dynamic .yaml))
24
+ end
25
+
26
+ # Path to the temporary config file
27
+ # @return [String]
28
+ # @api cli
29
+ def config_path
30
+ config_tempfile.path
31
+ end
32
+
33
+ # Parse workers configuration
34
+ # @param [String] spec Workers specification string
35
+ # Format: queue2=number:queue2=number2:queue3,queue5=number4:*=number5
36
+ # @return [Hash] Configuration dictionary
37
+ # @example
38
+ # parse_config_string('foo=1:bar=2:baz,quux=4')
39
+ # #=> {"baz,quux"=>4, "foo"=>1, "bar"=>2}
40
+ def parse_config_string(spec)
41
+ return {} unless spec
42
+ Hash[
43
+ spec.split(':').map { |w|
44
+ k, v = w.split('=') ; [ k, v.to_i ] }
45
+ ]
46
+ end
47
+
48
+ # @overload config
49
+ # Show current workers configuration
50
+ # @return [Hash]
51
+ # @overload config(opts)
52
+ # Update workers configuration.
53
+ # If configuration has change and resque-pool is running, it is reloaded.
54
+ # @param [Hash] opts Dictionary of worker process counts to update
55
+ # (pass 0 or nil as value to delete all workers for a queue from pool)
56
+ # @return [Hash] Updated config
57
+ # @note Default configuration is taken from environment variable
58
+ # "WORKERS", as interpreted by the #parse_config_string method.
59
+ # @example config
60
+ # #=> {"foo"=>1, "bar"=>2}
61
+ # config :foo => 2, :baz => 7
62
+ # #=> {"foo"=>2, "baz"=>7, "bar"=>2}
63
+ # config :bar => 0
64
+ # #=> {"foo"=>2, "baz"=>7}
65
+ # @api cli
66
+ def config(args=nil)
67
+ @config ||= parse_config_string(ENV['WORKERS'])
68
+
69
+ if args
70
+ oldconfig = config.clone
71
+
72
+ args.each do |w, n|
73
+ w = w.to_s
74
+ if n.nil? || n==0
75
+ @config.delete w
76
+ else
77
+ @config[w] = n
78
+ end
79
+ end
80
+
81
+ if pid && @config != oldconfig
82
+ write_config
83
+ reload
84
+ end
85
+ end
86
+
87
+ @config
88
+ end
89
+
90
+ # Write temporary configuration file
91
+ # @api cli
92
+ def write_config
93
+ File.open(config_path, 'w') do |cf|
94
+ cf.write(YAML::dump(config))
95
+ end
96
+ end
97
+
98
+ # Start resque-pool master
99
+ # This is executed in a forked child process.
100
+ def run_pool
101
+ @pid = $$
102
+ ENV["RESQUE_POOL_CONFIG"] = config_path
103
+
104
+ $stdin.reopen '/dev/null'
105
+ log = File.new(log_path, "a")
106
+ $stdout.reopen log
107
+ $stderr.reopen log
108
+ $stdout.sync = $stderr.sync = true
109
+
110
+ require 'rake'
111
+ Rake::Task['resque:pool'].invoke
112
+ end
113
+
114
+ # Fork a child process for resque-pool master
115
+ # @return [Integer] PID of the child process
116
+ # @api cli
117
+ def start!
118
+ raise "Already running: #{pid}" if pid
119
+ write_config
120
+ @pid = fork { self.run_pool }
121
+ Process.setpgid(pid, 0) # don't broadcast ^C to child
122
+
123
+ if 30.times { |i| sleep 1 ; break if File.exist? log_path }
124
+ # Loop will return nil if broken. If value is returned, file does not exist.
125
+ raise "Log file #{log_path} still not present after #{i} seconds, giving up"
126
+ stop!
127
+ end
128
+
129
+ pid
130
+ end
131
+
132
+ # Start resque-pool, showing startup logs
133
+ # @api cli
134
+ def start
135
+ unless pid
136
+ start!
137
+ log.rewind
138
+ log.tail_until /started manager/
139
+ else
140
+ warn "Already started as #{pid}"
141
+ end
142
+ end
143
+
144
+ # Return pid of running resque-pool or raise an exception
145
+ # @return [Integer]
146
+ # @raise [RuntimeError]
147
+ def pid!
148
+ pid or raise "Not started!"
149
+ end
150
+
151
+ # Send signal to a running resque-pool
152
+ # @param [String, Integer] sig Signal name or number
153
+ # @api cli
154
+ def kill!(sig)
155
+ Process.kill(sig, pid!)
156
+ end
157
+
158
+ # Stop running resque-pool
159
+ # @api cli
160
+ def stop!
161
+ if pid
162
+ kill! "INT"
163
+ wpid, status = Process.wait2(pid)
164
+ @pid = nil
165
+ status
166
+ end
167
+ end
168
+
169
+ # Stop running resque-pool, show shutdown logs
170
+ # @api cli
171
+ def stop
172
+ puts "Shutting down resque-pool-master #{pid}"
173
+ log.ff if has_log?
174
+ status = stop!
175
+ log.tail if has_log?
176
+ return status
177
+ end
178
+
179
+ # Reload resque-pool configuration
180
+ # @api cli
181
+ def reload
182
+ puts "Reloading resque-pool-master #{pid!} configuration"
183
+ write_config
184
+ kill!('HUP')
185
+ end
186
+
187
+ # Show child process tree by calling `pstree` system command
188
+ # @api cli
189
+ def pstree
190
+ system case RUBY_PLATFORM
191
+ when /darwin/
192
+ "pstree -w #{pid!}"
193
+ when /linux/
194
+ "pstree -l -a -p #{pid!}"
195
+ else
196
+ "pstree #{pid!}"
197
+ end
198
+ nil
199
+ end
200
+
201
+ # Show current status
202
+ # @api cli
203
+ def status
204
+ puts( '',
205
+ "Status: " << ( pid ? "running, pid: #{pid}" : "not running" ),
206
+ "Configuration:",
207
+ YAML::dump(config).grep(/^(?!---\s*$)/).map { |v| " " << v }
208
+ )
209
+ if pid
210
+ puts "Process tree:"
211
+ pstree
212
+ end
213
+ puts
214
+ end
215
+ end
216
+ end
217
+ end
@@ -0,0 +1 @@
1
+ {"pid":{"summary":"PID of the resque-pool process, or nil if it's not running.","full":"----------------------------------- Method: #pid (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.pid -> (Integer, NilClass) (readonly)\n------------------------------------------------------------------------\n PID of the resque-pool process, or nil if it's not running \nReturns:\n--------\n (Integer, NilClass) - \n"},"config_path":{"summary":"Path to the temporary config file.","full":"--------------------------- Method: #config_path (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.config_path -> String \n------------------------------------------------------------------------\n Path to the temporary config file \nReturns:\n--------\n (String) - \n"},"config":{"summary":"","full":"-------------------------------- Method: #config (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.config -> Hash \n dynamic.config(opts) -> Hash \n------------------------------------------------------------------------\n Note: Default configuration is taken from environment variable\n \"WORKERS\", as interpreted by the #parse_config_string method.\nExamples:\n---------\n # config\n #=> {\"foo\"=>1, \"bar\"=>2}\n config :foo => 2, :baz => 7\n #=> {\"foo\"=>2, \"baz\"=>7, \"bar\"=>2}\n config :bar => 0\n #=> {\"foo\"=>2, \"baz\"=>7}\nOverloads:\n----------\n------------------------------------------------------------------------\n dynamic.config -> Hash \n------------------------------------------------------------------------\n Show current workers configuration \n Returns:\n --------\n (Hash) - \n------------------------------------------------------------------------\n dynamic.config(opts) -> Hash \n------------------------------------------------------------------------\n Update workers configuration. If configuration has change and\n resque-pool is running, it is reloaded. \n Parameters:\n -----------\n (Hash) opts - Dictionary of worker process counts to update\n (pass 0 or nil as value to delete all workers for a queue from pool)\n Returns:\n --------\n (Hash) - Updated config\n"},"write_config":{"summary":"Write temporary configuration file.","full":"-------------------------- Method: #write_config (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.write_config \n------------------------------------------------------------------------\n Write temporary configuration file \n"},"start!":{"summary":"Fork a child process for resque-pool master.","full":"-------------------------------- Method: #start! (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.start! -> Integer \n------------------------------------------------------------------------\n Fork a child process for resque-pool master \nReturns:\n--------\n (Integer) - PID of the child process\n"},"start":{"summary":"Start resque-pool, showing startup logs.","full":"--------------------------------- Method: #start (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.start \n------------------------------------------------------------------------\n Start resque-pool, showing startup logs \n"},"kill!":{"summary":"Send signal to a running resque-pool.","full":"--------------------------------- Method: #kill! (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.kill!(sig) \n------------------------------------------------------------------------\n Send signal to a running resque-pool \nParameters:\n-----------\n (String, Integer) sig - Signal name or number\n"},"stop!":{"summary":"Stop running resque-pool.","full":"--------------------------------- Method: #stop! (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.stop! \n------------------------------------------------------------------------\n Stop running resque-pool \n"},"stop":{"summary":"Stop running resque-pool, show shutdown logs.","full":"---------------------------------- Method: #stop (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.stop \n------------------------------------------------------------------------\n Stop running resque-pool, show shutdown logs \n"},"reload":{"summary":"Reload resque-pool configuration.","full":"-------------------------------- Method: #reload (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.reload \n------------------------------------------------------------------------\n Reload resque-pool configuration \n"},"pstree":{"summary":"Show child process tree by calling `pstree` system command.","full":"-------------------------------- Method: #pstree (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.pstree \n------------------------------------------------------------------------\n Show child process tree by calling `pstree` system command \n"},"status":{"summary":"Show current status.","full":"-------------------------------- Method: #status (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic.rb)\n dynamic.status \n------------------------------------------------------------------------\n Show current status \n"},"log_path":{"summary":"Logfile path.","full":"------------------------------ Method: #log_path (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n dynamic.log_path -> String \n------------------------------------------------------------------------\n Logfile path \nReturns:\n--------\n (String) - Path to the log file\n"},"log":{"summary":"Open log of resque-pool process.","full":"----------------------------------- Method: #log (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n dynamic.log -> Logfile \n------------------------------------------------------------------------\n Open log of resque-pool process \nReturns:\n--------\n (Logfile) - Logfile instance\n"},"has_log?":{"summary":"True if we have an open log file.","full":"------------------------------ Method: #has_log? (Resque::Pool::Dynamic)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n dynamic.has_log? -> Boolean \n------------------------------------------------------------------------\n True if we have an open log file \nReturns:\n--------\n (Boolean) - \n"},"log.tail":{"summary":"Show last n lines of the file, or follow the file.","full":"------------------------- Method: #tail (Resque::Pool::Dynamic::Logfile)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n logfile.tail(n = nil) {|ln| ... } \n------------------------------------------------------------------------\n Show last n lines of the file, or follow the file \nParameters:\n-----------\n (Integer, NilClass) n - Number of lines or nil\nYields:\n-------\n (ln) - Called for every line of file\nYield Parameters:\n-----------------\n (String) ln - Input line\n"},"log.tail_until":{"summary":"Follow the file until a line matches regexp.","full":"------------------- Method: #tail_until (Resque::Pool::Dynamic::Logfile)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n logfile.tail_until(rx) \n------------------------------------------------------------------------\n Follow the file until a line matches regexp \n"},"log.tail_to_eof":{"summary":"Print contents of the file until current end of file.","full":"------------------ Method: #tail_to_eof (Resque::Pool::Dynamic::Logfile)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n logfile.tail_to_eof \n------------------------------------------------------------------------\n Print contents of the file until current end of file \n"},"log.ff":{"summary":"Fast forward until end of file (see IO::Tail#backward).","full":"--------------------------- Method: #ff (Resque::Pool::Dynamic::Logfile)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n logfile.ff \n------------------------------------------------------------------------\n Fast forward until end of file (see IO::Tail#backward) \n"},"log.rew":{"summary":"Rewind until beginning of file (see IO::Tail#forward).","full":"-------------------------- Method: #rew (Resque::Pool::Dynamic::Logfile)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n logfile.rew \n------------------------------------------------------------------------\n Rewind until beginning of file (see IO::Tail#forward) \n"},"log.rewind":{"summary":"Rewind until beginning of file (see IO::Tail#forward).","full":"----------------------- Method: #rewind (Resque::Pool::Dynamic::Logfile)\n (Defined in: lib/resque/pool/dynamic/logfile.rb)\n logfile.rewind \n------------------------------------------------------------------------\n Rewind until beginning of file (see IO::Tail#forward) \n"},"exit":{"summary":"Finish work","full":"Finish work (AKA quit)"}}
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "resque/pool/dynamic/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "resque-pool-dynamic"
7
+ s.version = Resque::Pool::Dynamic::VERSION
8
+ s.authors = ["Maciej Pasternacki"]
9
+ s.email = ["maciej@pasternacki.net"]
10
+ s.homepage = "https://github.com/mpasternacki/resque-pool-dynamic"
11
+ s.summary = "A dynamic manager for resque pool"
12
+ s.description = <<EOF
13
+ A class to dynamically manage number of processes and status in the
14
+ resque pool with a command-line user interface to interacively manage
15
+ and supervise the worker pool.
16
+ EOF
17
+
18
+ s.rubyforge_project = "resque-pool-dynamic"
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+
25
+ s.add_development_dependency "yard"
26
+ s.add_runtime_dependency "io-tail"
27
+ s.add_runtime_dependency "rake"
28
+ s.add_runtime_dependency "ripl"
29
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resque-pool-dynamic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Maciej Pasternacki
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-25 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: yard
16
+ requirement: &70134237409700 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70134237409700
25
+ - !ruby/object:Gem::Dependency
26
+ name: io-tail
27
+ requirement: &70134237409220 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70134237409220
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &70134237408800 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70134237408800
47
+ - !ruby/object:Gem::Dependency
48
+ name: ripl
49
+ requirement: &70134237408380 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70134237408380
58
+ description: ! 'A class to dynamically manage number of processes and status in the
59
+
60
+ resque pool with a command-line user interface to interacively manage
61
+
62
+ and supervise the worker pool.
63
+
64
+ '
65
+ email:
66
+ - maciej@pasternacki.net
67
+ executables: []
68
+ extensions: []
69
+ extra_rdoc_files: []
70
+ files:
71
+ - .gitignore
72
+ - Gemfile
73
+ - README.md
74
+ - Rakefile
75
+ - doc/Resque.html
76
+ - doc/Resque/Pool.html
77
+ - doc/Resque/Pool/Dynamic.html
78
+ - doc/Resque/Pool/Dynamic/Logfile.html
79
+ - doc/Resque/Pool/Dynamic/Shell.html
80
+ - doc/_index.html
81
+ - doc/class_list.html
82
+ - doc/css/common.css
83
+ - doc/css/full_list.css
84
+ - doc/css/style.css
85
+ - doc/file.README.html
86
+ - doc/file_list.html
87
+ - doc/frames.html
88
+ - doc/index.html
89
+ - doc/js/app.js
90
+ - doc/js/full_list.js
91
+ - doc/js/jquery.js
92
+ - doc/method_list.html
93
+ - doc/top-level-namespace.html
94
+ - help.yml
95
+ - lib/resque/pool/dynamic.rb
96
+ - lib/resque/pool/dynamic/logfile.rb
97
+ - lib/resque/pool/dynamic/shell.rb
98
+ - lib/resque/pool/dynamic/tasks.rb
99
+ - lib/resque/pool/dynamic/version.rb
100
+ - lib/resque/pool/help.json
101
+ - resque-pool-dynamic.gemspec
102
+ homepage: https://github.com/mpasternacki/resque-pool-dynamic
103
+ licenses: []
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project: resque-pool-dynamic
122
+ rubygems_version: 1.8.10
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: A dynamic manager for resque pool
126
+ test_files: []
127
+ has_rdoc: