sidekiq-undertaker 1.3.0 → 1.4.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 +4 -4
- data/.github/workflows/ruby-build.yml +30 -2
- data/.rubocop.yml +4 -0
- data/.rubocop_codeclimate.yml +9 -0
- data/CHANGELOG.md +11 -0
- data/README.md +2 -1
- data/lib/sidekiq/undertaker/dead_job.rb +10 -2
- data/lib/sidekiq/undertaker/job_distributor.rb +4 -0
- data/lib/sidekiq/undertaker/job_filter.rb +7 -2
- data/lib/sidekiq/undertaker/version.rb +1 -1
- data/lib/sidekiq/undertaker/web_extension/api_helpers.rb +42 -21
- data/lib/sidekiq/undertaker/web_extension.rb +11 -9
- data/sidekiq-undertaker.gemspec +4 -5
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_filter_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +3 -3
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +24 -24
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_polled/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +24 -24
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classerror_classbucket_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +231 -0
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classerror_classbucket_page_is_polled/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +231 -0
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_all_failures_and_errors/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +8 -7
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_job_class_error_and_specific_error_message/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +284 -0
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_job_class_error_and_specific_error_message/with_pagination/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +1310 -0
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_specific_job_class_and_a_specific_error/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +6 -5
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_specific_job_class_and_a_specific_error/with_pagination/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +54 -53
- data/spec/sidekiq/undertaker/dead_jobs_spec.rb +7 -4
- data/spec/sidekiq/undertaker/job_distributor_spec.rb +38 -16
- data/spec/sidekiq/undertaker/job_filter_spec.rb +26 -9
- data/spec/sidekiq/undertaker/web_extension_spec.rb +60 -17
- data/spec/spec_helper.rb +4 -0
- data/web/views/filter.erb +1 -1
- data/web/views/filter_job_class.erb +8 -8
- data/web/views/filter_job_class_error_class.erb +36 -0
- data/web/views/morgue.erb +4 -3
- metadata +21 -29
- data/.travis.yml +0 -51
@@ -160,6 +160,7 @@
|
|
160
160
|
<b>2</b> dead jobs
|
161
161
|
of <b>HardWorker</b> class
|
162
162
|
with <b>RuntimeError</b> exception
|
163
|
+
|
163
164
|
in <b>1_hour</b> bucket
|
164
165
|
</h3>
|
165
166
|
</div>
|
@@ -207,7 +208,7 @@
|
|
207
208
|
<div class="args">"asdf", 1234</div>
|
208
209
|
</td>
|
209
210
|
<td>
|
210
|
-
<div>RuntimeError:
|
211
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
211
212
|
</td>
|
212
213
|
</tr>
|
213
214
|
|
@@ -228,7 +229,7 @@
|
|
228
229
|
<div class="args">"asdf", 1234</div>
|
229
230
|
</td>
|
230
231
|
<td>
|
231
|
-
<div>RuntimeError:
|
232
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
232
233
|
</td>
|
233
234
|
</tr>
|
234
235
|
|
@@ -238,17 +239,17 @@
|
|
238
239
|
<input class="btn btn-danger btn-xs pull-left" type="submit" name="delete" value="Bury" />
|
239
240
|
</form>
|
240
241
|
|
241
|
-
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour/delete" method="post">
|
242
|
+
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/YWxs/1_hour/delete" method="post">
|
242
243
|
<input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
|
243
244
|
<input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="Bury All" data-confirm="Are you sure?" />
|
244
245
|
</form>
|
245
246
|
|
246
|
-
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour/export" method="post">
|
247
|
+
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/YWxs/1_hour/export" method="post">
|
247
248
|
<input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
|
248
249
|
<input class="btn btn-secondary btn-xs pull-right" type="submit" name="export" value="Export All" />
|
249
250
|
</form>
|
250
251
|
|
251
|
-
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour/retry" method="post">
|
252
|
+
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/YWxs/1_hour/retry" method="post">
|
252
253
|
<input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
|
253
254
|
<input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="Revive All" data-confirm="Are you sure?" />
|
254
255
|
</form>
|
@@ -160,6 +160,7 @@
|
|
160
160
|
<b>52</b> dead jobs
|
161
161
|
of <b>HardWorker</b> class
|
162
162
|
with <b>RuntimeError</b> exception
|
163
|
+
|
163
164
|
in <b>1_hour</b> bucket
|
164
165
|
</h3>
|
165
166
|
</div>
|
@@ -225,7 +226,7 @@
|
|
225
226
|
<div class="args">"asdf", 1234</div>
|
226
227
|
</td>
|
227
228
|
<td>
|
228
|
-
<div>RuntimeError:
|
229
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
229
230
|
</td>
|
230
231
|
</tr>
|
231
232
|
|
@@ -246,7 +247,7 @@
|
|
246
247
|
<div class="args">"asdf", 1234</div>
|
247
248
|
</td>
|
248
249
|
<td>
|
249
|
-
<div>RuntimeError:
|
250
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
250
251
|
</td>
|
251
252
|
</tr>
|
252
253
|
|
@@ -267,7 +268,7 @@
|
|
267
268
|
<div class="args">"asdf", 1234</div>
|
268
269
|
</td>
|
269
270
|
<td>
|
270
|
-
<div>RuntimeError:
|
271
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
271
272
|
</td>
|
272
273
|
</tr>
|
273
274
|
|
@@ -288,7 +289,7 @@
|
|
288
289
|
<div class="args">"asdf", 1234</div>
|
289
290
|
</td>
|
290
291
|
<td>
|
291
|
-
<div>RuntimeError:
|
292
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
292
293
|
</td>
|
293
294
|
</tr>
|
294
295
|
|
@@ -309,7 +310,7 @@
|
|
309
310
|
<div class="args">"asdf", 1234</div>
|
310
311
|
</td>
|
311
312
|
<td>
|
312
|
-
<div>RuntimeError:
|
313
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
313
314
|
</td>
|
314
315
|
</tr>
|
315
316
|
|
@@ -330,7 +331,7 @@
|
|
330
331
|
<div class="args">"asdf", 1234</div>
|
331
332
|
</td>
|
332
333
|
<td>
|
333
|
-
<div>RuntimeError:
|
334
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
334
335
|
</td>
|
335
336
|
</tr>
|
336
337
|
|
@@ -351,7 +352,7 @@
|
|
351
352
|
<div class="args">"asdf", 1234</div>
|
352
353
|
</td>
|
353
354
|
<td>
|
354
|
-
<div>RuntimeError:
|
355
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
355
356
|
</td>
|
356
357
|
</tr>
|
357
358
|
|
@@ -372,7 +373,7 @@
|
|
372
373
|
<div class="args">"asdf", 1234</div>
|
373
374
|
</td>
|
374
375
|
<td>
|
375
|
-
<div>RuntimeError:
|
376
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
376
377
|
</td>
|
377
378
|
</tr>
|
378
379
|
|
@@ -393,7 +394,7 @@
|
|
393
394
|
<div class="args">"asdf", 1234</div>
|
394
395
|
</td>
|
395
396
|
<td>
|
396
|
-
<div>RuntimeError:
|
397
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
397
398
|
</td>
|
398
399
|
</tr>
|
399
400
|
|
@@ -414,7 +415,7 @@
|
|
414
415
|
<div class="args">"asdf", 1234</div>
|
415
416
|
</td>
|
416
417
|
<td>
|
417
|
-
<div>RuntimeError:
|
418
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
418
419
|
</td>
|
419
420
|
</tr>
|
420
421
|
|
@@ -435,7 +436,7 @@
|
|
435
436
|
<div class="args">"asdf", 1234</div>
|
436
437
|
</td>
|
437
438
|
<td>
|
438
|
-
<div>RuntimeError:
|
439
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
439
440
|
</td>
|
440
441
|
</tr>
|
441
442
|
|
@@ -456,7 +457,7 @@
|
|
456
457
|
<div class="args">"asdf", 1234</div>
|
457
458
|
</td>
|
458
459
|
<td>
|
459
|
-
<div>RuntimeError:
|
460
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
460
461
|
</td>
|
461
462
|
</tr>
|
462
463
|
|
@@ -477,7 +478,7 @@
|
|
477
478
|
<div class="args">"asdf", 1234</div>
|
478
479
|
</td>
|
479
480
|
<td>
|
480
|
-
<div>RuntimeError:
|
481
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
481
482
|
</td>
|
482
483
|
</tr>
|
483
484
|
|
@@ -498,7 +499,7 @@
|
|
498
499
|
<div class="args">"asdf", 1234</div>
|
499
500
|
</td>
|
500
501
|
<td>
|
501
|
-
<div>RuntimeError:
|
502
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
502
503
|
</td>
|
503
504
|
</tr>
|
504
505
|
|
@@ -519,7 +520,7 @@
|
|
519
520
|
<div class="args">"asdf", 1234</div>
|
520
521
|
</td>
|
521
522
|
<td>
|
522
|
-
<div>RuntimeError:
|
523
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
523
524
|
</td>
|
524
525
|
</tr>
|
525
526
|
|
@@ -540,7 +541,7 @@
|
|
540
541
|
<div class="args">"asdf", 1234</div>
|
541
542
|
</td>
|
542
543
|
<td>
|
543
|
-
<div>RuntimeError:
|
544
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
544
545
|
</td>
|
545
546
|
</tr>
|
546
547
|
|
@@ -561,7 +562,7 @@
|
|
561
562
|
<div class="args">"asdf", 1234</div>
|
562
563
|
</td>
|
563
564
|
<td>
|
564
|
-
<div>RuntimeError:
|
565
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
565
566
|
</td>
|
566
567
|
</tr>
|
567
568
|
|
@@ -582,7 +583,7 @@
|
|
582
583
|
<div class="args">"asdf", 1234</div>
|
583
584
|
</td>
|
584
585
|
<td>
|
585
|
-
<div>RuntimeError:
|
586
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
586
587
|
</td>
|
587
588
|
</tr>
|
588
589
|
|
@@ -603,7 +604,7 @@
|
|
603
604
|
<div class="args">"asdf", 1234</div>
|
604
605
|
</td>
|
605
606
|
<td>
|
606
|
-
<div>RuntimeError:
|
607
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
607
608
|
</td>
|
608
609
|
</tr>
|
609
610
|
|
@@ -624,7 +625,7 @@
|
|
624
625
|
<div class="args">"asdf", 1234</div>
|
625
626
|
</td>
|
626
627
|
<td>
|
627
|
-
<div>RuntimeError:
|
628
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
628
629
|
</td>
|
629
630
|
</tr>
|
630
631
|
|
@@ -645,7 +646,7 @@
|
|
645
646
|
<div class="args">"asdf", 1234</div>
|
646
647
|
</td>
|
647
648
|
<td>
|
648
|
-
<div>RuntimeError:
|
649
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
649
650
|
</td>
|
650
651
|
</tr>
|
651
652
|
|
@@ -666,7 +667,7 @@
|
|
666
667
|
<div class="args">"asdf", 1234</div>
|
667
668
|
</td>
|
668
669
|
<td>
|
669
|
-
<div>RuntimeError:
|
670
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
670
671
|
</td>
|
671
672
|
</tr>
|
672
673
|
|
@@ -687,7 +688,7 @@
|
|
687
688
|
<div class="args">"asdf", 1234</div>
|
688
689
|
</td>
|
689
690
|
<td>
|
690
|
-
<div>RuntimeError:
|
691
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
691
692
|
</td>
|
692
693
|
</tr>
|
693
694
|
|
@@ -708,7 +709,7 @@
|
|
708
709
|
<div class="args">"asdf", 1234</div>
|
709
710
|
</td>
|
710
711
|
<td>
|
711
|
-
<div>RuntimeError:
|
712
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
712
713
|
</td>
|
713
714
|
</tr>
|
714
715
|
|
@@ -729,7 +730,7 @@
|
|
729
730
|
<div class="args">"asdf", 1234</div>
|
730
731
|
</td>
|
731
732
|
<td>
|
732
|
-
<div>RuntimeError:
|
733
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
733
734
|
</td>
|
734
735
|
</tr>
|
735
736
|
|
@@ -750,7 +751,7 @@
|
|
750
751
|
<div class="args">"asdf", 1234</div>
|
751
752
|
</td>
|
752
753
|
<td>
|
753
|
-
<div>RuntimeError:
|
754
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
754
755
|
</td>
|
755
756
|
</tr>
|
756
757
|
|
@@ -771,7 +772,7 @@
|
|
771
772
|
<div class="args">"asdf", 1234</div>
|
772
773
|
</td>
|
773
774
|
<td>
|
774
|
-
<div>RuntimeError:
|
775
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
775
776
|
</td>
|
776
777
|
</tr>
|
777
778
|
|
@@ -792,7 +793,7 @@
|
|
792
793
|
<div class="args">"asdf", 1234</div>
|
793
794
|
</td>
|
794
795
|
<td>
|
795
|
-
<div>RuntimeError:
|
796
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
796
797
|
</td>
|
797
798
|
</tr>
|
798
799
|
|
@@ -813,7 +814,7 @@
|
|
813
814
|
<div class="args">"asdf", 1234</div>
|
814
815
|
</td>
|
815
816
|
<td>
|
816
|
-
<div>RuntimeError:
|
817
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
817
818
|
</td>
|
818
819
|
</tr>
|
819
820
|
|
@@ -834,7 +835,7 @@
|
|
834
835
|
<div class="args">"asdf", 1234</div>
|
835
836
|
</td>
|
836
837
|
<td>
|
837
|
-
<div>RuntimeError:
|
838
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
838
839
|
</td>
|
839
840
|
</tr>
|
840
841
|
|
@@ -855,7 +856,7 @@
|
|
855
856
|
<div class="args">"asdf", 1234</div>
|
856
857
|
</td>
|
857
858
|
<td>
|
858
|
-
<div>RuntimeError:
|
859
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
859
860
|
</td>
|
860
861
|
</tr>
|
861
862
|
|
@@ -876,7 +877,7 @@
|
|
876
877
|
<div class="args">"asdf", 1234</div>
|
877
878
|
</td>
|
878
879
|
<td>
|
879
|
-
<div>RuntimeError:
|
880
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
880
881
|
</td>
|
881
882
|
</tr>
|
882
883
|
|
@@ -897,7 +898,7 @@
|
|
897
898
|
<div class="args">"asdf", 1234</div>
|
898
899
|
</td>
|
899
900
|
<td>
|
900
|
-
<div>RuntimeError:
|
901
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
901
902
|
</td>
|
902
903
|
</tr>
|
903
904
|
|
@@ -918,7 +919,7 @@
|
|
918
919
|
<div class="args">"asdf", 1234</div>
|
919
920
|
</td>
|
920
921
|
<td>
|
921
|
-
<div>RuntimeError:
|
922
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
922
923
|
</td>
|
923
924
|
</tr>
|
924
925
|
|
@@ -939,7 +940,7 @@
|
|
939
940
|
<div class="args">"asdf", 1234</div>
|
940
941
|
</td>
|
941
942
|
<td>
|
942
|
-
<div>RuntimeError:
|
943
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
943
944
|
</td>
|
944
945
|
</tr>
|
945
946
|
|
@@ -960,7 +961,7 @@
|
|
960
961
|
<div class="args">"asdf", 1234</div>
|
961
962
|
</td>
|
962
963
|
<td>
|
963
|
-
<div>RuntimeError:
|
964
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
964
965
|
</td>
|
965
966
|
</tr>
|
966
967
|
|
@@ -981,7 +982,7 @@
|
|
981
982
|
<div class="args">"asdf", 1234</div>
|
982
983
|
</td>
|
983
984
|
<td>
|
984
|
-
<div>RuntimeError:
|
985
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
985
986
|
</td>
|
986
987
|
</tr>
|
987
988
|
|
@@ -1002,7 +1003,7 @@
|
|
1002
1003
|
<div class="args">"asdf", 1234</div>
|
1003
1004
|
</td>
|
1004
1005
|
<td>
|
1005
|
-
<div>RuntimeError:
|
1006
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1006
1007
|
</td>
|
1007
1008
|
</tr>
|
1008
1009
|
|
@@ -1023,7 +1024,7 @@
|
|
1023
1024
|
<div class="args">"asdf", 1234</div>
|
1024
1025
|
</td>
|
1025
1026
|
<td>
|
1026
|
-
<div>RuntimeError:
|
1027
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1027
1028
|
</td>
|
1028
1029
|
</tr>
|
1029
1030
|
|
@@ -1044,7 +1045,7 @@
|
|
1044
1045
|
<div class="args">"asdf", 1234</div>
|
1045
1046
|
</td>
|
1046
1047
|
<td>
|
1047
|
-
<div>RuntimeError:
|
1048
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1048
1049
|
</td>
|
1049
1050
|
</tr>
|
1050
1051
|
|
@@ -1065,7 +1066,7 @@
|
|
1065
1066
|
<div class="args">"asdf", 1234</div>
|
1066
1067
|
</td>
|
1067
1068
|
<td>
|
1068
|
-
<div>RuntimeError:
|
1069
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1069
1070
|
</td>
|
1070
1071
|
</tr>
|
1071
1072
|
|
@@ -1086,7 +1087,7 @@
|
|
1086
1087
|
<div class="args">"asdf", 1234</div>
|
1087
1088
|
</td>
|
1088
1089
|
<td>
|
1089
|
-
<div>RuntimeError:
|
1090
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1090
1091
|
</td>
|
1091
1092
|
</tr>
|
1092
1093
|
|
@@ -1107,7 +1108,7 @@
|
|
1107
1108
|
<div class="args">"asdf", 1234</div>
|
1108
1109
|
</td>
|
1109
1110
|
<td>
|
1110
|
-
<div>RuntimeError:
|
1111
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1111
1112
|
</td>
|
1112
1113
|
</tr>
|
1113
1114
|
|
@@ -1128,7 +1129,7 @@
|
|
1128
1129
|
<div class="args">"asdf", 1234</div>
|
1129
1130
|
</td>
|
1130
1131
|
<td>
|
1131
|
-
<div>RuntimeError:
|
1132
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1132
1133
|
</td>
|
1133
1134
|
</tr>
|
1134
1135
|
|
@@ -1149,7 +1150,7 @@
|
|
1149
1150
|
<div class="args">"asdf", 1234</div>
|
1150
1151
|
</td>
|
1151
1152
|
<td>
|
1152
|
-
<div>RuntimeError:
|
1153
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1153
1154
|
</td>
|
1154
1155
|
</tr>
|
1155
1156
|
|
@@ -1170,7 +1171,7 @@
|
|
1170
1171
|
<div class="args">"asdf", 1234</div>
|
1171
1172
|
</td>
|
1172
1173
|
<td>
|
1173
|
-
<div>RuntimeError:
|
1174
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1174
1175
|
</td>
|
1175
1176
|
</tr>
|
1176
1177
|
|
@@ -1191,7 +1192,7 @@
|
|
1191
1192
|
<div class="args">"asdf", 1234</div>
|
1192
1193
|
</td>
|
1193
1194
|
<td>
|
1194
|
-
<div>RuntimeError:
|
1195
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1195
1196
|
</td>
|
1196
1197
|
</tr>
|
1197
1198
|
|
@@ -1212,7 +1213,7 @@
|
|
1212
1213
|
<div class="args">"asdf", 1234</div>
|
1213
1214
|
</td>
|
1214
1215
|
<td>
|
1215
|
-
<div>RuntimeError:
|
1216
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1216
1217
|
</td>
|
1217
1218
|
</tr>
|
1218
1219
|
|
@@ -1233,7 +1234,7 @@
|
|
1233
1234
|
<div class="args">"asdf", 1234</div>
|
1234
1235
|
</td>
|
1235
1236
|
<td>
|
1236
|
-
<div>RuntimeError:
|
1237
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1237
1238
|
</td>
|
1238
1239
|
</tr>
|
1239
1240
|
|
@@ -1254,7 +1255,7 @@
|
|
1254
1255
|
<div class="args">"asdf", 1234</div>
|
1255
1256
|
</td>
|
1256
1257
|
<td>
|
1257
|
-
<div>RuntimeError:
|
1258
|
+
<div>RuntimeError: Option 'data/file_name' is required! This is an extra long error message.</div>
|
1258
1259
|
</td>
|
1259
1260
|
</tr>
|
1260
1261
|
|
@@ -1264,17 +1265,17 @@
|
|
1264
1265
|
<input class="btn btn-danger btn-xs pull-left" type="submit" name="delete" value="Bury" />
|
1265
1266
|
</form>
|
1266
1267
|
|
1267
|
-
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour/delete" method="post">
|
1268
|
+
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/YWxs/1_hour/delete" method="post">
|
1268
1269
|
<input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
|
1269
1270
|
<input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="Bury All" data-confirm="Are you sure?" />
|
1270
1271
|
</form>
|
1271
1272
|
|
1272
|
-
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour/export" method="post">
|
1273
|
+
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/YWxs/1_hour/export" method="post">
|
1273
1274
|
<input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
|
1274
1275
|
<input class="btn btn-secondary btn-xs pull-right" type="submit" name="export" value="Export All" />
|
1275
1276
|
</form>
|
1276
1277
|
|
1277
|
-
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour/retry" method="post">
|
1278
|
+
<form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/YWxs/1_hour/retry" method="post">
|
1278
1279
|
<input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
|
1279
1280
|
<input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="Revive All" data-confirm="Are you sure?" />
|
1280
1281
|
</form>
|
@@ -7,10 +7,11 @@ module Sidekiq
|
|
7
7
|
describe DeadJob do
|
8
8
|
let(:job) do
|
9
9
|
build_job(
|
10
|
-
"class"
|
11
|
-
"failed_at"
|
12
|
-
"error_class"
|
13
|
-
"queue"
|
10
|
+
"class" => "HardWorkTask",
|
11
|
+
"failed_at" => Time.now,
|
12
|
+
"error_class" => "NoMethodError",
|
13
|
+
"queue" => "SomeQueue",
|
14
|
+
"error_message" => "undefined method `pause` for HardWork:Class"
|
14
15
|
)
|
15
16
|
end
|
16
17
|
|
@@ -20,6 +21,7 @@ module Sidekiq
|
|
20
21
|
job_class: "HardWorkTask",
|
21
22
|
time_elapsed_since_failure: 9,
|
22
23
|
error_class: "NoMethodError",
|
24
|
+
error_msg: "undefined method `pause` for H...",
|
23
25
|
bucket_name: "1_hour",
|
24
26
|
job: job
|
25
27
|
}
|
@@ -54,6 +56,7 @@ module Sidekiq
|
|
54
56
|
job_class: "HardWorkTask",
|
55
57
|
time_elapsed_since_failure: time_elapsed,
|
56
58
|
error_class: "NoMethodError",
|
59
|
+
error_msg: "undefined method `pause` for H...",
|
57
60
|
bucket_name: "1_hour",
|
58
61
|
job: killed_job
|
59
62
|
)
|
@@ -3,40 +3,45 @@
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
5
|
module Sidekiq
|
6
|
+
# rubocop:disable Metrics/ModuleLength
|
6
7
|
module Undertaker
|
7
8
|
describe JobDistributor do
|
8
9
|
let(:job1) do
|
9
10
|
instance_double(Sidekiq::JobRecord, item: {
|
10
|
-
"class"
|
11
|
-
"failed_at"
|
12
|
-
"error_class"
|
11
|
+
"class" => "A",
|
12
|
+
"failed_at" => 1,
|
13
|
+
"error_class" => "E1",
|
14
|
+
"error_message" => "M1"
|
13
15
|
})
|
14
16
|
end
|
15
17
|
let(:job2) do
|
16
18
|
instance_double(Sidekiq::JobRecord, item: {
|
17
|
-
"class"
|
18
|
-
"failed_at"
|
19
|
-
"error_class"
|
19
|
+
"class" => "A",
|
20
|
+
"failed_at" => 1,
|
21
|
+
"error_class" => "E1",
|
22
|
+
"error_message" => "M1"
|
20
23
|
})
|
21
24
|
end
|
22
25
|
let(:job3) do
|
23
26
|
instance_double(Sidekiq::JobRecord, item: {
|
24
|
-
"class"
|
25
|
-
"failed_at"
|
26
|
-
"error_class"
|
27
|
+
"class" => "B",
|
28
|
+
"failed_at" => 1,
|
29
|
+
"error_class" => "E1",
|
30
|
+
"error_message" => "M2"
|
27
31
|
})
|
28
32
|
end
|
29
33
|
let(:job4) do
|
30
34
|
instance_double(Sidekiq::JobRecord, item: {
|
31
|
-
"class"
|
32
|
-
"failed_at"
|
33
|
-
"error_class"
|
35
|
+
"class" => "B",
|
36
|
+
"failed_at" => 1,
|
37
|
+
"error_class" => "E2",
|
38
|
+
"error_message" => "M1"
|
34
39
|
})
|
35
40
|
end
|
36
41
|
|
37
42
|
let(:dead_job1) do
|
38
43
|
DeadJob.new(
|
39
|
-
job: job1, # 'A', 'E1'
|
44
|
+
job: job1, # 'A', 'E1', 'M1'
|
40
45
|
time_elapsed_since_failure: 10,
|
41
46
|
bucket_name: "1_hour"
|
42
47
|
)
|
@@ -44,21 +49,21 @@ module Sidekiq
|
|
44
49
|
|
45
50
|
let(:dead_job2) do
|
46
51
|
DeadJob.new(
|
47
|
-
job: job2, # 'A', 'E1'
|
52
|
+
job: job2, # 'A', 'E1', 'M1'
|
48
53
|
time_elapsed_since_failure: 10 + (60 * 60),
|
49
54
|
bucket_name: "3_hours"
|
50
55
|
)
|
51
56
|
end
|
52
57
|
let(:dead_job3) do
|
53
58
|
DeadJob.new(
|
54
|
-
job: job3, # 'B', 'E1'
|
59
|
+
job: job3, # 'B', 'E1', 'M2'
|
55
60
|
time_elapsed_since_failure: 10 + (60 * 60),
|
56
61
|
bucket_name: "3_hours"
|
57
62
|
)
|
58
63
|
end
|
59
64
|
let(:dead_job4) do
|
60
65
|
DeadJob.new(
|
61
|
-
job: job4, # 'B', 'E2'
|
66
|
+
job: job4, # 'B', 'E2', 'M1'
|
62
67
|
time_elapsed_since_failure: 10 + (60 * 60 * 24),
|
63
68
|
bucket_name: "1_day"
|
64
69
|
)
|
@@ -98,7 +103,24 @@ module Sidekiq
|
|
98
103
|
expect(distribution).to eq expected_distribution
|
99
104
|
end
|
100
105
|
end
|
106
|
+
|
107
|
+
describe "#group_by_error_msg" do
|
108
|
+
subject(:distribution) { described_class.new(dead_jobs).group_by_error_msg }
|
109
|
+
|
110
|
+
let(:expected_distribution) do
|
111
|
+
[
|
112
|
+
["all", { "1_hour" => 1, "3_hours" => 2, "1_day" => 1, "3_days" => 0, "1_week" => 0, "older" => 0, "total_dead" => 4 }],
|
113
|
+
["M1", { "1_hour" => 1, "3_hours" => 1, "1_day" => 1, "3_days" => 0, "1_week" => 0, "older" => 0, "total_dead" => 3 }],
|
114
|
+
["M2", { "1_hour" => 0, "3_hours" => 1, "1_day" => 0, "3_days" => 0, "1_week" => 0, "older" => 0, "total_dead" => 1 }]
|
115
|
+
]
|
116
|
+
end
|
117
|
+
|
118
|
+
it "distributes the dead jobs into buckets and groups them by error_msg" do
|
119
|
+
expect(distribution).to eq expected_distribution
|
120
|
+
end
|
121
|
+
end
|
101
122
|
# rubocop:enable Layout/LineLength
|
102
123
|
end
|
103
124
|
end
|
125
|
+
# rubocop:enable Metrics/ModuleLength
|
104
126
|
end
|