sidekiq-undertaker 1.2.0 → 1.4.1

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-build.yml +31 -3
  3. data/.rubocop.yml +4 -0
  4. data/.rubocop_codeclimate.yml +9 -0
  5. data/CHANGELOG.md +19 -0
  6. data/README.md +8 -6
  7. data/assets/Undertaker_demo_1_job_1_error.png +0 -0
  8. data/assets/Undertaker_demo_1_job_all_errors.png +0 -0
  9. data/assets/Undertaker_demo_all_errors.png +0 -0
  10. data/assets/Undertaker_demo_all_jobs.png +0 -0
  11. data/assets/Undertaker_demo_all_jobs_1_error.png +0 -0
  12. data/lib/sidekiq/undertaker/dead_job.rb +10 -2
  13. data/lib/sidekiq/undertaker/job_distributor.rb +4 -0
  14. data/lib/sidekiq/undertaker/job_filter.rb +7 -2
  15. data/lib/sidekiq/undertaker/version.rb +1 -1
  16. data/lib/sidekiq/undertaker/web_extension/api_helpers.rb +104 -26
  17. data/lib/sidekiq/undertaker/web_extension.rb +17 -8
  18. data/sidekiq-undertaker.gemspec +4 -4
  19. 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 +19 -3
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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 +13 -6
  25. 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
  26. 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
  27. 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 +11 -4
  28. 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 +59 -52
  29. data/spec/sidekiq/undertaker/dead_jobs_spec.rb +7 -4
  30. data/spec/sidekiq/undertaker/job_distributor_spec.rb +41 -19
  31. data/spec/sidekiq/undertaker/job_filter_spec.rb +26 -9
  32. data/spec/sidekiq/undertaker/web_extension_spec.rb +172 -14
  33. data/spec/spec_helper.rb +4 -0
  34. data/web/locales/en.yml +2 -0
  35. data/web/views/filter.erb +17 -1
  36. data/web/views/filter_job_class.erb +8 -8
  37. data/web/views/filter_job_class_error_class.erb +36 -0
  38. data/web/views/morgue.erb +9 -2
  39. metadata +73 -66
  40. data/.travis.yml +0 -51
  41. data/Demo_Filter.png +0 -0
  42. data/Demo_Job_Filter.png +0 -0
  43. data/Demo_Morgue_1_Job.png +0 -0
  44. data/Demo_Morgue_all.png +0 -0
@@ -160,6 +160,7 @@
160
160
  <b>4</b> dead jobs
161
161
 
162
162
 
163
+
163
164
  in <b>total_dead</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>NoMethodError: Some fake message</div>
211
+ <div>NoMethodError: 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
 
@@ -249,7 +250,7 @@
249
250
  <div class="args">&quot;asdf&quot;, 1234</div>
250
251
  </td>
251
252
  <td>
252
- <div>RuntimeError: Some fake message</div>
253
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; is required! This is an extra long error message.</div>
253
254
  </td>
254
255
  </tr>
255
256
 
@@ -270,21 +271,27 @@
270
271
  <div class="args">&quot;asdf&quot;, 1234</div>
271
272
  </td>
272
273
  <td>
273
- <div>NoMethodError: Some fake message</div>
274
+ <div>NoMethodError: Option &#x27;data&#x2F;file_name&#x27; is required! This is an extra long error message.</div>
274
275
  </td>
275
276
  </tr>
276
277
 
277
278
  </table>
278
279
  <input class="btn btn-primary btn-xs pull-left" type="submit" name="retry" value="Revive" />
280
+ <input class="btn btn-secondary btn-xs pull-left" type="submit" name="export" value="Export" />
279
281
  <input class="btn btn-danger btn-xs pull-left" type="submit" name="delete" value="Bury" />
280
282
  </form>
281
283
 
282
- <form action="/sidekiq/undertaker/morgue/all/all/total_dead/delete" method="post">
284
+ <form action="/sidekiq/undertaker/morgue/all/all/YWxs/total_dead/delete" method="post">
283
285
  <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
