sidekiq 4.1.4 → 4.2.10

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq might be problematic. Click here for more details.

Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/.github/issue_template.md +6 -1
  3. data/.travis.yml +9 -9
  4. data/Changes.md +100 -0
  5. data/Ent-Changes.md +51 -1
  6. data/Gemfile +6 -6
  7. data/Pro-Changes.md +69 -0
  8. data/README.md +4 -3
  9. data/Rakefile +5 -2
  10. data/bin/sidekiqload +11 -24
  11. data/lib/generators/sidekiq/templates/worker_test.rb.erb +1 -1
  12. data/lib/sidekiq/api.rb +21 -13
  13. data/lib/sidekiq/cli.rb +19 -5
  14. data/lib/sidekiq/core_ext.rb +13 -0
  15. data/lib/sidekiq/launcher.rb +36 -23
  16. data/lib/sidekiq/manager.rb +3 -2
  17. data/lib/sidekiq/middleware/server/logging.rb +8 -17
  18. data/lib/sidekiq/middleware/server/retry_jobs.rb +1 -1
  19. data/lib/sidekiq/processor.rb +31 -16
  20. data/lib/sidekiq/rails.rb +84 -0
  21. data/lib/sidekiq/redis_connection.rb +8 -1
  22. data/lib/sidekiq/scheduled.rb +1 -0
  23. data/lib/sidekiq/testing.rb +10 -2
  24. data/lib/sidekiq/util.rb +2 -1
  25. data/lib/sidekiq/version.rb +1 -1
  26. data/lib/sidekiq/web/action.rb +93 -0
  27. data/lib/sidekiq/web/application.rb +336 -0
  28. data/lib/sidekiq/{web_helpers.rb → web/helpers.rb} +39 -16
  29. data/lib/sidekiq/web/router.rb +100 -0
  30. data/lib/sidekiq/web.rb +119 -184
  31. data/lib/sidekiq/worker.rb +3 -3
  32. data/lib/sidekiq.rb +7 -7
  33. data/sidekiq.gemspec +11 -5
  34. data/web/assets/images/{status-sd8051fd480.png → status.png} +0 -0
  35. data/web/assets/javascripts/application.js +24 -20
  36. data/web/assets/javascripts/dashboard.js +1 -1
  37. data/web/assets/stylesheets/application.css +26 -1
  38. data/web/assets/stylesheets/bootstrap.css +4 -8
  39. data/web/locales/de.yml +1 -1
  40. data/web/locales/fa.yml +79 -0
  41. data/web/views/_footer.erb +1 -1
  42. data/web/views/_job_info.erb +1 -1
  43. data/web/views/busy.erb +2 -2
  44. data/web/views/dashboard.erb +4 -4
  45. data/web/views/dead.erb +1 -1
  46. data/web/views/layout.erb +3 -4
  47. data/web/views/morgue.erb +14 -10
  48. data/web/views/queue.erb +6 -6
  49. data/web/views/queues.erb +3 -3
  50. data/web/views/retries.erb +12 -10
  51. data/web/views/retry.erb +2 -2
  52. data/web/views/scheduled.erb +2 -2
  53. data/web/views/scheduled_job_info.erb +1 -1
  54. metadata +86 -129
  55. data/test/config.yml +0 -9
  56. data/test/env_based_config.yml +0 -11
  57. data/test/fake_env.rb +0 -1
  58. data/test/fixtures/en.yml +0 -2
  59. data/test/helper.rb +0 -75
  60. data/test/test_actors.rb +0 -138
  61. data/test/test_api.rb +0 -528
  62. data/test/test_cli.rb +0 -406
  63. data/test/test_client.rb +0 -266
  64. data/test/test_exception_handler.rb +0 -56
  65. data/test/test_extensions.rb +0 -127
  66. data/test/test_fetch.rb +0 -50
  67. data/test/test_launcher.rb +0 -85
  68. data/test/test_logging.rb +0 -35
  69. data/test/test_manager.rb +0 -50
  70. data/test/test_middleware.rb +0 -158
  71. data/test/test_processor.rb +0 -201
  72. data/test/test_rails.rb +0 -22
  73. data/test/test_redis_connection.rb +0 -132
  74. data/test/test_retry.rb +0 -326
  75. data/test/test_retry_exhausted.rb +0 -149
  76. data/test/test_scheduled.rb +0 -115
  77. data/test/test_scheduling.rb +0 -50
  78. data/test/test_sidekiq.rb +0 -107
  79. data/test/test_testing.rb +0 -143
  80. data/test/test_testing_fake.rb +0 -357
  81. data/test/test_testing_inline.rb +0 -94
  82. data/test/test_util.rb +0 -13
  83. data/test/test_web.rb +0 -614
  84. data/test/test_web_helpers.rb +0 -54
  85. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  86. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  87. data/web/assets/images/status/active.png +0 -0
  88. data/web/assets/images/status/idle.png +0 -0
  89. data/web/assets/javascripts/locales/README.md +0 -27
  90. data/web/assets/javascripts/locales/jquery.timeago.ar.js +0 -96
  91. data/web/assets/javascripts/locales/jquery.timeago.bg.js +0 -18
  92. data/web/assets/javascripts/locales/jquery.timeago.bs.js +0 -49
  93. data/web/assets/javascripts/locales/jquery.timeago.ca.js +0 -18
  94. data/web/assets/javascripts/locales/jquery.timeago.cs.js +0 -18
  95. data/web/assets/javascripts/locales/jquery.timeago.cy.js +0 -20
  96. data/web/assets/javascripts/locales/jquery.timeago.da.js +0 -18
  97. data/web/assets/javascripts/locales/jquery.timeago.de.js +0 -18
  98. data/web/assets/javascripts/locales/jquery.timeago.el.js +0 -18
  99. data/web/assets/javascripts/locales/jquery.timeago.en-short.js +0 -20
  100. data/web/assets/javascripts/locales/jquery.timeago.en.js +0 -20
  101. data/web/assets/javascripts/locales/jquery.timeago.es.js +0 -18
  102. data/web/assets/javascripts/locales/jquery.timeago.et.js +0 -18
  103. data/web/assets/javascripts/locales/jquery.timeago.fa.js +0 -22
  104. data/web/assets/javascripts/locales/jquery.timeago.fi.js +0 -28
  105. data/web/assets/javascripts/locales/jquery.timeago.fr-short.js +0 -16
  106. data/web/assets/javascripts/locales/jquery.timeago.fr.js +0 -17
  107. data/web/assets/javascripts/locales/jquery.timeago.he.js +0 -18
  108. data/web/assets/javascripts/locales/jquery.timeago.hr.js +0 -49
  109. data/web/assets/javascripts/locales/jquery.timeago.hu.js +0 -18
  110. data/web/assets/javascripts/locales/jquery.timeago.hy.js +0 -18
  111. data/web/assets/javascripts/locales/jquery.timeago.id.js +0 -18
  112. data/web/assets/javascripts/locales/jquery.timeago.it.js +0 -16
  113. data/web/assets/javascripts/locales/jquery.timeago.ja.js +0 -19
  114. data/web/assets/javascripts/locales/jquery.timeago.ko.js +0 -17
  115. data/web/assets/javascripts/locales/jquery.timeago.lt.js +0 -20
  116. data/web/assets/javascripts/locales/jquery.timeago.mk.js +0 -20
  117. data/web/assets/javascripts/locales/jquery.timeago.nb.js +0 -18
  118. data/web/assets/javascripts/locales/jquery.timeago.nl.js +0 -20
  119. data/web/assets/javascripts/locales/jquery.timeago.pl.js +0 -31
  120. data/web/assets/javascripts/locales/jquery.timeago.pt-br.js +0 -16
  121. data/web/assets/javascripts/locales/jquery.timeago.pt.js +0 -16
  122. data/web/assets/javascripts/locales/jquery.timeago.ro.js +0 -18
  123. data/web/assets/javascripts/locales/jquery.timeago.rs.js +0 -49
  124. data/web/assets/javascripts/locales/jquery.timeago.ru.js +0 -34
  125. data/web/assets/javascripts/locales/jquery.timeago.sk.js +0 -18
  126. data/web/assets/javascripts/locales/jquery.timeago.sl.js +0 -44
  127. data/web/assets/javascripts/locales/jquery.timeago.sv.js +0 -18
  128. data/web/assets/javascripts/locales/jquery.timeago.th.js +0 -20
  129. data/web/assets/javascripts/locales/jquery.timeago.tr.js +0 -16
  130. data/web/assets/javascripts/locales/jquery.timeago.uk.js +0 -34
  131. data/web/assets/javascripts/locales/jquery.timeago.uz.js +0 -19
  132. data/web/assets/javascripts/locales/jquery.timeago.zh-cn.js +0 -20
  133. data/web/assets/javascripts/locales/jquery.timeago.zh-tw.js +0 -20
  134. data/web/views/_poll_js.erb +0 -5
