sidekiq-client-cli 0.1.3 → 0.1.4
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 +8 -8
- data/README.md +8 -0
- data/lib/sidekiq_client_cli.rb +14 -3
- data/lib/sidekiq_client_cli/version.rb +1 -1
- data/spec/sidekiq_client_cli_spec.rb +121 -20
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YmU4MTg4ZWJlZjFiOTU3NjVkNWEyYWYyYWZhMjY1ZDJmMThiZGMyOA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzZiMTBlODYyZGEyMTExNzJiMDBiNjU4YmQwNWFkY2Y0ODdmMGMxMA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWViYTdhZGM4ODNjZDE4ZWYxNTY0Yjk5ZjM1ZDM3YzJiMTBkNWU3ZDkxODk5
|
10
|
+
YmVkNGVjNjZmNzk2ZDhmMzkyMGVjOWVmZmI4MTljYzRlNTAxYjY3MjI1ODU5
|
11
|
+
OWZhOWZlMjFlYWM4NDFiMWZiNGE4NDQ1Yjc4MDliNDMzODVlMzk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODk5Y2Q5OGFjYmFmODM2Yzk2M2Q1NmYxYTRjMjI1MDFlYWQ0OTczOWFmOTE4
|
14
|
+
NTM4NDVhMmRiNGE4ZGEwZWU1MjMwM2M4OWU3ZDNiMDk0MjU3Njk0YzMzZjc3
|
15
|
+
ZDJjZTQwOTgyNzViMzE0MDllMzQ4NzNhMDU1Y2E0Y2U4N2E1ZDQ=
|
data/README.md
CHANGED
@@ -37,6 +37,14 @@ You can also specify a specific queue to push the jobs to :
|
|
37
37
|
|
38
38
|
$ sidekiq-client -q my_queue push MyWorker OtherWorker
|
39
39
|
|
40
|
+
You can specify that the job should not be retried, if it fails :
|
41
|
+
|
42
|
+
$ sidekiq-client -r false push MyWorker OtherWorker
|
43
|
+
|
44
|
+
You can also specify the number of times a job should be retried, if it fails :
|
45
|
+
|
46
|
+
$ sidekiq-client -r 5 push MyWorker OtherWorker
|
47
|
+
|
40
48
|
For help :
|
41
49
|
|
42
50
|
$ sidekiq-client --help
|
data/lib/sidekiq_client_cli.rb
CHANGED
@@ -12,6 +12,7 @@ class SidekiqClientCLI
|
|
12
12
|
@settings = CLI.new do
|
13
13
|
option :config_path, :short => :c, :default => DEFAULT_CONFIG_PATH, :description => "Sidekiq client config file path"
|
14
14
|
option :queue, :short => :q, :description => "Queue to place job on"
|
15
|
+
option :retry, :short => :r, :cast => lambda { |r| SidekiqClientCLI.cast_retry_option(r) }, :description => "Retry option for job"
|
15
16
|
argument :command, :description => "'push' to push a job to the queue"
|
16
17
|
arguments :command_args, :required => false, :description => "command arguments"
|
17
18
|
end.parse! do |settings|
|
@@ -23,12 +24,19 @@ class SidekiqClientCLI
|
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
27
|
+
def self.cast_retry_option(retry_option)
|
28
|
+
return true if !!retry_option.match(/^(true|t|yes|y)$/i)
|
29
|
+
return false if !!retry_option.match(/^(false|f|no|n|0)$/i)
|
30
|
+
return retry_option.to_i if !!retry_option.match(/^\d+$/)
|
31
|
+
end
|
32
|
+
|
26
33
|
def run
|
27
34
|
# load the config file
|
28
35
|
load settings.config_path if File.exists?(settings.config_path)
|
29
36
|
|
30
|
-
# set queue if not given
|
37
|
+
# set queue or retry if they are not given
|
31
38
|
settings.queue ||= Sidekiq.default_worker_options['queue']
|
39
|
+
settings.retry ||= Sidekiq.default_worker_options['retry']
|
32
40
|
|
33
41
|
self.send settings.command.to_sym
|
34
42
|
end
|
@@ -36,8 +44,11 @@ class SidekiqClientCLI
|
|
36
44
|
def push
|
37
45
|
settings.command_args.each do |arg|
|
38
46
|
begin
|
39
|
-
jid = Sidekiq::Client.push('class' => arg,
|
40
|
-
|
47
|
+
jid = Sidekiq::Client.push({ 'class' => arg,
|
48
|
+
'queue' => settings.queue,
|
49
|
+
'args' => [],
|
50
|
+
'retry' => settings.retry })
|
51
|
+
p "Posted #{arg} to queue '#{settings.queue}', Job ID : #{jid}, Retry : #{settings.retry}"
|
41
52
|
rescue StandardError => ex
|
42
53
|
p "Failed to push to queue : #{ex.message}"
|
43
54
|
end
|
@@ -2,6 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe SidekiqClientCLI do
|
4
4
|
let(:default_queue) { Sidekiq.default_worker_options['queue'] }
|
5
|
+
let(:default_retry_option) { Sidekiq.default_worker_options['retry'] }
|
5
6
|
|
6
7
|
before(:each) { @client = SidekiqClientCLI.new }
|
7
8
|
|
@@ -47,6 +48,7 @@ describe SidekiqClientCLI do
|
|
47
48
|
@client.settings.command_args.should eq worker_klasses
|
48
49
|
@client.settings.config_path.should eq SidekiqClientCLI::DEFAULT_CONFIG_PATH
|
49
50
|
@client.settings.queue.should eq nil
|
51
|
+
@client.settings.retry.should eq nil
|
50
52
|
end
|
51
53
|
|
52
54
|
it "parses push with a configuration file" do
|
@@ -69,6 +71,26 @@ describe SidekiqClientCLI do
|
|
69
71
|
@client.settings.queue.should eq "my_queue"
|
70
72
|
end
|
71
73
|
|
74
|
+
it 'parses push with a boolean retry' do
|
75
|
+
worker_klasses = %w{FirstWorker SecondWorker}
|
76
|
+
ARGV = %w{ -r false push }.concat(worker_klasses)
|
77
|
+
@client.parse
|
78
|
+
@client.settings.command.should eq "push"
|
79
|
+
@client.settings.command_args.should eq worker_klasses
|
80
|
+
@client.settings.config_path.should eq SidekiqClientCLI::DEFAULT_CONFIG_PATH
|
81
|
+
@client.settings.retry.should eq false
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'parses push with an integer retry' do
|
85
|
+
worker_klasses = %w{FirstWorker SecondWorker}
|
86
|
+
ARGV = %w{ -r 42 push }.concat(worker_klasses)
|
87
|
+
@client.parse
|
88
|
+
@client.settings.command.should eq "push"
|
89
|
+
@client.settings.command_args.should eq worker_klasses
|
90
|
+
@client.settings.config_path.should eq SidekiqClientCLI::DEFAULT_CONFIG_PATH
|
91
|
+
@client.settings.retry.should eq 42
|
92
|
+
end
|
93
|
+
|
72
94
|
end
|
73
95
|
|
74
96
|
describe "run" do
|
@@ -78,6 +100,7 @@ describe SidekiqClientCLI do
|
|
78
100
|
@client.settings.stub(:config_path).and_return(config_path)
|
79
101
|
@client.settings.stub(:command).and_return("mycommand")
|
80
102
|
@client.settings.stub(:queue).and_return(default_queue)
|
103
|
+
@client.settings.stub(:retry).and_return(default_retry_option)
|
81
104
|
@client.should_receive(:mycommand)
|
82
105
|
|
83
106
|
File.should_receive(:exists?).with(config_path).and_return true
|
@@ -86,12 +109,13 @@ describe SidekiqClientCLI do
|
|
86
109
|
@client.run
|
87
110
|
end
|
88
111
|
|
89
|
-
it "
|
112
|
+
it "won't load a non-existant config file and the command is run" do
|
90
113
|
config_path = "sidekiq.conf"
|
91
114
|
settings = double("settings")
|
92
115
|
settings.stub(:config_path).and_return(config_path)
|
93
116
|
settings.stub(:command).and_return("mycommand")
|
94
117
|
settings.stub(:queue).and_return(default_queue)
|
118
|
+
settings.stub(:retry).and_return(default_retry_option)
|
95
119
|
|
96
120
|
@client.settings = settings
|
97
121
|
@client.should_receive(:mycommand)
|
@@ -105,45 +129,97 @@ describe SidekiqClientCLI do
|
|
105
129
|
end
|
106
130
|
|
107
131
|
describe 'push' do
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
132
|
+
let(:settings) { double("settings") }
|
133
|
+
let(:klass1) { "FirstWorker" }
|
134
|
+
let(:klass2) { "SecondWorker" }
|
135
|
+
|
136
|
+
before(:each) do
|
112
137
|
settings.stub(:command_args).and_return [klass1, klass2]
|
138
|
+
end
|
139
|
+
|
140
|
+
it "pushes the worker classes" do
|
113
141
|
settings.stub(:queue).and_return default_queue
|
142
|
+
settings.stub(:retry).and_return default_retry_option
|
114
143
|
@client.settings = settings
|
115
|
-
|
116
|
-
|
117
|
-
|
144
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass1,
|
145
|
+
'args' => [],
|
146
|
+
'queue' => default_queue,
|
147
|
+
'retry' => default_retry_option)
|
148
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass2,
|
149
|
+
'args' => [],
|
150
|
+
'queue' => default_queue,
|
151
|
+
'retry' => default_retry_option)
|
118
152
|
|
119
153
|
@client.push
|
120
154
|
end
|
121
155
|
|
122
156
|
it "pushes the worker classes to the correct queue" do
|
123
157
|
queue = "Queue"
|
124
|
-
klass1 = "FirstWorker"
|
125
|
-
klass2 = "SecondWorker"
|
126
|
-
settings = double("settings")
|
127
|
-
settings.stub(:command_args).and_return [klass1, klass2]
|
128
158
|
settings.stub(:queue).and_return queue
|
159
|
+
settings.stub(:retry).and_return default_retry_option
|
129
160
|
@client.settings = settings
|
130
161
|
|
131
|
-
Sidekiq::Client.should_receive(:push).with('class' => klass1,
|
132
|
-
|
162
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass1,
|
163
|
+
'args' => [],
|
164
|
+
'queue' => queue,
|
165
|
+
'retry' => default_retry_option)
|
166
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass2,
|
167
|
+
'args' => [],
|
168
|
+
'queue' => queue,
|
169
|
+
'retry' => default_retry_option)
|
170
|
+
|
171
|
+
@client.push
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'pushes the worker classes with retry disabled' do
|
175
|
+
retry_option = false
|
176
|
+
settings.stub(:queue).and_return default_queue
|
177
|
+
settings.stub(:retry).and_return retry_option
|
178
|
+
@client.settings = settings
|
179
|
+
|
180
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass1,
|
181
|
+
'args' => [],
|
182
|
+
'queue' => default_queue,
|
183
|
+
'retry' => retry_option)
|
184
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass2,
|
185
|
+
'args' => [],
|
186
|
+
'queue' => default_queue,
|
187
|
+
'retry' => retry_option)
|
188
|
+
|
189
|
+
@client.push
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'pushes the worker classes with a set retry number' do
|
193
|
+
retry_attempts = 5
|
194
|
+
settings.stub(:queue).and_return default_queue
|
195
|
+
settings.stub(:retry).and_return retry_attempts
|
196
|
+
@client.settings = settings
|
197
|
+
|
198
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass1,
|
199
|
+
'args' => [],
|
200
|
+
'queue' => default_queue,
|
201
|
+
'retry' => retry_attempts)
|
202
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass2,
|
203
|
+
'args' => [],
|
204
|
+
'queue' => default_queue,
|
205
|
+
'retry' => retry_attempts)
|
133
206
|
|
134
207
|
@client.push
|
135
208
|
end
|
136
209
|
|
137
210
|
it "prints and continues if an exception is raised" do
|
138
|
-
klass1 = "FirstWorker"
|
139
|
-
klass2 = "SecondWorker"
|
140
|
-
settings = double("settings")
|
141
|
-
settings.stub(:command_args).and_return [klass1, klass2]
|
142
211
|
settings.stub(:queue).and_return default_queue
|
212
|
+
settings.stub(:retry).and_return default_retry_option
|
143
213
|
@client.settings = settings
|
144
214
|
|
145
|
-
Sidekiq::Client.should_receive(:push).with('class' => klass1,
|
146
|
-
|
215
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass1,
|
216
|
+
'args' => [],
|
217
|
+
'queue' => default_queue,
|
218
|
+
'retry' => default_retry_option).and_raise
|
219
|
+
Sidekiq::Client.should_receive(:push).with('class' => klass2,
|
220
|
+
'args' => [],
|
221
|
+
'queue' => default_queue,
|
222
|
+
'retry' => default_retry_option)
|
147
223
|
|
148
224
|
out = IOHelper.stdout_read do
|
149
225
|
@client.push
|
@@ -153,4 +229,29 @@ describe SidekiqClientCLI do
|
|
153
229
|
|
154
230
|
end
|
155
231
|
|
232
|
+
describe 'cast_retry_option' do
|
233
|
+
subject { SidekiqClientCLI }
|
234
|
+
|
235
|
+
it 'returns false if the string matches false|f|no|n|0' do
|
236
|
+
subject.cast_retry_option('false').should == false
|
237
|
+
subject.cast_retry_option('f').should == false
|
238
|
+
subject.cast_retry_option('no').should == false
|
239
|
+
subject.cast_retry_option('n').should == false
|
240
|
+
subject.cast_retry_option('0').should == false
|
241
|
+
end
|
242
|
+
|
243
|
+
it 'returns true if the string matches true|t|yes|y' do
|
244
|
+
subject.cast_retry_option('true').should == true
|
245
|
+
subject.cast_retry_option('t').should == true
|
246
|
+
subject.cast_retry_option('yes').should == true
|
247
|
+
subject.cast_retry_option('y').should == true
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'returns an integer if the passed string is an integer' do
|
251
|
+
subject.cast_retry_option('1').should == 1
|
252
|
+
subject.cast_retry_option('42').should == 42
|
253
|
+
end
|
254
|
+
|
255
|
+
end
|
256
|
+
|
156
257
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-client-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adil Haritah
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|