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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-build.yml +30 -2
  3. data/.rubocop.yml +4 -0
  4. data/.rubocop_codeclimate.yml +9 -0
  5. data/CHANGELOG.md +11 -0
  6. data/README.md +2 -1
  7. data/lib/sidekiq/undertaker/dead_job.rb +10 -2
  8. data/lib/sidekiq/undertaker/job_distributor.rb +4 -0
  9. data/lib/sidekiq/undertaker/job_filter.rb +7 -2
  10. data/lib/sidekiq/undertaker/version.rb +1 -1
  11. data/lib/sidekiq/undertaker/web_extension/api_helpers.rb +42 -21
  12. data/lib/sidekiq/undertaker/web_extension.rb +11 -9
  13. data/sidekiq-undertaker.gemspec +4 -5
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. data/spec/sidekiq/undertaker/dead_jobs_spec.rb +7 -4
  25. data/spec/sidekiq/undertaker/job_distributor_spec.rb +38 -16
  26. data/spec/sidekiq/undertaker/job_filter_spec.rb +26 -9
  27. data/spec/sidekiq/undertaker/web_extension_spec.rb +60 -17
  28. data/spec/spec_helper.rb +4 -0
  29. data/web/views/filter.erb +1 -1
  30. data/web/views/filter_job_class.erb +8 -8
  31. data/web/views/filter_job_class_error_class.erb +36 -0
  32. data/web/views/morgue.erb +4 -3
  33. metadata +21 -29
  34. 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">&quot;asdf&quot;, 1234</div>
208
209
  </td>
209
210
  <td>
210
- <div>RuntimeError: Some fake message</div>
211
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
229
230
  </td>
230
231
  <td>
231
- <div>RuntimeError: Some fake message</div>
232
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
226
227
  </td>
227
228
  <td>
228
- <div>RuntimeError: Some fake message</div>
229
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
247
248
  </td>
248
249
  <td>
249
- <div>RuntimeError: Some fake message</div>
250
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
268
269
  </td>
269
270
  <td>
270
- <div>RuntimeError: Some fake message</div>
271
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
289
290
  </td>
290
291
  <td>
291
- <div>RuntimeError: Some fake message</div>
292
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
310
311
  </td>
311
312
  <td>
312
- <div>RuntimeError: Some fake message</div>
313
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
331
332
  </td>
332
333
  <td>
333
- <div>RuntimeError: Some fake message</div>
334
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
352
353
  </td>
353
354
  <td>
354
- <div>RuntimeError: Some fake message</div>
355
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
373
374
  </td>
374
375
  <td>
375
- <div>RuntimeError: Some fake message</div>
376
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
394
395
  </td>
395
396
  <td>
396
- <div>RuntimeError: Some fake message</div>
397
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
415
416
  </td>
416
417
  <td>
417
- <div>RuntimeError: Some fake message</div>
418
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
436
437
  </td>
437
438
  <td>
438
- <div>RuntimeError: Some fake message</div>
439
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
457
458
  </td>
458
459
  <td>
459
- <div>RuntimeError: Some fake message</div>
460
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
478
479
  </td>
479
480
  <td>
480
- <div>RuntimeError: Some fake message</div>
481
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
499
500
  </td>
500
501
  <td>
501
- <div>RuntimeError: Some fake message</div>
502
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
520
521
  </td>
521
522
  <td>
522
- <div>RuntimeError: Some fake message</div>
523
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
541
542
  </td>
542
543
  <td>
543
- <div>RuntimeError: Some fake message</div>
544
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
562
563
  </td>
563
564
  <td>
564
- <div>RuntimeError: Some fake message</div>
565
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
583
584
  </td>
584
585
  <td>
585
- <div>RuntimeError: Some fake message</div>
586
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
604
605
  </td>
605
606
  <td>
606
- <div>RuntimeError: Some fake message</div>
607
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
625
626
  </td>
626
627
  <td>
627
- <div>RuntimeError: Some fake message</div>
628
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
646
647
  </td>
647
648
  <td>
