sidekiq-undertaker 1.2.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
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>