qless-pool 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.
- data/Changelog.md +3 -0
- data/LICENSE.txt +20 -0
- data/README.md +159 -0
- data/Rakefile +30 -0
- data/bin/qless-pool +7 -0
- data/features/basic_daemon_config.feature +68 -0
- data/features/step_definitions/daemon_steps.rb +33 -0
- data/features/step_definitions/qless-pool_steps.rb +156 -0
- data/features/support/aruba_daemon_support.rb +76 -0
- data/features/support/env.rb +1 -0
- data/lib/qless/pool.rb +415 -0
- data/lib/qless/pool/cli.rb +136 -0
- data/lib/qless/pool/logging.rb +65 -0
- data/lib/qless/pool/pool_factory.rb +43 -0
- data/lib/qless/pool/pooled_worker.rb +21 -0
- data/lib/qless/pool/tasks.rb +20 -0
- data/lib/qless/pool/version.rb +5 -0
- data/man/qless-pool.1 +88 -0
- data/man/qless-pool.1.ronn +92 -0
- data/man/qless-pool.yml.5 +46 -0
- data/man/qless-pool.yml.5.ronn +41 -0
- data/spec/mock_config.rb +6 -0
- data/spec/qless-pool-custom.yml.erb +1 -0
- data/spec/qless-pool.yml +13 -0
- data/spec/qless_pool_spec.rb +166 -0
- data/spec/spec_helper.rb +3 -0
- metadata +213 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
.\" generated with Ronn/v0.7.3
|
2
|
+
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
+
.
|
4
|
+
.TH "QLESS\-POOL\.YML" "5" "May 2012" "QLESS-POOL 0.3.0.DEV" "QLESS-POOL"
|
5
|
+
.
|
6
|
+
.SH "NAME"
|
7
|
+
\fBqless\-pool\.yml\fR \- qless\-pool pool configuration
|
8
|
+
.
|
9
|
+
.SH "SYNOPSIS"
|
10
|
+
\fBqless\-pool\.yml\fR
|
11
|
+
.
|
12
|
+
.br
|
13
|
+
\fBconfig/qless\-pool\.yml\fR
|
14
|
+
.
|
15
|
+
.SH "DESCRIPTION"
|
16
|
+
qless\-pool(1) reads pool configuration data from \fBqless\-pool\.yml\fR (or the file specified with \fB\-c\fR on the command line)\. The file contains queue\-worker\-count pairs, one per line\. The configuration file supports both using root level defaults as well as environment specific overrides (\fBRACK_ENV\fR, \fBRAILS_ENV\fR, and \fBQLESS_ENV\fR environment variables can be used to determine environment)\.
|
17
|
+
.
|
18
|
+
.P
|
19
|
+
An example configuration
|
20
|
+
.
|
21
|
+
.IP "" 4
|
22
|
+
.
|
23
|
+
.nf
|
24
|
+
|
25
|
+
foo: 1
|
26
|
+
bar: 2
|
27
|
+
"foo,bar,baz": 1
|
28
|
+
|
29
|
+
production:
|
30
|
+
"foo,bar,baz": 4
|
31
|
+
.
|
32
|
+
.fi
|
33
|
+
.
|
34
|
+
.IP "" 0
|
35
|
+
.
|
36
|
+
.P
|
37
|
+
will create 7 workers in production and 4 in other environment configurations\. The simpler worker definition \fBfoo: 1\fR will create 1 worker for the \fBfoo\fR queue, the more complicated \fBfoo,bar,baz: 1\fR will create 1 worker for the queues \fBfoo\fR, \fBbar\fR and \fBbaz\fR\.
|
38
|
+
.
|
39
|
+
.SH "AUTHOR"
|
40
|
+
Nicholas Evans
|
41
|
+
.
|
42
|
+
.SH "COPYRIGHT"
|
43
|
+
Copyright (C) 2010 by Nicholas Evans \fInick@ekenosen\.net\fR, et al\.
|
44
|
+
.
|
45
|
+
.SH "SEE ALSO"
|
46
|
+
qless\-pool(1)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
qless-pool.yml(5) -- qless-pool pool configuration
|
2
|
+
=====================================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
`qless-pool.yml`<br>
|
7
|
+
`config/qless-pool.yml`
|
8
|
+
|
9
|
+
## DESCRIPTION
|
10
|
+
|
11
|
+
qless-pool(1) reads pool configuration data from `qless-pool.yml` (or
|
12
|
+
the file specified with `-c` on the command line). The file contains queue-worker-count pairs, one per line. The configuration file supports both
|
13
|
+
using root level defaults as well as environment specific overrides
|
14
|
+
(`RACK_ENV`, `RAILS_ENV`, and `QLESS_ENV` environment variables can be used
|
15
|
+
to determine environment).
|
16
|
+
|
17
|
+
An example configuration
|
18
|
+
|
19
|
+
foo: 1
|
20
|
+
bar: 2
|
21
|
+
"foo,bar,baz": 1
|
22
|
+
|
23
|
+
production:
|
24
|
+
"foo,bar,baz": 4
|
25
|
+
|
26
|
+
will create 7 workers in production and 4 in other environment configurations.
|
27
|
+
The simpler worker definition `foo: 1` will create 1 worker for the `foo`
|
28
|
+
queue, the more complicated `foo,bar,baz: 1` will create 1 worker for the
|
29
|
+
queues `foo`, `bar` and `baz`.
|
30
|
+
|
31
|
+
## AUTHOR
|
32
|
+
|
33
|
+
Nicholas Evans
|
34
|
+
|
35
|
+
## COPYRIGHT
|
36
|
+
|
37
|
+
Copyright (C) 2010 by Nicholas Evans <nick@ekenosen.net>, et al.
|
38
|
+
|
39
|
+
## SEE ALSO
|
40
|
+
|
41
|
+
qless-pool(1)
|
data/spec/mock_config.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
foo: <%= 1+1 %>
|
data/spec/qless-pool.yml
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.after {
|
5
|
+
Object.send(:remove_const, :RAILS_ENV) if defined? RAILS_ENV
|
6
|
+
ENV.delete 'RACK_ENV'
|
7
|
+
ENV.delete 'RAILS_ENV'
|
8
|
+
ENV.delete 'QLESS_ENV'
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
describe Qless::Pool, "when loading a simple pool configuration" do
|
13
|
+
let(:config) do
|
14
|
+
{ 'foo' => 1, 'bar' => 2, 'foo,bar' => 3, 'bar,foo' => 4, }
|
15
|
+
end
|
16
|
+
subject { Qless::Pool.new(config) }
|
17
|
+
|
18
|
+
context "when ENV['RACK_ENV'] is set" do
|
19
|
+
before { ENV['RACK_ENV'] = 'development' }
|
20
|
+
|
21
|
+
it "should load the values from the Hash" do
|
22
|
+
subject.config["foo"].should == 1
|
23
|
+
subject.config["bar"].should == 2
|
24
|
+
subject.config["foo,bar"].should == 3
|
25
|
+
subject.config["bar,foo"].should == 4
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe Qless::Pool, "when loading the pool configuration from a Hash" do
|
32
|
+
|
33
|
+
let(:config) do
|
34
|
+
{
|
35
|
+
'foo' => 8,
|
36
|
+
'test' => { 'bar' => 10, 'foo,bar' => 12 },
|
37
|
+
'development' => { 'baz' => 14, 'foo,bar' => 16 },
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
subject { Qless::Pool.new(config) }
|
42
|
+
|
43
|
+
context "when RAILS_ENV is set" do
|
44
|
+
before { RAILS_ENV = "test" }
|
45
|
+
|
46
|
+
it "should load the default values from the Hash" do
|
47
|
+
subject.config["foo"].should == 8
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should merge the values for the correct RAILS_ENV" do
|
51
|
+
subject.config["bar"].should == 10
|
52
|
+
subject.config["foo,bar"].should == 12
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should not load the values for the other environments" do
|
56
|
+
subject.config["foo,bar"].should == 12
|
57
|
+
subject.config["baz"].should be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
context "when Rails.env is set" do
|
63
|
+
before(:each) do
|
64
|
+
module Rails; end
|
65
|
+
Rails.stub(:env).and_return('test')
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should load the default values from the Hash" do
|
69
|
+
subject.config["foo"].should == 8
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should merge the values for the correct RAILS_ENV" do
|
73
|
+
subject.config["bar"].should == 10
|
74
|
+
subject.config["foo,bar"].should == 12
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should not load the values for the other environments" do
|
78
|
+
subject.config["foo,bar"].should == 12
|
79
|
+
subject.config["baz"].should be_nil
|
80
|
+
end
|
81
|
+
|
82
|
+
after(:all) { Object.send(:remove_const, :Rails) }
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
context "when ENV['QLESS_ENV'] is set" do
|
87
|
+
before { ENV['QLESS_ENV'] = 'development' }
|
88
|
+
it "should load the config for that environment" do
|
89
|
+
subject.config["foo"].should == 8
|
90
|
+
subject.config["foo,bar"].should == 16
|
91
|
+
subject.config["baz"].should == 14
|
92
|
+
subject.config["bar"].should be_nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "when there is no environment" do
|
97
|
+
it "should load the default values only" do
|
98
|
+
subject.config["foo"].should == 8
|
99
|
+
subject.config["bar"].should be_nil
|
100
|
+
subject.config["foo,bar"].should be_nil
|
101
|
+
subject.config["baz"].should be_nil
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
describe Qless::Pool, "given no configuration" do
|
108
|
+
subject { Qless::Pool.new(nil) }
|
109
|
+
it "should have no worker types" do
|
110
|
+
subject.config.should == {}
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe Qless::Pool, "when loading the pool configuration from a file" do
|
115
|
+
|
116
|
+
subject { Qless::Pool.new("spec/qless-pool.yml") }
|
117
|
+
|
118
|
+
context "when RAILS_ENV is set" do
|
119
|
+
before { RAILS_ENV = "test" }
|
120
|
+
|
121
|
+
it "should load the default YAML" do
|
122
|
+
subject.config["foo"].should == 1
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should merge the YAML for the correct RAILS_ENV" do
|
126
|
+
subject.config["bar"].should == 5
|
127
|
+
subject.config["foo,bar"].should == 3
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should not load the YAML for the other environments" do
|
131
|
+
subject.config["foo"].should == 1
|
132
|
+
subject.config["bar"].should == 5
|
133
|
+
subject.config["foo,bar"].should == 3
|
134
|
+
subject.config["baz"].should be_nil
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
context "when ENV['RACK_ENV'] is set" do
|
140
|
+
before { ENV['RACK_ENV'] = 'development' }
|
141
|
+
it "should load the config for that environment" do
|
142
|
+
subject.config["foo"].should == 1
|
143
|
+
subject.config["foo,bar"].should == 4
|
144
|
+
subject.config["baz"].should == 23
|
145
|
+
subject.config["bar"].should be_nil
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context "when there is no environment" do
|
150
|
+
it "should load the default values only" do
|
151
|
+
subject.config["foo"].should == 1
|
152
|
+
subject.config["bar"].should be_nil
|
153
|
+
subject.config["foo,bar"].should be_nil
|
154
|
+
subject.config["baz"].should be_nil
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context "when a custom file is specified" do
|
159
|
+
before { ENV["QLESS_POOL_CONFIG"] = 'spec/qless-pool-custom.yml.erb' }
|
160
|
+
subject { Qless::Pool.new(Qless::Pool.choose_config_file) }
|
161
|
+
it "should find the right file, and parse the ERB" do
|
162
|
+
subject.config["foo"].should == 2
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,213 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: qless-pool
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matt Conway
|
9
|
+
- Nicholas a. Evans
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-06-28 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: qless
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.9.2
|
22
|
+
none: false
|
23
|
+
prerelease: false
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.9.2
|
30
|
+
none: false
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: trollop
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.16'
|
38
|
+
none: false
|
39
|
+
prerelease: false
|
40
|
+
type: :runtime
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.16'
|
46
|
+
none: false
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
none: false
|
55
|
+
prerelease: false
|
56
|
+
type: :runtime
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
none: false
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rspec
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 2.10.0
|
70
|
+
none: false
|
71
|
+
prerelease: false
|
72
|
+
type: :development
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.10.0
|
78
|
+
none: false
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: cucumber
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.2.0
|
86
|
+
none: false
|
87
|
+
prerelease: false
|
88
|
+
type: :development
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.2.0
|
94
|
+
none: false
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: aruba
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.4.11
|
102
|
+
none: false
|
103
|
+
prerelease: false
|
104
|
+
type: :development
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.4.11
|
110
|
+
none: false
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: bundler
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.0'
|
118
|
+
none: false
|
119
|
+
prerelease: false
|
120
|
+
type: :development
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.0'
|
126
|
+
none: false
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: ronn
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
none: false
|
135
|
+
prerelease: false
|
136
|
+
type: :development
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
none: false
|
143
|
+
description: ! " quickly and easily fork a pool of qless workers,\n saving memory
|
144
|
+
(w/REE) and monitoring their uptime\n"
|
145
|
+
email:
|
146
|
+
- matt@conwaysplace.com
|
147
|
+
- nick@ekenosen.net
|
148
|
+
executables:
|
149
|
+
- qless-pool
|
150
|
+
extensions: []
|
151
|
+
extra_rdoc_files: []
|
152
|
+
files:
|
153
|
+
- README.md
|
154
|
+
- Rakefile
|
155
|
+
- LICENSE.txt
|
156
|
+
- Changelog.md
|
157
|
+
- lib/qless/pool/cli.rb
|
158
|
+
- lib/qless/pool/logging.rb
|
159
|
+
- lib/qless/pool/pool_factory.rb
|
160
|
+
- lib/qless/pool/pooled_worker.rb
|
161
|
+
- lib/qless/pool/tasks.rb
|
162
|
+
- lib/qless/pool/version.rb
|
163
|
+
- lib/qless/pool.rb
|
164
|
+
- bin/qless-pool
|
165
|
+
- man/qless-pool.1
|
166
|
+
- man/qless-pool.1.ronn
|
167
|
+
- man/qless-pool.yml.5
|
168
|
+
- man/qless-pool.yml.5.ronn
|
169
|
+
- features/basic_daemon_config.feature
|
170
|
+
- features/step_definitions/daemon_steps.rb
|
171
|
+
- features/step_definitions/qless-pool_steps.rb
|
172
|
+
- features/support/aruba_daemon_support.rb
|
173
|
+
- features/support/env.rb
|
174
|
+
- spec/mock_config.rb
|
175
|
+
- spec/qless-pool-custom.yml.erb
|
176
|
+
- spec/qless-pool.yml
|
177
|
+
- spec/qless_pool_spec.rb
|
178
|
+
- spec/spec_helper.rb
|
179
|
+
homepage: http://github.com/backupify/qless-pool
|
180
|
+
licenses: []
|
181
|
+
post_install_message:
|
182
|
+
rdoc_options: []
|
183
|
+
require_paths:
|
184
|
+
- lib
|
185
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
none: false
|
191
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ! '>='
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
none: false
|
197
|
+
requirements: []
|
198
|
+
rubyforge_project:
|
199
|
+
rubygems_version: 1.8.25
|
200
|
+
signing_key:
|
201
|
+
specification_version: 3
|
202
|
+
summary: quickly and easily fork a pool of qless workers
|
203
|
+
test_files:
|
204
|
+
- spec/mock_config.rb
|
205
|
+
- spec/qless_pool_spec.rb
|
206
|
+
- spec/spec_helper.rb
|
207
|
+
- spec/qless-pool.yml
|
208
|
+
- features/step_definitions/daemon_steps.rb
|
209
|
+
- features/step_definitions/qless-pool_steps.rb
|
210
|
+
- features/support/aruba_daemon_support.rb
|
211
|
+
- features/support/env.rb
|
212
|
+
- features/basic_daemon_config.feature
|
213
|
+
has_rdoc:
|