648
- <div>RuntimeError: Some fake message</div>
649
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
667
668
  </td>
668
669
  <td>
669
- <div>RuntimeError: Some fake message</div>
670
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
688
689
  </td>
689
690
  <td>
690
- <div>RuntimeError: Some fake message</div>
691
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
709
710
  </td>
710
711
  <td>
711
- <div>RuntimeError: Some fake message</div>
712
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
730
731
  </td>
731
732
  <td>
732
- <div>RuntimeError: Some fake message</div>
733
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
751
752
  </td>
752
753
  <td>
753
- <div>RuntimeError: Some fake message</div>
754
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
772
773
  </td>
773
774
  <td>
774
- <div>RuntimeError: Some fake message</div>
775
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
793
794
  </td>
794
795
  <td>
795
- <div>RuntimeError: Some fake message</div>
796
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
814
815
  </td>
815
816
  <td>
816
- <div>RuntimeError: Some fake message</div>
817
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
835
836
  </td>
836
837
  <td>
837
- <div>RuntimeError: Some fake message</div>
838
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
856
857
  </td>
857
858
  <td>
858
- <div>RuntimeError: Some fake message</div>
859
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
877
878
  </td>
878
879
  <td>
879
- <div>RuntimeError: Some fake message</div>
880
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
898
899
  </td>
899
900
  <td>
900
- <div>RuntimeError: Some fake message</div>
901
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
919
920
  </td>
920
921
  <td>
921
- <div>RuntimeError: Some fake message</div>
922
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
940
941
  </td>
941
942
  <td>
942
- <div>RuntimeError: Some fake message</div>
943
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
961
962
  </td>
962
963
  <td>
963
- <div>RuntimeError: Some fake message</div>
964
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
982
983
  </td>
983
984
  <td>
984
- <div>RuntimeError: Some fake message</div>
985
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1003
1004
  </td>
1004
1005
  <td>
1005
- <div>RuntimeError: Some fake message</div>
1006
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1024
1025
  </td>
1025
1026
  <td>
1026
- <div>RuntimeError: Some fake message</div>
1027
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1045
1046
  </td>
1046
1047
  <td>
1047
- <div>RuntimeError: Some fake message</div>
1048
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1066
1067
  </td>
1067
1068
  <td>
1068
- <div>RuntimeError: Some fake message</div>
1069
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1087
1088
  </td>
1088
1089
  <td>
1089
- <div>RuntimeError: Some fake message</div>
1090
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1108
1109
  </td>
1109
1110
  <td>
1110
- <div>RuntimeError: Some fake message</div>
1111
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1129
1130
  </td>
1130
1131
  <td>
1131
- <div>RuntimeError: Some fake message</div>
1132
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1150
1151
  </td>
1151
1152
  <td>
1152
- <div>RuntimeError: Some fake message</div>
1153
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1171
1172
  </td>
1172
1173
  <td>
1173
- <div>RuntimeError: Some fake message</div>
1174
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1192
1193
  </td>
1193
1194
  <td>
1194
- <div>RuntimeError: Some fake message</div>
1195
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1213
1214
  </td>
1214
1215
  <td>
1215
- <div>RuntimeError: Some fake message</div>
1216
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1234
1235
  </td>
1235
1236
  <td>
1236
- <div>RuntimeError: Some fake message</div>
1237
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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">&quot;asdf&quot;, 1234</div>
1255
1256
  </td>
1256
1257
  <td>
1257
- <div>RuntimeError: Some fake message</div>
1258
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; 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" => "HardWorkTask",
11
- "failed_at" => Time.now,
12
- "error_class" => "NoMethodError",
13
- "queue" => "SomeQueue"
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" => "A",
11
- "failed_at" => 1,
12
- "error_class" => "E1"
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" => "A",
18
- "failed_at" => 1,
19
- "error_class" => "E1"
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" => "B",
25
- "failed_at" => 1,
26
- "error_class" => "E1"
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" => "B",
32
- "failed_at" => 1,
33
- "error_class" => "E2"
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