sneakers 1.0.1 → 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.
- checksums.yaml +4 -4
- data/.travis.yml +6 -0
- data/README.md +5 -6
- data/lib/sneakers/handlers/maxretry.rb +1 -0
- data/lib/sneakers/queue.rb +1 -1
- data/lib/sneakers/runner.rb +3 -3
- data/lib/sneakers/spawner.rb +27 -0
- data/lib/sneakers/tasks.rb +2 -2
- data/lib/sneakers/version.rb +1 -1
- data/lib/sneakers/workergroup.rb +1 -1
- data/sneakers.gemspec +2 -1
- data/spec/sneakers/publisher_spec.rb +5 -0
- data/spec/sneakers/queue_spec.rb +3 -3
- data/spec/sneakers/worker_spec.rb +39 -2
- data/spec/spec_helper.rb +1 -0
- metadata +21 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 955c1e3e788a76c97ae9b89ee240a9a2d3f4aaf8
|
4
|
+
data.tar.gz: 28a4049a67567ba36e434a471e280ba0f5fe20b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9405f6a0baf93ddf0211f7437138228e6bdeb76247d64675a8211775f540654bb89efe44497f5502d1582cf7855bae5d38c45986a167c3e39cd580ac2c98d24b
|
7
|
+
data.tar.gz: 11b4a380a5b3a3e596f294d7406c8afed06a7d9e5679dd12907bc543e00580e05f18cb71331ef16c24e6b1881cadb8df90d29317e4ed8573b0d8de946c877ab3
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -20,6 +20,9 @@ Visit the [wiki](https://github.com/jondot/sneakers/wiki) for
|
|
20
20
|
complete docs.
|
21
21
|
|
22
22
|
|
23
|
+
[](https://travis-ci.org/jondot/sneakers)
|
24
|
+
|
25
|
+
|
23
26
|
## Installation
|
24
27
|
|
25
28
|
Add this line to your application's Gemfile:
|
@@ -153,17 +156,13 @@ Fork, implement, add tests, pull request, get my everlasting thanks and a respec
|
|
153
156
|
|
154
157
|
### Thanks:
|
155
158
|
|
156
|
-
|
157
|
-
* Ariel Zerahia - @arielze
|
158
|
-
* @sergei-matheson
|
159
|
-
* Sebastian Edwards - @SebastianEdwards
|
160
|
-
* Tor Ivry - @torkale
|
159
|
+
To all Sneakers [Contributors](https://github.com/jondot/sneakers/graphs/contributors) - you make this happen, thanks!
|
161
160
|
|
162
161
|
|
163
162
|
|
164
163
|
# Copyright
|
165
164
|
|
166
|
-
Copyright (c)
|
165
|
+
Copyright (c) 2015 [Dotan Nahum](http://gplus.to/dotan) [@jondot](http://twitter.com/jondot). See MIT-LICENSE for further details.
|
167
166
|
|
168
167
|
|
169
168
|
|
data/lib/sneakers/queue.rb
CHANGED
@@ -46,7 +46,7 @@ class Sneakers::Queue
|
|
46
46
|
handler_klass = worker.opts[:handler] || Sneakers::CONFIG[:handler]
|
47
47
|
handler = handler_klass.new(@channel, queue, worker.opts)
|
48
48
|
|
49
|
-
@consumer = queue.subscribe(:block => false, :
|
49
|
+
@consumer = queue.subscribe(:block => false, :manual_ack => @opts[:ack]) do | delivery_info, metadata, msg |
|
50
50
|
worker.do_work(delivery_info, metadata, msg, handler)
|
51
51
|
end
|
52
52
|
nil
|
data/lib/sneakers/runner.rb
CHANGED
@@ -4,7 +4,7 @@ require 'sneakers/workergroup'
|
|
4
4
|
module Sneakers
|
5
5
|
class Runner
|
6
6
|
def initialize(worker_classes, opts={})
|
7
|
-
@runnerconfig = RunnerConfig.new(worker_classes)
|
7
|
+
@runnerconfig = RunnerConfig.new(worker_classes, opts)
|
8
8
|
end
|
9
9
|
|
10
10
|
def run
|
@@ -29,9 +29,9 @@ module Sneakers
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def initialize(worker_classes)
|
32
|
+
def initialize(worker_classes, opts)
|
33
33
|
@worker_classes = worker_classes
|
34
|
-
@conf =
|
34
|
+
@conf = opts
|
35
35
|
end
|
36
36
|
|
37
37
|
def to_h
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Sneakers
|
4
|
+
class Spawner
|
5
|
+
|
6
|
+
def self.spawn
|
7
|
+
worker_group_config_file = ENV['WORKER_GROUP_CONFIG'] || "./config/sneaker_worker_groups.yml"
|
8
|
+
unless File.exists?(worker_group_config_file)
|
9
|
+
puts "No worker group file found."
|
10
|
+
puts "Specify via ENV 'WORKER_GROUP_CONFIG' or by convention ./config/sneaker_worker_groups.yml"
|
11
|
+
end
|
12
|
+
@pids = []
|
13
|
+
@exec_string = "bundle exec rake sneakers:run"
|
14
|
+
worker_config = YAML.load(File.read(worker_group_config_file))
|
15
|
+
worker_config.keys.each do |group_name|
|
16
|
+
@pids << fork do
|
17
|
+
@exec_hash = {"WORKERS"=> worker_config[group_name]['classes'], "WORKER_COUNT" => worker_config[group_name]["workers"].to_s}
|
18
|
+
Kernel.exec(@exec_hash, @exec_string)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
["TERM", "USR1", "HUP", "USR2"].each do |signal|
|
22
|
+
Signal.trap(signal){ @pids.each{|pid| Process.kill(signal, pid) } }
|
23
|
+
end
|
24
|
+
Process.waitall
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/sneakers/tasks.rb
CHANGED
@@ -26,8 +26,8 @@ Please set the classes of the workers you want to run like so:
|
|
26
26
|
EOF
|
27
27
|
exit(1)
|
28
28
|
end
|
29
|
-
|
30
|
-
r = Sneakers::Runner.new(workers)
|
29
|
+
opts = (ENV['WORKER_COUNT'].present? ? {:workers => ENV['WORKER_COUNT'].to_i} : {})
|
30
|
+
r = Sneakers::Runner.new(workers, opts)
|
31
31
|
|
32
32
|
r.run
|
33
33
|
end
|
data/lib/sneakers/version.rb
CHANGED
data/lib/sneakers/workergroup.rb
CHANGED
@@ -28,7 +28,7 @@ module Sneakers
|
|
28
28
|
# end per worker
|
29
29
|
#
|
30
30
|
until @stop_flag.wait_for_set(10.0)
|
31
|
-
Sneakers.logger.
|
31
|
+
Sneakers.logger.debug("Heartbeat: running threads [#{Thread.list.count}]")
|
32
32
|
# report aggregated stats?
|
33
33
|
end
|
34
34
|
|
data/sneakers.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(/^(test|spec|features)\//)
|
18
18
|
gem.require_paths = ['lib']
|
19
19
|
gem.add_dependency 'serverengine'
|
20
|
-
gem.add_dependency 'bunny', '~> 1.
|
20
|
+
gem.add_dependency 'bunny', '~> 1.7.0'
|
21
21
|
gem.add_dependency 'thread'
|
22
22
|
gem.add_dependency 'thor'
|
23
23
|
|
@@ -29,5 +29,6 @@ Gem::Specification.new do |gem|
|
|
29
29
|
gem.add_development_dependency 'simplecov'
|
30
30
|
gem.add_development_dependency 'simplecov-rcov-text'
|
31
31
|
gem.add_development_dependency 'rake'
|
32
|
+
gem.add_development_dependency 'minitest'
|
32
33
|
end
|
33
34
|
|
@@ -3,6 +3,11 @@ require 'sneakers'
|
|
3
3
|
|
4
4
|
describe Sneakers::Publisher do
|
5
5
|
describe '#publish' do
|
6
|
+
before do
|
7
|
+
Sneakers.clear!
|
8
|
+
Sneakers.configure(:log => 'sneakers.log')
|
9
|
+
end
|
10
|
+
|
6
11
|
it 'should publish a message to an exchange' do
|
7
12
|
xchg = Object.new
|
8
13
|
mock(xchg).publish('test msg', routing_key: 'downloads')
|
data/spec/sneakers/queue_spec.rb
CHANGED
@@ -44,7 +44,7 @@ describe Sneakers::Queue do
|
|
44
44
|
q = Sneakers::Queue.new("downloads", queue_vars)
|
45
45
|
|
46
46
|
mock(@mkqueue).bind(@mkex, :routing_key => "downloads")
|
47
|
-
mock(@mkqueue).subscribe(:block => false, :
|
47
|
+
mock(@mkqueue).subscribe(:block => false, :manual_ack => true)
|
48
48
|
|
49
49
|
q.subscribe(@mkworker)
|
50
50
|
end
|
@@ -56,7 +56,7 @@ describe Sneakers::Queue do
|
|
56
56
|
|
57
57
|
mock(@mkqueue).bind(@mkex, :routing_key => "alpha")
|
58
58
|
mock(@mkqueue).bind(@mkex, :routing_key => "beta")
|
59
|
-
mock(@mkqueue).subscribe(:block => false, :
|
59
|
+
mock(@mkqueue).subscribe(:block => false, :manual_ack => true)
|
60
60
|
|
61
61
|
q.subscribe(@mkworker)
|
62
62
|
end
|
@@ -80,7 +80,7 @@ describe Sneakers::Queue do
|
|
80
80
|
q = Sneakers::Queue.new("test_nondurable", queue_vars)
|
81
81
|
|
82
82
|
mock(@mkqueue_nondurable).bind(@mkex, :routing_key => "test_nondurable")
|
83
|
-
mock(@mkqueue_nondurable).subscribe(:block => false, :
|
83
|
+
mock(@mkqueue_nondurable).subscribe(:block => false, :manual_ack => true)
|
84
84
|
|
85
85
|
q.subscribe(@mkworker)
|
86
86
|
myqueue = q.instance_variable_get(:@queue)
|
@@ -131,6 +131,7 @@ describe Sneakers::Worker do
|
|
131
131
|
stub(@queue).opts { {} }
|
132
132
|
stub(@queue).exchange { @exchange }
|
133
133
|
|
134
|
+
Sneakers.clear!
|
134
135
|
Sneakers.configure(:daemonize => true, :log => 'sneakers.log')
|
135
136
|
Sneakers::Worker.configure_metrics
|
136
137
|
end
|
@@ -160,14 +161,50 @@ describe Sneakers::Worker do
|
|
160
161
|
it "should build a queue with correct configuration given defaults" do
|
161
162
|
@defaults_q.name.must_equal('defaults')
|
162
163
|
@defaults_q.opts.to_hash.must_equal(
|
163
|
-
|
164
|
+
:runner_config_file => nil,
|
165
|
+
:metrics => nil,
|
166
|
+
:daemonize => true,
|
167
|
+
:start_worker_delay => 0.2,
|
168
|
+
:workers => 4,
|
169
|
+
:log => "sneakers.log",
|
170
|
+
:pid_path => "sneakers.pid",
|
171
|
+
:timeout_job_after => 5,
|
172
|
+
:prefetch => 10,
|
173
|
+
:threads => 10,
|
174
|
+
:durable => true,
|
175
|
+
:ack => true,
|
176
|
+
:amqp => "amqp://guest:guest@localhost:5672",
|
177
|
+
:vhost => "/",
|
178
|
+
:exchange => "sneakers",
|
179
|
+
:exchange_type => :direct,
|
180
|
+
:hooks => {},
|
181
|
+
:handler => Sneakers::Handlers::Oneshot,
|
182
|
+
:heartbeat => 2
|
164
183
|
)
|
165
184
|
end
|
166
185
|
|
167
186
|
it "should build a queue with given configuration" do
|
168
187
|
@dummy_q.name.must_equal('downloads')
|
169
188
|
@dummy_q.opts.to_hash.must_equal(
|
170
|
-
|
189
|
+
:runner_config_file => nil,
|
190
|
+
:metrics => nil,
|
191
|
+
:daemonize => true,
|
192
|
+
:start_worker_delay => 0.2,
|
193
|
+
:workers => 4,
|
194
|
+
:log => "sneakers.log",
|
195
|
+
:pid_path => "sneakers.pid",
|
196
|
+
:timeout_job_after => 1,
|
197
|
+
:prefetch => 40,
|
198
|
+
:threads => 50,
|
199
|
+
:durable => false,
|
200
|
+
:ack => false,
|
201
|
+
:amqp => "amqp://guest:guest@localhost:5672",
|
202
|
+
:vhost => "/",
|
203
|
+
:exchange => "dummy",
|
204
|
+
:exchange_type => :direct,
|
205
|
+
:hooks => {},
|
206
|
+
:handler => Sneakers::Handlers::Oneshot,
|
207
|
+
:heartbeat => 5
|
171
208
|
)
|
172
209
|
end
|
173
210
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sneakers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dotan Nahum
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: serverengine
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.7.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: 1.7.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: thread
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: minitest
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
181
195
|
description: " Fast background processing framework for Ruby and RabbitMQ "
|
182
196
|
email:
|
183
197
|
- jondotan@gmail.com
|
@@ -187,6 +201,7 @@ extensions: []
|
|
187
201
|
extra_rdoc_files: []
|
188
202
|
files:
|
189
203
|
- ".gitignore"
|
204
|
+
- ".travis.yml"
|
190
205
|
- CHANGELOG.md
|
191
206
|
- Gemfile
|
192
207
|
- Guardfile
|
@@ -217,6 +232,7 @@ files:
|
|
217
232
|
- lib/sneakers/publisher.rb
|
218
233
|
- lib/sneakers/queue.rb
|
219
234
|
- lib/sneakers/runner.rb
|
235
|
+
- lib/sneakers/spawner.rb
|
220
236
|
- lib/sneakers/support/production_formatter.rb
|
221
237
|
- lib/sneakers/support/utils.rb
|
222
238
|
- lib/sneakers/tasks.rb
|
@@ -255,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
255
271
|
version: '0'
|
256
272
|
requirements: []
|
257
273
|
rubyforge_project:
|
258
|
-
rubygems_version: 2.
|
274
|
+
rubygems_version: 2.4.5
|
259
275
|
signing_key:
|
260
276
|
specification_version: 4
|
261
277
|
summary: Fast background processing framework for Ruby and RabbitMQ
|