284
286
  <input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="Bury All" data-confirm="Are you sure?" />
285
287
  </form>
286
288
 
287
- <form action="/sidekiq/undertaker/morgue/all/all/total_dead/retry" method="post">
289
+ <form action="/sidekiq/undertaker/morgue/all/all/YWxs/total_dead/export" method="post">
290
+ <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
291
+ <input class="btn btn-secondary btn-xs pull-right" type="submit" name="export" value="Export All" />
292
+ </form>
293
+
294
+ <form action="/sidekiq/undertaker/morgue/all/all/YWxs/total_dead/retry" method="post">
288
295
  <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
289
296
  <input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="Revive All" data-confirm="Are you sure?" />
290
297
  </form>
@@ -0,0 +1,284 @@
1
+ <!doctype html>
2
+ <html dir="ltr">
3
+ <head>
4
+ <title>[TEST] Sidekiq</title>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
+
8
+ <link href="/sidekiq/stylesheets/bootstrap.css" media="screen" rel="stylesheet" type="text/css" />
9
+
10
+
11
+ <link href="/sidekiq/stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
12
+ <link href="/sidekiq/stylesheets/application-dark.css" media="screen and (prefers-color-scheme: dark)" rel="stylesheet" type="text/css" />
13
+
14
+
15
+ <link rel="apple-touch-icon" href="/sidekiq/images/apple-touch-icon.png">
16
+ <link rel="shortcut icon" type="image/ico" href="/sidekiq/images/favicon.ico" />
17
+ <script type="text/javascript" src="/sidekiq/javascripts/application.js"></script>
18
+ <meta name="google" content="notranslate" />
19
+
20
+ </head>
21
+ <body class="admin" data-locale="en">
22
+ <div class="navbar navbar-default navbar-fixed-top">
23
+ <div class="container-fluid">
24
+ <div class="navbar-header" data-navbar="static">
25
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-menu">
26
+ <span class="icon-bar"></span>
27
+ <span class="icon-bar"></span>
28
+ <span class="icon-bar"></span>
29
+ </button>
30
+ <div class="navbar-toggle collapsed navbar-livereload">
31
+
32
+ <a class="live-poll-start live-poll btn btn-primary">Live Poll</a>
33
+ <a class="live-poll-stop live-poll btn btn-primary active">Stop Polling</a>
34
+
35
+
36
+
37
+ </div>
38
+ <a class="navbar-brand" href="/sidekiq/">
39
+ Sidekiq
40
+ <span class="status">
41
+ <i class="status-sprite status-idle"></i>
42
+ idle
43
+ </span>
44
+
45
+ </a>
46
+ </div>
47
+
48
+ <div class="collapse navbar-collapse" id="navbar-menu">
49
+ <ul class="nav navbar-nav" data-navbar="static">
50
+
51
+
52
+ <li class="">
53
+ <a href="/sidekiq/">Dashboard</a>
54
+ </li>
55
+
56
+
57
+
58
+ <li class="">
59
+ <a href="/sidekiq/busy">Busy</a>
60
+ </li>
61
+
62
+
63
+
64
+ <li class="">
65
+ <a href="/sidekiq/queues">Queues</a>
66
+ </li>
67
+
68
+
69
+
70
+ <li class="">
71
+ <a href="/sidekiq/retries">Retries</a>
72
+ </li>
73
+
74
+
75
+
76
+ <li class="">
77
+ <a href="/sidekiq/scheduled">Scheduled</a>
78
+ </li>
79
+
80
+
81
+
82
+ <li class="">
83
+ <a href="/sidekiq/morgue">Dead</a>
84
+ </li>
85
+
86
+
87
+
88
+
89
+ <li class="" data-navbar="custom-tab">
90
+ <a href="/sidekiq/undertaker/filter">Undertaker</a>
91
+ </li>
92
+
93
+
94
+ <li class="navbar-livereload">
95
+ <div class="poll-wrapper">
96
+
97
+ <a class="live-poll-start live-poll btn btn-primary">Live Poll</a>
98
+ <a class="live-poll-stop live-poll btn btn-primary active">Stop Polling</a>
99
+
100
+
101
+
102
+ </div>
103
+ </li>
104
+ </ul>
105
+ </div>
106
+ </div>
107
+ </div>
108
+
109
+ <div id="page">
110
+ <div class="container">
111
+ <div class="row">
112
+ <div class="col-sm-12 summary_bar">
113
+ <ul class="list-unstyled summary row">
114
+ <li class="processed col-sm-1">
115
+ <span id="txtProcessed" class="count">0</span>
116
+ <span class="desc">Processed</span>
117
+ </li>
118
+ <li class="failed col-sm-1">
119
+ <span id="txtFailed" class="count">0</span>
120
+ <span class="desc">Failed</span>
121
+ </li>
122
+ <li class="busy col-sm-1">
123
+ <a href="/sidekiq/busy">
124
+ <span id="txtBusy" class="count">0</span>
125
+ <span class="desc">Busy</span>
126
+ </a>
127
+ </li>
128
+ <li class="enqueued col-sm-1">
129
+ <a href="/sidekiq/queues">
130
+ <span id="txtEnqueued" class="count">0</span>
131
+ <span class="desc">Enqueued</span>
132
+ </a>
133
+ </li>
134
+ <li class="retries col-sm-1">
135
+ <a href="/sidekiq/retries">
136
+ <span id="txtRetries" class="count">0</span>
137
+ <span class="desc">Retries</span>
138
+ </a>
139
+ </li>
140
+ <li class="scheduled col-sm-1">
141
+ <a href="/sidekiq/scheduled">
142
+ <span id="txtScheduled" class="count">0</span>
143
+ <span class="desc">Scheduled</span>
144
+ </a>
145
+ </li>
146
+ <li class="dead col-sm-1">
147
+ <a href="/sidekiq/morgue">
148
+ <span id="txtDead" class="count">4</span>
149
+ <span class="desc">Dead</span>
150
+ </a>
151
+ </li>
152
+ </ul>
153
+
154
+ </div>
155
+
156
+ <div class="col-sm-12">
157
+ <header class="row head">
158
+ <div class="col-sm-12">
159
+ <h3>
160
+ <b>2</b> dead jobs
161
+ of <b>HardWorker</b> class
162
+ with <b>RuntimeError</b> exception
163
+ with <b>Option 'data/file_name' is req...</b> message
164
+ in <b>1_hour</b> bucket
165
+ </h3>
166
+ </div>
167
+ <div class="col-sm-12">
168
+ <div class="col-sm-4">
169
+
170
+
171
+ </div>
172
+ </div>
173
+ </header>
174
+
175
+
176
+ <form action="/sidekiq/undertaker/morgue" method="post">
177
+ <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
178
+ <table class="table table-striped table-bordered table-white">
179
+ <thead>
180
+ <tr>
181
+ <th width="20px" class="table-checkbox">
182
+ <label>
183
+ <input type="checkbox" class="check_all" />
184
+ </label>
185
+ </th>
186
+ <th width="25%">Last Retry</th>
187
+ <th>Queue</th>
188
+ <th>Job</th>
189
+ <th>Arguments</th>
190
+ <th>Error</th>
191
+ </tr>
192
+ </thead>
193
+
194
+ <tr>
195
+ <td class="table-checkbox">
196
+ <label>
197
+ <input type='checkbox' name='key[]' value='1544993820.0-4416aa76eb8cf03f56a49220' />
198
+ </label>
199
+ </td>
200
+ <td>
201
+ <a href="/sidekiq/morgue/1544993820.0-4416aa76eb8cf03f56a49220"><time class="ltr" dir="ltr" title="2018-12-16T20:57:00Z" datetime="2018-12-16T20:57:00Z">2018-12-16 20:57:00 UTC</time></a>
202
+ </td>
203
+ <td>
204
+ <a href="/sidekiq/queues/foo">foo</a>
205
+ </td>
206
+ <td>HardWorker</td>
207
+ <td>
208
+ <div class="args">&quot;asdf&quot;, 1234</div>
209
+ </td>
210
+ <td>
211
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; is required! This is an extra long error message.</div>
212
+ </td>
213
+ </tr>
214
+
215
+ <tr>
216
+ <td class="table-checkbox">
217
+ <label>
218
+ <input type='checkbox' name='key[]' value='1544993820.0-34e79a46b1956d3a1180767b' />
219
+ </label>
220
+ </td>
221
+ <td>
222
+ <a href="/sidekiq/morgue/1544993820.0-34e79a46b1956d3a1180767b"><time class="ltr" dir="ltr" title="2018-12-16T20:57:00Z" datetime="2018-12-16T20:57:00Z">2018-12-16 20:57:00 UTC</time></a>
223
+ </td>
224
+ <td>
225
+ <a href="/sidekiq/queues/foo">foo</a>
226
+ </td>
227
+ <td>HardWorker</td>
228
+ <td>
229
+ <div class="args">&quot;asdf&quot;, 1234</div>
230
+ </td>
231
+ <td>
232
+ <div>RuntimeError: Option &#x27;data&#x2F;file_name&#x27; is required! This is an extra long error message.</div>
233
+ </td>
234
+ </tr>
235
+
236
+ </table>
237
+ <input class="btn btn-primary btn-xs pull-left" type="submit" name="retry" value="Revive" />
238
+ <input class="btn btn-secondary btn-xs pull-left" type="submit" name="export" value="Export" />
239
+ <input class="btn btn-danger btn-xs pull-left" type="submit" name="delete" value="Bury" />
240
+ </form>
241
+
242
+ <form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/T3B0aW9uICdkYXRhL2ZpbGVfbmFtZScgaXMgcmVxLi4u/1_hour/delete" method="post">
243
+ <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
244
+ <input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="Bury All" data-confirm="Are you sure?" />
245
+ </form>
246
+
247
+ <form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/T3B0aW9uICdkYXRhL2ZpbGVfbmFtZScgaXMgcmVxLi4u/1_hour/export" method="post">
248
+ <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
249
+ <input class="btn btn-secondary btn-xs pull-right" type="submit" name="export" value="Export All" />
250
+ </form>
251
+
252
+ <form action="/sidekiq/undertaker/morgue/HardWorker/RuntimeError/T3B0aW9uICdkYXRhL2ZpbGVfbmFtZScgaXMgcmVxLi4u/1_hour/retry" method="post">
253
+ <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
254
+ <input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="Revive All" data-confirm="Are you sure?" />
255
+ </form>
256
+
257
+
258
+ </div>
259
+ </div>
260
+ </div>
261
+ </div>
262
+ <div class="navbar navbar-fixed-bottom navbar-inverse ltr">
263
+ <div class="navbar-inner">
264
+ <div class="container text-center">
265
+ <ul class="nav">
266
+ <li>
267
+ <p class="navbar-text product-version">Sidekiq v*EXCLUDED*</p>
268
+ </li>
269
+ <li>
270
+ <p class="navbar-text redis-url" title="redis://127.0.0.1:6379/0">redis://127.0.0.1:6379/0</p>
271
+ </li>
272
+ <li>
273
+ <p id="serverUtcTime" class="navbar-text server-utc-time">20:57:00 UTC</p>
274
+ </li>
275
+ <li>
276
+ <p class="navbar-text"><a style="color: gray;" href="https://github.com/mperham/sidekiq/wiki">docs</a></p>
277
+ </li>
278
+ </ul>
279
+ </div>
280
+ </div>
281
+ </div>
282
+
283
+ </body>
284
+ </html>