@@ -1,357 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'helper'
3
-
4
- require 'active_record'
5
- require 'action_mailer'
6
- require 'sidekiq/rails'
7
- require 'sidekiq/extensions/action_mailer'
8
- require 'sidekiq/extensions/active_record'
9
-
10
- Sidekiq.hook_rails!
11
-
12
- class TestTesting < Sidekiq::Test
13
- describe 'sidekiq testing' do
14
- class PerformError < RuntimeError; end
15
-
16
- class DirectWorker
17
- include Sidekiq::Worker
18
- def perform(a, b)
19
- a + b
20
- end
21
- end
22
-
23
- class EnqueuedWorker
24
- include Sidekiq::Worker
25
- def perform(a, b)
26
- a + b
27
- end
28
- end
29
-
30
- class StoredWorker
31
- include Sidekiq::Worker
32
- def perform(error)
33
- raise PerformError if error
34
- end
35
- end
36
-
37
- class FooMailer < ActionMailer::Base
38
- def bar(str)
39
- str
40
- end
41
- end
42
-
43
- class FooModel < ActiveRecord::Base
44
- def bar(str)
45
- str
46
- end
47
- end
48
-
49
- before do
50
- require 'sidekiq/testing'
51
- Sidekiq::Testing.fake!
52
- EnqueuedWorker.jobs.clear
53
- DirectWorker.jobs.clear
54
- end
55
-
56
- after do
57
- Sidekiq::Testing.disable!
58
- Sidekiq::Queues.clear_all
59
- end
60
-
61
- it 'stubs the async call' do
62
- assert_equal 0, DirectWorker.jobs.size
63
- assert DirectWorker.perform_async(1, 2)
64
- assert_equal 1, DirectWorker.jobs.size
65
- assert DirectWorker.perform_in(10, 1, 2)
66
- assert_equal 2, DirectWorker.jobs.size
67
- assert DirectWorker.perform_at(10, 1, 2)
68
- assert_equal 3, DirectWorker.jobs.size
69
- assert_in_delta 10.seconds.from_now.to_f, DirectWorker.jobs.last['at'], 0.01
70
- end
71
-
72
- it 'stubs the delay call on mailers' do
73
- assert_equal 0, Sidekiq::Extensions::DelayedMailer.jobs.size
74
- FooMailer.delay.bar('hello!')
75
- assert_equal 1, Sidekiq::Extensions::DelayedMailer.jobs.size
76
- end
77
-
78
- class Something
79
- def self.foo(x)
80
- end
81
- end
82
-
83
- it 'stubs the delay call on models' do
84
- assert_equal 0, Sidekiq::Extensions::DelayedClass.jobs.size
85
- Something.delay.foo(Date.today)
86
- assert_equal 1, Sidekiq::Extensions::DelayedClass.jobs.size
87
- end
88
-
89
- it 'stubs the enqueue call' do
90
- assert_equal 0, EnqueuedWorker.jobs.size
91
- assert Sidekiq::Client.enqueue(EnqueuedWorker, 1, 2)
92
- assert_equal 1, EnqueuedWorker.jobs.size
93
- end
94
-
95
- it 'stubs the enqueue_to call' do
96
- assert_equal 0, EnqueuedWorker.jobs.size
97
- assert Sidekiq::Client.enqueue_to('someq', EnqueuedWorker, 1, 2)
98
- assert_equal 1, Sidekiq::Queues['someq'].size
99
- end
100
-
101
- it 'executes all stored jobs' do
102
- assert StoredWorker.perform_async(false)
103
- assert StoredWorker.perform_async(true)
104
-
105
- assert_equal 2, StoredWorker.jobs.size
106
- assert_raises PerformError do
107
- StoredWorker.drain
108
- end
109
- assert_equal 0, StoredWorker.jobs.size
110
- end
111
-
112
- class SpecificJidWorker
113
- include Sidekiq::Worker
114
- class_attribute :count
115
- self.count = 0
116
- def perform(worker_jid)
117
- return unless worker_jid == self.jid
118
- self.class.count += 1
119
- end
120
- end
121
-
122
- it 'execute only jobs with assigned JID' do
123
- 4.times do |i|
124
- jid = SpecificJidWorker.perform_async(nil)
125
- if i % 2 == 0
126
- SpecificJidWorker.jobs[-1]["args"] = ["wrong_jid"]
127
- else
128
- SpecificJidWorker.jobs[-1]["args"] = [jid]
129
- end
130
- end
131
-
132
- SpecificJidWorker.perform_one
133
- assert_equal 0, SpecificJidWorker.count
134
-
135
- SpecificJidWorker.perform_one
136
- assert_equal 1, SpecificJidWorker.count
137
-
138
- SpecificJidWorker.drain
139
- assert_equal 2, SpecificJidWorker.count
140
- end
141
-
142
- it 'round trip serializes the job arguments' do
143
- assert StoredWorker.perform_async(:mike)
144
- job = StoredWorker.jobs.first
145
- assert_equal "mike", job['args'].first
146
- StoredWorker.clear
147
- end
148
-
149
- it 'perform_one runs only one job' do
150
- DirectWorker.perform_async(1, 2)
151
- DirectWorker.perform_async(3, 4)
152
- assert_equal 2, DirectWorker.jobs.size
153
-
154
- DirectWorker.perform_one
155
- assert_equal 1, DirectWorker.jobs.size
156
-
157
- DirectWorker.clear
158
- end
159
-
160
- it 'perform_one raise error upon empty queue' do
161
- DirectWorker.clear
162
- assert_raises Sidekiq::EmptyQueueError do
163
- DirectWorker.perform_one
164
- end
165
- end
166
-
167
- class FirstWorker
168
- include Sidekiq::Worker
169
- class_attribute :count
170
- self.count = 0
171
- def perform
172
- self.class.count += 1
173
- end
174
- end
175
-
176
- class SecondWorker
177
- include Sidekiq::Worker
178
- class_attribute :count
179
- self.count = 0
180
- def perform
181
- self.class.count += 1
182
- end
183
- end
184
-
185
- class ThirdWorker
186
- include Sidekiq::Worker
187
- class_attribute :count
188
- def perform
189
- FirstWorker.perform_async
190
- SecondWorker.perform_async
191
- end
192
- end
193
-
194
- it 'clears jobs across all workers' do
195
- Sidekiq::Worker.jobs.clear
196
- FirstWorker.count = 0
197
- SecondWorker.count = 0
198
-
199
- assert_equal 0, FirstWorker.jobs.size
200
- assert_equal 0, SecondWorker.jobs.size
201
-
202
- FirstWorker.perform_async
203
- SecondWorker.perform_async
204
-
205
- assert_equal 1, FirstWorker.jobs.size
206
- assert_equal 1, SecondWorker.jobs.size
207
-
208
- Sidekiq::Worker.clear_all
209
-
210
- assert_equal 0, FirstWorker.jobs.size
211
- assert_equal 0, SecondWorker.jobs.size
212
-
213
- assert_equal 0, FirstWorker.count
214
- assert_equal 0, SecondWorker.count
215
- end
216
-
217
- it 'drains jobs across all workers' do
218
- Sidekiq::Worker.jobs.clear
219
- FirstWorker.count = 0
220
- SecondWorker.count = 0
221
-
222
- assert_equal 0, FirstWorker.jobs.size
223
- assert_equal 0, SecondWorker.jobs.size
224
-
225
- assert_equal 0, FirstWorker.count
226
- assert_equal 0, SecondWorker.count
227
-
228
- FirstWorker.perform_async
229
- SecondWorker.perform_async
230
-
231
- assert_equal 1, FirstWorker.jobs.size
232
- assert_equal 1, SecondWorker.jobs.size
233
-
234
- Sidekiq::Worker.drain_all
235
-
236
- assert_equal 0, FirstWorker.jobs.size
237
- assert_equal 0, SecondWorker.jobs.size
238
-
239
- assert_equal 1, FirstWorker.count
240
- assert_equal 1, SecondWorker.count
241
- end
242
-
243
- it 'drains jobs across all workers even when workers create new jobs' do
244
- Sidekiq::Worker.jobs.clear
245
- FirstWorker.count = 0
246
- SecondWorker.count = 0
247
-
248
- assert_equal 0, ThirdWorker.jobs.size
249
-
250
- assert_equal 0, FirstWorker.count
251
- assert_equal 0, SecondWorker.count
252
-
253
- ThirdWorker.perform_async
254
-
255
- assert_equal 1, ThirdWorker.jobs.size
256
-
257
- Sidekiq::Worker.drain_all
258
-
259
- assert_equal 0, ThirdWorker.jobs.size
260
-
261
- assert_equal 1, FirstWorker.count
262
- assert_equal 1, SecondWorker.count
263
- end
264
-
265
- it 'drains jobs of workers with symbolized queue names' do
266
- Sidekiq::Worker.jobs.clear
267
-
268
- AltQueueWorker.perform_async(5,6)
269
- assert_equal 1, AltQueueWorker.jobs.size
270
-
271
- Sidekiq::Worker.drain_all
272
- assert_equal 0, AltQueueWorker.jobs.size
273
- end
274
-
275
- it 'can execute a job' do
276
- DirectWorker.execute_job(DirectWorker.new, [2, 3])
277
- end
278
- end
279
-
280
- describe 'queue testing' do
281
- before do
282
- require 'sidekiq/testing'
283
- Sidekiq::Testing.fake!
284
- end
285
-
286
- after do
287
- Sidekiq::Testing.disable!
288
- Sidekiq::Queues.clear_all
289
- end
290
-
291
- class QueueWorker
292
- include Sidekiq::Worker
293
- def perform(a, b)
294
- a + b
295
- end
296
- end
297
-
298
- class AltQueueWorker
299
- include Sidekiq::Worker
300
- sidekiq_options queue: :alt
301
- def perform(a, b)
302
- a + b
303
- end
304
- end
305
-
306
- it 'finds enqueued jobs' do
307
- assert_equal 0, Sidekiq::Queues["default"].size
308
-
309
- QueueWorker.perform_async(1, 2)
310
- QueueWorker.perform_async(1, 2)
311
- AltQueueWorker.perform_async(1, 2)
312
-
313
- assert_equal 2, Sidekiq::Queues["default"].size
314
- assert_equal [1, 2], Sidekiq::Queues["default"].first["args"]
315
-
316
- assert_equal 1, Sidekiq::Queues["alt"].size
317
- end
318
-
319
- it 'clears out all queues' do
320
- assert_equal 0, Sidekiq::Queues["default"].size
321
-
322
- QueueWorker.perform_async(1, 2)
323
- QueueWorker.perform_async(1, 2)
324
- AltQueueWorker.perform_async(1, 2)
325
-
326
- Sidekiq::Queues.clear_all
327
-
328
- assert_equal 0, Sidekiq::Queues["default"].size
329
- assert_equal 0, QueueWorker.jobs.size
330
- assert_equal 0, Sidekiq::Queues["alt"].size
331
- assert_equal 0, AltQueueWorker.jobs.size
332
- end
333
-
334
- it 'finds jobs enqueued by client' do
335
- Sidekiq::Client.push(
336
- 'class' => 'NonExistentWorker',
337
- 'queue' => 'missing',
338
- 'args' => [1]
339
- )
340
-
341
- assert_equal 1, Sidekiq::Queues["missing"].size
342
- end
343
-
344
- it 'respects underlying array changes' do
345
- # Rspec expect change() syntax saves a reference to
346
- # an underlying array. When the array containing jobs is
347
- # derived, Rspec test using `change(QueueWorker.jobs, :size).by(1)`
348
- # won't pass. This attempts to recreate that scenario
349
- # by saving a reference to the jobs array and ensuring
350
- # it changes properly on enqueueing
351
- jobs = QueueWorker.jobs
352
- assert_equal 0, jobs.size
353
- QueueWorker.perform_async(1, 2)
354
- assert_equal 1, jobs.size
355
- end
356
- end
357
- end
@@ -1,94 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'helper'
3
-
4
- require 'active_record'
5
- require 'action_mailer'
6
- require 'sidekiq/rails'
7
- require 'sidekiq/extensions/action_mailer'
8
- require 'sidekiq/extensions/active_record'
9
-
10
- Sidekiq.hook_rails!
11
-
12
- class TestInline < Sidekiq::Test
13
- describe 'sidekiq inline testing' do
14
- class InlineError < RuntimeError; end
15
- class ParameterIsNotString < RuntimeError; end
16
-
17
- class InlineWorker
18
- include Sidekiq::Worker
19
- def perform(pass)
20
- raise ArgumentError, "no jid" unless jid
21
- raise InlineError unless pass
22
- end
23
- end
24
-
25
- class InlineWorkerWithTimeParam
26
- include Sidekiq::Worker
27
- def perform(time)
28
- raise ParameterIsNotString unless time.is_a?(String) || time.is_a?(Numeric)
29
- end
30
- end
31
-
32
- class InlineFooMailer < ActionMailer::Base
33
- def bar(str)
34
- raise InlineError
35
- end
36
- end
37
-
38
- class InlineFooModel < ActiveRecord::Base
39
- def self.bar(str)
40
- raise InlineError
41
- end
42
- end
43
-
44
- before do
45
- require 'sidekiq/testing/inline'
46
- Sidekiq::Testing.inline!
47
- end
48
-
49
- after do
50
- Sidekiq::Testing.disable!
51
- end
52
-
53
- it 'stubs the async call when in testing mode' do
54
- assert InlineWorker.perform_async(true)
55
-
56
- assert_raises InlineError do
57
- InlineWorker.perform_async(false)
58
- end
59
- end
60
-
61
- it 'stubs the delay call on mailers' do
62
- assert_raises InlineError do
63
- InlineFooMailer.delay.bar('three')
64
- end
65
- end
66
-
67
- it 'stubs the delay call on models' do
68
- assert_raises InlineError do
69
- InlineFooModel.delay.bar('three')
70
- end
71
- end
72
-
73
- it 'stubs the enqueue call when in testing mode' do
74
- assert Sidekiq::Client.enqueue(InlineWorker, true)
75
-
76
- assert_raises InlineError do
77
- Sidekiq::Client.enqueue(InlineWorker, false)
78
- end
79
- end
80
-
81
- it 'stubs the push_bulk call when in testing mode' do
82
- assert Sidekiq::Client.push_bulk({'class' => InlineWorker, 'args' => [[true], [true]]})
83
-
84
- assert_raises InlineError do
85
- Sidekiq::Client.push_bulk({'class' => InlineWorker, 'args' => [[true], [false]]})
86
- end
87
- end
88
-
89
- it 'should relay parameters through json' do
90
- assert Sidekiq::Client.enqueue(InlineWorkerWithTimeParam, Time.now.to_f)
91
- end
92
-
93
- end
94
- end
data/test/test_util.rb DELETED
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'helper'
3
-
4
- class TestUtil < Sidekiq::Test
5
-
6
- class Helpers
7
- include Sidekiq::Util
8
- end
9
-
10
- def test_nothing_atm
11
- assert true
12
- end
13
- end