sidekiq-dynamic-queues 0.5.6 → 0.6.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.
- checksums.yaml +7 -0
- data/CHANGELOG +7 -0
- data/lib/sidekiq/dynamic_queues/attributes.rb +7 -7
- data/lib/sidekiq/dynamic_queues/server.rb +1 -1
- data/lib/sidekiq/dynamic_queues/server/views/dynamicqueue.erb +77 -0
- data/lib/sidekiq/dynamic_queues/version.rb +1 -1
- data/sidekiq-dynamic-queues.gemspec +1 -0
- data/spec/queues_spec.rb +2 -3
- data/spec/server_spec.rb +4 -4
- data/spec/spec_helper.rb +8 -13
- metadata +56 -63
- data/lib/sidekiq/dynamic_queues/server/views/dynamicqueue.slim +0 -63
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e26d8799284d819ada2b3525662f535823158eda
|
4
|
+
data.tar.gz: 4c8675472a38536c7e6c94ef7ed784efe7a9319e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: afee84bcaa102dfa32571f8581058e2255cda9567a747fcfb151c82200814039aeab9611440af2ccf64d7c0218a97c4c8f077d6a636acf988b969e01e3f39c1d
|
7
|
+
data.tar.gz: c5c9f306121ab9560c64d8e540448efe6fdcfb0bce1a26468169cfd57b07b5261553f6cd54d1e01cd96deae3870aa746c0a892fc676b7de8c9e0bc903c9a194e
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
0.6.0 (03/04/2014)
|
2
|
+
------------------
|
3
|
+
|
4
|
+
Merge pull request #3 from adstage-david/master <c1f77c5> [Matt Conway]
|
5
|
+
Use Sidekiq::Queue.all instead of deprecated registered_queues. <e01c6b0> [David Haslem]
|
6
|
+
updated for latest sidekiq: slim -> erb, fix running of jobs in tests <eb7f982> [Matt Conway]
|
7
|
+
|
1
8
|
0.5.6 (06/13/2013)
|
2
9
|
------------------
|
3
10
|
|
@@ -10,12 +10,12 @@ module Sidekiq
|
|
10
10
|
def json_encode(data)
|
11
11
|
Sidekiq.dump_json(data)
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def json_decode(data)
|
15
15
|
return nil unless data
|
16
16
|
Sidekiq.load_json(data)
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def get_dynamic_queue(key, fallback=['*'])
|
20
20
|
data = Sidekiq.redis {|r| r.hget(DYNAMIC_QUEUE_KEY, key) }
|
21
21
|
queue_names = json_decode(data)
|
@@ -24,7 +24,7 @@ module Sidekiq
|
|
24
24
|
data = Sidekiq.redis {|r| r.hget(DYNAMIC_QUEUE_KEY, FALLBACK_KEY) }
|
25
25
|
queue_names = json_decode(data)
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
if queue_names.nil? || queue_names.size == 0
|
29
29
|
queue_names = fallback
|
30
30
|
end
|
@@ -39,7 +39,7 @@ module Sidekiq
|
|
39
39
|
Sidekiq.redis {|r| r.hset(DYNAMIC_QUEUE_KEY, key, json_encode(values)) }
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
def set_dynamic_queues(dynamic_queues)
|
44
44
|
Sidekiq.redis do |r|
|
45
45
|
r.multi do
|
@@ -58,7 +58,7 @@ module Sidekiq
|
|
58
58
|
result[FALLBACK_KEY] ||= ['*']
|
59
59
|
return result
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
# Returns a list of queues to use when searching for a job.
|
63
63
|
#
|
64
64
|
# A splat ("*") means you want every queue (in alpha order) - this
|
@@ -76,7 +76,7 @@ module Sidekiq
|
|
76
76
|
def expand_queues(queues)
|
77
77
|
queue_names = queues.dup
|
78
78
|
|
79
|
-
real_queues = Sidekiq::
|
79
|
+
real_queues = Sidekiq::Queue.all.map(&:name)
|
80
80
|
matched_queues = []
|
81
81
|
|
82
82
|
while q = queue_names.shift
|
@@ -113,6 +113,6 @@ module Sidekiq
|
|
113
113
|
end
|
114
114
|
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
end
|
118
118
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
<div class="row header">
|
2
|
+
<div class="col-sm-7">
|
3
|
+
<h3>Dynamic Queues</h3>
|
4
|
+
</div>
|
5
|
+
</div>
|
6
|
+
|
7
|
+
<p>
|
8
|
+
The list below shows the dynamic queues currently defined. When you start
|
9
|
+
a worker with a dynamic queue key (@key_name), that key is looked up from
|
10
|
+
the list below to determine the actual queues the worker should pull from.
|
11
|
+
Wildcards (*) and negation (leading !) can be used to select the queues the
|
12
|
+
worker should process. There is always a fallback key - @default, which
|
13
|
+
workers will use if the key for that worker is empty. If both the key and
|
14
|
+
the fallback are empty, the worker defaults to processing '*'
|
15
|
+
</p>
|
16
|
+
|
17
|
+
<form action="<%= root_path %>dynamicqueue" method="POST">
|
18
|
+
|
19
|
+
<table class="queues table table-hover table-bordered table-striped table-white">
|
20
|
+
<thead>
|
21
|
+
<th>Name</th>
|
22
|
+
<th>Value</th>
|
23
|
+
<th>Expanded</th>
|
24
|
+
<th></th>
|
25
|
+
</thead>
|
26
|
+
<% @queues.each_with_index do |data, i| %>
|
27
|
+
<tr class="line">
|
28
|
+
<td>
|
29
|
+
<input type="text" id="input-<%= i %>-name" name="queues[][name]" value="<%= data['name'] %>" />
|
30
|
+
</td>
|
31
|
+
<td>
|
32
|
+
<input type="text" id="input-<%= i %>-value" name="queues[][value]" value="<%= data['value'] %>" />
|
33
|
+
</td>
|
34
|
+
<td class="expanded">
|
35
|
+
<%= data['expanded'] %>
|
36
|
+
</td>
|
37
|
+
<td>
|
38
|
+
<a href="#remove" class="remove">Remove</a>
|
39
|
+
</td>
|
40
|
+
</tr>
|
41
|
+
<% end %>
|
42
|
+
</table>
|
43
|
+
<a href="#add" class="add">Add</a>
|
44
|
+
|
45
|
+
<input type="submit" value="Save" />
|
46
|
+
</form>
|
47
|
+
|
48
|
+
<script type="text/javascript">
|
49
|
+
function markDirty()
|
50
|
+
{
|
51
|
+
$("input[type=submit]").css({border:"3px orange solid"});
|
52
|
+
}
|
53
|
+
|
54
|
+
jQuery(function($) {
|
55
|
+
|
56
|
+
$("input").live("keypress", markDirty);
|
57
|
+
|
58
|
+
$("a.add").live("click", function(e) {
|
59
|
+
e.preventDefault();
|
60
|
+
var $table = $("table.queues");
|
61
|
+
var $newRow = $table.find("tr.line:first").clone();
|
62
|
+
$newRow.find("input[type=text]").attr("value", "");
|
63
|
+
$newRow.find("td.expanded").html("")
|
64
|
+
$newRow.appendTo($table);
|
65
|
+
markDirty();
|
66
|
+
});
|
67
|
+
|
68
|
+
$("a.remove").live("click", function(e) {
|
69
|
+
e.preventDefault();
|
70
|
+
var $link = $(this);
|
71
|
+
$link.parents("tr").remove();
|
72
|
+
markDirty();
|
73
|
+
});
|
74
|
+
|
75
|
+
|
76
|
+
});
|
77
|
+
</script>
|
data/spec/queues_spec.rb
CHANGED
@@ -242,7 +242,7 @@ describe "Dynamic Queues" do
|
|
242
242
|
|
243
243
|
it "finds work on dynamic queue that doesn't exist till after sidekiq is waiting for jobs" do
|
244
244
|
watch_queues(*%w[default])
|
245
|
-
|
245
|
+
launcher = run_queues("*", :async => true)
|
246
246
|
# give run_queues a chance to block on only the default queue given above
|
247
247
|
sleep 0.1
|
248
248
|
|
@@ -252,8 +252,7 @@ describe "Dynamic Queues" do
|
|
252
252
|
# that for it to re-evaluate the dynamic queues
|
253
253
|
sleep 2
|
254
254
|
timeout(5) do
|
255
|
-
|
256
|
-
manager.wait(:shutdown)
|
255
|
+
launcher.stop
|
257
256
|
end
|
258
257
|
SomeJob.result.should eq [1]
|
259
258
|
end
|
data/spec/server_spec.rb
CHANGED
@@ -94,10 +94,10 @@ describe "Dynamic Queues pages" do
|
|
94
94
|
set_dynamic_queue("key_two", ["bar", "baz"])
|
95
95
|
get "/dynamicqueue"
|
96
96
|
|
97
|
-
last_response.body.should
|
98
|
-
last_response.body.should
|
99
|
-
last_response.body.should
|
100
|
-
last_response.body.should
|
97
|
+
last_response.body.should include '<input type="text" id="input-0-name" name="queues[][name]" value="key_one" />'
|
98
|
+
last_response.body.should include '<input type="text" id="input-0-value" name="queues[][value]" value="foo" />'
|
99
|
+
last_response.body.should include '<input type="text" id="input-1-name" name="queues[][name]" value="key_two" />'
|
100
|
+
last_response.body.should include '<input type="text" id="input-1-value" name="queues[][value]" value="bar, baz" />'
|
101
101
|
end
|
102
102
|
|
103
103
|
it "should delete queues on empty queue submit" do
|
data/spec/spec_helper.rb
CHANGED
@@ -2,9 +2,7 @@ require 'rspec'
|
|
2
2
|
require 'sidekiq-dynamic-queues'
|
3
3
|
require 'celluloid'
|
4
4
|
require 'sidekiq'
|
5
|
-
require 'sidekiq/
|
6
|
-
require 'sidekiq/cli'
|
7
|
-
require 'sidekiq/manager'
|
5
|
+
require 'sidekiq/launcher'
|
8
6
|
|
9
7
|
Sidekiq.logger.level = Logger::DEBUG
|
10
8
|
Celluloid.logger = Sidekiq.logger = nil
|
@@ -73,23 +71,20 @@ end
|
|
73
71
|
def run_queues(*queues)
|
74
72
|
options = queues.last.is_a?(Hash) ? queues.pop : {}
|
75
73
|
options = {:async => false, :timeout => 5}.merge(options)
|
76
|
-
Sidekiq::Fetcher.instance_eval { @done = false }
|
77
|
-
manager = Sidekiq::Manager.new({:queues=>queues, :concurrency=>1, :timeout=>1})
|
78
74
|
|
79
|
-
|
80
|
-
|
75
|
+
sidekiq_opts = {:queues=>queues, :concurrency=>1, :timeout=>1}
|
76
|
+
Sidekiq::Fetcher.reset
|
77
|
+
launcher = Sidekiq::Launcher.new(sidekiq_opts)
|
78
|
+
launcher.run
|
79
|
+
|
81
80
|
unless options[:async]
|
82
81
|
# give up control so jobs can start running before we call stop
|
83
82
|
# Manager.when_done only gets called for jobs that succeed, not jobs that raise
|
84
83
|
sleep 0.1
|
85
|
-
|
86
|
-
|
87
|
-
timeout(options[:timeout]) do
|
88
|
-
manager.wait(:shutdown)
|
89
|
-
end
|
84
|
+
launcher.stop
|
90
85
|
end
|
91
86
|
|
92
|
-
|
87
|
+
launcher
|
93
88
|
end
|
94
89
|
|
95
90
|
class SomeJob
|
metadata
CHANGED
@@ -1,119 +1,115 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-dynamic-queues
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.5.6
|
4
|
+
version: 0.6.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matt Conway
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-03-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: sidekiq
|
16
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - "~>"
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: '2.9'
|
21
|
-
|
22
|
-
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.9'
|
27
|
-
none: false
|
28
|
-
prerelease: false
|
29
|
-
type: :runtime
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
|
-
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
33
30
|
requirements:
|
34
31
|
- - ">="
|
35
32
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
38
|
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
44
|
-
MA==
|
45
|
-
none: false
|
46
|
-
prerelease: false
|
47
|
-
type: :development
|
40
|
+
version: '0'
|
48
41
|
- !ruby/object:Gem::Dependency
|
49
42
|
name: rspec
|
50
|
-
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
51
44
|
requirements:
|
52
45
|
- - "~>"
|
53
46
|
- !ruby/object:Gem::Version
|
54
47
|
version: '2.5'
|
55
|
-
|
56
|
-
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
51
|
requirements:
|
58
52
|
- - "~>"
|
59
53
|
- !ruby/object:Gem::Version
|
60
54
|
version: '2.5'
|
61
|
-
none: false
|
62
|
-
prerelease: false
|
63
|
-
type: :development
|
64
55
|
- !ruby/object:Gem::Dependency
|
65
56
|
name: sinatra
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
66
64
|
version_requirements: !ruby/object:Gem::Requirement
|
67
65
|
requirements:
|
68
66
|
- - ">="
|
69
67
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
71
|
-
|
72
|
-
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: slim
|
73
71
|
requirement: !ruby/object:Gem::Requirement
|
74
72
|
requirements:
|
75
73
|
- - ">="
|
76
74
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
78
|
-
MA==
|
79
|
-
none: false
|
80
|
-
prerelease: false
|
75
|
+
version: '0'
|
81
76
|
type: :development
|
82
|
-
|
83
|
-
name: slim
|
77
|
+
prerelease: false
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
85
79
|
requirements:
|
86
80
|
- - ">="
|
87
81
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
89
|
-
|
90
|
-
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rack-test
|
91
85
|
requirement: !ruby/object:Gem::Requirement
|
92
86
|
requirements:
|
93
|
-
- - "
|
87
|
+
- - "~>"
|
94
88
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
96
|
-
MA==
|
97
|
-
none: false
|
98
|
-
prerelease: false
|
89
|
+
version: 0.5.4
|
99
90
|
type: :development
|
100
|
-
|
101
|
-
name: rack-test
|
91
|
+
prerelease: false
|
102
92
|
version_requirements: !ruby/object:Gem::Requirement
|
103
93
|
requirements:
|
104
94
|
- - "~>"
|
105
95
|
- !ruby/object:Gem::Version
|
106
96
|
version: 0.5.4
|
107
|
-
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: tilt
|
108
99
|
requirement: !ruby/object:Gem::Requirement
|
109
100
|
requirements:
|
110
101
|
- - "~>"
|
111
102
|
- !ruby/object:Gem::Version
|
112
|
-
version:
|
113
|
-
none: false
|
114
|
-
prerelease: false
|
103
|
+
version: '1.4'
|
115
104
|
type: :development
|
116
|
-
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.4'
|
111
|
+
description: A sidekiq plugin for specifying the queues a worker pulls from with wildcards,
|
112
|
+
negations, or dynamic look up from redis
|
117
113
|
email:
|
118
114
|
- matt@conwaysplace.com
|
119
115
|
executables: []
|
@@ -135,7 +131,7 @@ files:
|
|
135
131
|
- lib/sidekiq/dynamic_queues/attributes.rb
|
136
132
|
- lib/sidekiq/dynamic_queues/fetch.rb
|
137
133
|
- lib/sidekiq/dynamic_queues/server.rb
|
138
|
-
- lib/sidekiq/dynamic_queues/server/views/dynamicqueue.
|
134
|
+
- lib/sidekiq/dynamic_queues/server/views/dynamicqueue.erb
|
139
135
|
- lib/sidekiq/dynamic_queues/version.rb
|
140
136
|
- sidekiq-dynamic-queues.gemspec
|
141
137
|
- spec/queues_spec.rb
|
@@ -144,7 +140,8 @@ files:
|
|
144
140
|
- spec/spec_helper.rb
|
145
141
|
homepage: ''
|
146
142
|
licenses: []
|
147
|
-
|
143
|
+
metadata: {}
|
144
|
+
post_install_message:
|
148
145
|
rdoc_options: []
|
149
146
|
require_paths:
|
150
147
|
- lib
|
@@ -152,25 +149,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
149
|
requirements:
|
153
150
|
- - ">="
|
154
151
|
- !ruby/object:Gem::Version
|
155
|
-
version:
|
156
|
-
MA==
|
157
|
-
none: false
|
152
|
+
version: '0'
|
158
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
154
|
requirements:
|
160
155
|
- - ">="
|
161
156
|
- !ruby/object:Gem::Version
|
162
|
-
version:
|
163
|
-
MA==
|
164
|
-
none: false
|
157
|
+
version: '0'
|
165
158
|
requirements: []
|
166
159
|
rubyforge_project: sidekiq-dynamic-queues
|
167
|
-
rubygems_version:
|
168
|
-
signing_key:
|
169
|
-
specification_version:
|
170
|
-
summary: A sidekiq plugin for specifying the queues a worker pulls from with wildcards,
|
160
|
+
rubygems_version: 2.2.2
|
161
|
+
signing_key:
|
162
|
+
specification_version: 4
|
163
|
+
summary: A sidekiq plugin for specifying the queues a worker pulls from with wildcards,
|
164
|
+
negations, or dynamic look up from redis
|
171
165
|
test_files:
|
172
166
|
- spec/queues_spec.rb
|
173
167
|
- spec/redis-test.conf
|
174
168
|
- spec/server_spec.rb
|
175
169
|
- spec/spec_helper.rb
|
176
|
-
has_rdoc:
|
@@ -1,63 +0,0 @@
|
|
1
|
-
h3 Dynamic Queues
|
2
|
-
|
3
|
-
p class="intro"
|
4
|
-
| The list below shows the dynamic queues currently defined. When you start
|
5
|
-
a worker with a dynamic queue key (@key_name), that key is looked up from
|
6
|
-
the list below to determine the actual queues the worker should pull from.
|
7
|
-
Wildcards (*) and negation (leading !) can be used to select the queues the
|
8
|
-
worker should process. There is always a fallback key - @default, which
|
9
|
-
workers will use if the key for that worker is empty. If both the key and
|
10
|
-
the fallback are empty, the worker defaults to processing '*'
|
11
|
-
|
12
|
-
form action="#{root_path}dynamicqueue" method="POST"
|
13
|
-
|
14
|
-
table class="queues table table-hover table-bordered table-striped table-white"
|
15
|
-
thead
|
16
|
-
th Name
|
17
|
-
th Value
|
18
|
-
th Expanded
|
19
|
-
th
|
20
|
-
- @queues.each_with_index do |data, i|
|
21
|
-
tr class="line"
|
22
|
-
td
|
23
|
-
input type="text" id="input-#{{i}}-name" name="queues[][name]" value="#{{data['name']}}"
|
24
|
-
td
|
25
|
-
input type="text" id="input-#{{i}}-value" name="queues[][value]" value="#{{data['value']}}"
|
26
|
-
td class="expanded"
|
27
|
-
= data['expanded']
|
28
|
-
td
|
29
|
-
a href="#remove" class="remove" Remove
|
30
|
-
|
31
|
-
a href="#add" class="add" Add
|
32
|
-
|
33
|
-
input type="submit" value="Save"
|
34
|
-
|
35
|
-
javascript:
|
36
|
-
function markDirty()
|
37
|
-
{
|
38
|
-
$("input[type=submit]").css({border:"3px orange solid"});
|
39
|
-
}
|
40
|
-
|
41
|
-
jQuery(function($) {
|
42
|
-
|
43
|
-
$("input").live("keypress", markDirty);
|
44
|
-
|
45
|
-
$("a.add").live("click", function(e) {
|
46
|
-
e.preventDefault();
|
47
|
-
var $table = $("table.queues");
|
48
|
-
var $newRow = $table.find("tr.line:first").clone();
|
49
|
-
$newRow.find("input[type=text]").attr("value", "");
|
50
|
-
$newRow.find("td.expanded").html("")
|
51
|
-
$newRow.appendTo($table);
|
52
|
-
markDirty();
|
53
|
-
});
|
54
|
-
|
55
|
-
$("a.remove").live("click", function(e) {
|
56
|
-
e.preventDefault();
|
57
|
-
var $link = $(this);
|
58
|
-
$link.parents("tr").remove();
|
59
|
-
markDirty();
|
60
|
-
});
|
61
|
-
|
62
|
-
|
63
|
-
});
|