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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby-build.yml +31 -3
- data/.rubocop.yml +4 -0
- data/.rubocop_codeclimate.yml +9 -0
- data/CHANGELOG.md +19 -0
- data/README.md +8 -6
- data/assets/Undertaker_demo_1_job_1_error.png +0 -0
- data/assets/Undertaker_demo_1_job_all_errors.png +0 -0
- data/assets/Undertaker_demo_all_errors.png +0 -0
- data/assets/Undertaker_demo_all_jobs.png +0 -0
- data/assets/Undertaker_demo_all_jobs_1_error.png +0 -0
- 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 +104 -26
- data/lib/sidekiq/undertaker/web_extension.rb +17 -8
- data/sidekiq-undertaker.gemspec +4 -4
- 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
- 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 +13 -6
- 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 +11 -4
- 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
- data/spec/sidekiq/undertaker/dead_jobs_spec.rb +7 -4
- data/spec/sidekiq/undertaker/job_distributor_spec.rb +41 -19
- data/spec/sidekiq/undertaker/job_filter_spec.rb +26 -9
- data/spec/sidekiq/undertaker/web_extension_spec.rb +172 -14
- data/spec/spec_helper.rb +4 -0
- data/web/locales/en.yml +2 -0
- data/web/views/filter.erb +17 -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 +9 -2
- metadata +73 -66
- data/.travis.yml +0 -51
- data/Demo_Filter.png +0 -0
- data/Demo_Job_Filter.png +0 -0
- data/Demo_Morgue_1_Job.png +0 -0
- 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">"asdf", 1234</div>
|
|
208
209
|
</td>
|
|
209
210
|
<td>
|
|
210
|
-
<div>NoMethodError:
|
|
211
|
+
<div>NoMethodError: 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
|
|
|
@@ -249,7 +250,7 @@
|
|
|
249
250
|
<div class="args">"asdf", 1234</div>
|
|
250
251
|
</td>
|
|
251
252
|
<td>
|
|
252
|
-
<div>RuntimeError:
|
|
253
|
+
<div>RuntimeError: Option 'data/file_name' 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">"asdf", 1234</div>
|
|
271
272
|
</td>
|
|
272
273
|
<td>
|
|
273
|
-
<div>NoMethodError:
|
|
274
|
+
<div>NoMethodError: Option 'data/file_name' 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/
|
|
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">"asdf", 1234</div>
|
|
209
|
+
</td>
|
|
210
|
+
<td>
|
|
211
|
+
<div>RuntimeError: Option 'data/file_name' 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">"asdf", 1234</div>
|
|
230
|
+
</td>
|
|
231
|
+
<td>
|
|
232
|
+
<div>RuntimeError: Option 'data/file_name' 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>
|