sidekiq-undertaker 1.0.0.rc01

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +6 -0
  3. data/.gitignore +22 -0
  4. data/.rubocop.yml +5 -0
  5. data/.rubocop_todo.yml +23 -0
  6. data/.travis.yml +53 -0
  7. data/Demo_Filter.png +0 -0
  8. data/Demo_Job_Filter.png +0 -0
  9. data/Demo_Morgue_1_Job.png +0 -0
  10. data/Demo_Morgue_all.png +0 -0
  11. data/Gemfile +11 -0
  12. data/LICENSE.txt +21 -0
  13. data/README.md +95 -0
  14. data/Rakefile +34 -0
  15. data/lib/sidekiq/undertaker.rb +16 -0
  16. data/lib/sidekiq/undertaker/bucket.rb +29 -0
  17. data/lib/sidekiq/undertaker/dead_job.rb +64 -0
  18. data/lib/sidekiq/undertaker/job_distributor.rb +64 -0
  19. data/lib/sidekiq/undertaker/job_filter.rb +46 -0
  20. data/lib/sidekiq/undertaker/version.rb +7 -0
  21. data/lib/sidekiq/undertaker/web_extension.rb +37 -0
  22. data/lib/sidekiq/undertaker/web_extension/api_helpers.rb +120 -0
  23. data/sidekiq-undertaker.gemspec +55 -0
  24. data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_filter_page_is_called/behaves_like_a_page/the_displayed_page_is_correct.approved.txt +240 -0
  25. data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_called/behaves_like_a_page/the_displayed_page_is_correct.approved.txt +241 -0
  26. data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_polled/behaves_like_a_page/the_displayed_page_is_correct.approved.txt +241 -0
  27. 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.approved.txt +316 -0
  28. 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.approved.txt +274 -0
  29. data/spec/sidekiq/undertaker/bucket_spec.rb +26 -0
  30. data/spec/sidekiq/undertaker/dead_jobs_spec.rb +90 -0
  31. data/spec/sidekiq/undertaker/job_distributor_spec.rb +104 -0
  32. data/spec/sidekiq/undertaker/job_filter_spec.rb +105 -0
  33. data/spec/sidekiq/undertaker/web_extension_spec.rb +270 -0
  34. data/spec/spec_helper.rb +76 -0
  35. data/web/locales/en.yml +5 -0
  36. data/web/views/filter.erb +34 -0
  37. data/web/views/filter_job_class.erb +35 -0
  38. data/web/views/morgue.erb +75 -0
  39. metadata +378 -0
@@ -0,0 +1,241 @@
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
+
13
+
14
+ <link rel="shortcut icon" type="image/ico" href="/sidekiq/images/favicon.ico" />
15
+ <script type="text/javascript" src="/sidekiq/javascripts/application.js"></script>
16
+ <meta name="google" content="notranslate" />
17
+
18
+ </head>
19
+ <body class="admin" data-poll-path="" data-locale="en">
20
+ <div class="navbar navbar-default navbar-fixed-top">
21
+ <div class="container-fluid">
22
+ <div class="navbar-header" data-navbar="static">
23
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-menu">
24
+ <span class="icon-bar"></span>
25
+ <span class="icon-bar"></span>
26
+ <span class="icon-bar"></span>
27
+ </button>
28
+ <div class="navbar-toggle collapsed navbar-livereload">
29
+
30
+
31
+ <a id="live-poll" class="btn btn-primary" href="/sidekiq/undertaker/filter/HardWorker/1_hour?poll=true">Live Poll</a>
32
+
33
+
34
+
35
+
36
+ </div>
37
+ <a class="navbar-brand" href="/sidekiq/">
38
+ Sidekiq
39
+ <span class="status">
40
+ <i class="status-sprite status-idle"></i>
41
+ idle
42
+ </span>
43
+
44
+ </a>
45
+ </div>
46
+
47
+ <div class="collapse navbar-collapse" id="navbar-menu">
48
+ <ul class="nav navbar-nav" data-navbar="static">
49
+
50
+
51
+ <li class="">
52
+ <a href="/sidekiq/">Dashboard</a>
53
+ </li>
54
+
55
+
56
+
57
+ <li class="">
58
+ <a href="/sidekiq/busy">Busy</a>
59
+ </li>
60
+
61
+
62
+
63
+ <li class="">
64
+ <a href="/sidekiq/queues">Queues</a>
65
+ </li>
66
+
67
+
68
+
69
+ <li class="">
70
+ <a href="/sidekiq/retries">Retries</a>
71
+ </li>
72
+
73
+
74
+
75
+ <li class="">
76
+ <a href="/sidekiq/scheduled">Scheduled</a>
77
+ </li>
78
+
79
+
80
+
81
+ <li class="">
82
+ <a href="/sidekiq/morgue">Dead</a>
83
+ </li>
84
+
85
+
86
+
87
+
88
+ <li class="active" data-navbar="custom-tab">
89
+ <a href="/sidekiq/undertaker/filter">Undertaker</a>
90
+ </li>
91
+
92
+
93
+ <li class="navbar-livereload">
94
+ <div class="poll-wrapper">
95
+
96
+
97
+ <a id="live-poll" class="btn btn-primary" href="/sidekiq/undertaker/filter/HardWorker/1_hour?poll=true">Live Poll</a>
98
+
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 class="count">0</span>
116
+ <span class="desc">Processed</span>
117
+ </li>
118
+ <li class="failed col-sm-1">
119
+ <span 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 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 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 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 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 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 header">
158
+ <div class="col-sm-12">
159
+ <h3>
160
+ <b>3</b> dead jobs
161
+ of <b>HardWorker</b> class
162
+ </h3>
163
+ </div>
164
+ </header>
165
+
166
+ <table class="table table-striped table-bordered table-white">
167
+ <thead>
168
+ <tr>
169
+ <th style="width: 20%">Error</th>
170
+ <th style="width: 10%">All</th>
171
+ <th style="width: 10%">1 hour</th>
172
+ <th style="width: 10%">3 hours</th>
173
+ <th style="width: 10%">1 day</th>
174
+ <th style="width: 10%">3 days</th>
175
+ <th style="width: 10%">1 week</th>
176
+ <th style="width: 10%">Older</th>
177
+ </tr>
178
+ </thead>
179
+
180
+ <tr>
181
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/total_dead'>all</a></td>
182
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/total_dead'>3</a></td>
183
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_hour'>3</a></td>
184
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/3_hours'>0</a></td>
185
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_day'>0</a></td>
186
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/3_days'>0</a></td>
187
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_week'>0</a></td>
188
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/older'>0</a></td>
189
+ </tr>
190
+
191
+ <tr>
192
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/total_dead'>RuntimeError</a></td>
193
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/total_dead'>2</a></td>
194
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour'>2</a></td>
195
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/3_hours'>0</a></td>
196
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_day'>0</a></td>
197
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/3_days'>0</a></td>
198
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_week'>0</a></td>
199
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/older'>0</a></td>
200
+ </tr>
201
+
202
+ <tr>
203
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/total_dead'>NoMethodError</a></td>
204
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/total_dead'>1</a></td>
205
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_hour'>1</a></td>
206
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/3_hours'>0</a></td>
207
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_day'>0</a></td>
208
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/3_days'>0</a></td>
209
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_week'>0</a></td>
210
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/older'>0</a></td>
211
+ </tr>
212
+
213
+ </table>
214
+
215
+ </div>
216
+ </div>
217
+ </div>
218
+ </div>
219
+ <div class="navbar navbar-fixed-bottom navbar-inverse ltr">
220
+ <div class="navbar-inner">
221
+ <div class="container text-center">
222
+ <ul class="nav">
223
+ <li>
224
+ <p class="navbar-text product-version">Sidekiq v*EXCLUDED*</p>
225
+ </li>
226
+ <li>
227
+ <p class="navbar-text redis-url" title="redis://127.0.0.1:6379/0">redis://127.0.0.1:6379/0</p>
228
+ </li>
229
+ <li>
230
+ <p class="navbar-text server-utc-time">20:57:00 UTC</p>
231
+ </li>
232
+ <li>
233
+ <p class="navbar-text"><a style="color: gray;" href="https://github.com/mperham/sidekiq/wiki">docs</a></p>
234
+ </li>
235
+ </ul>
236
+ </div>
237
+ </div>
238
+ </div>
239
+
240
+ </body>
241
+ </html>
@@ -0,0 +1,241 @@
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
+
13
+
14
+ <link rel="shortcut icon" type="image/ico" href="/sidekiq/images/favicon.ico" />
15
+ <script type="text/javascript" src="/sidekiq/javascripts/application.js"></script>
16
+ <meta name="google" content="notranslate" />
17
+
18
+ </head>
19
+ <body class="admin" data-poll-path="/sidekiq/undertaker/filter/HardWorker/1_hour" data-locale="en">
20
+ <div class="navbar navbar-default navbar-fixed-top">
21
+ <div class="container-fluid">
22
+ <div class="navbar-header" data-navbar="static">
23
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-menu">
24
+ <span class="icon-bar"></span>
25
+ <span class="icon-bar"></span>
26
+ <span class="icon-bar"></span>
27
+ </button>
28
+ <div class="navbar-toggle collapsed navbar-livereload">
29
+
30
+
31
+ <a id="live-poll" class="btn btn-primary active" href="/sidekiq/undertaker/filter/HardWorker/1_hour">Stop Polling</a>
32
+
33
+
34
+
35
+
36
+ </div>
37
+ <a class="navbar-brand" href="/sidekiq/">
38
+ Sidekiq
39
+ <span class="status">
40
+ <i class="status-sprite status-idle"></i>
41
+ idle
42
+ </span>
43
+
44
+ </a>
45
+ </div>
46
+
47
+ <div class="collapse navbar-collapse" id="navbar-menu">
48
+ <ul class="nav navbar-nav" data-navbar="static">
49
+
50
+
51
+ <li class="">
52
+ <a href="/sidekiq/">Dashboard</a>
53
+ </li>
54
+
55
+
56
+
57
+ <li class="">
58
+ <a href="/sidekiq/busy">Busy</a>
59
+ </li>
60
+
61
+
62
+
63
+ <li class="">
64
+ <a href="/sidekiq/queues">Queues</a>
65
+ </li>
66
+
67
+
68
+
69
+ <li class="">
70
+ <a href="/sidekiq/retries">Retries</a>
71
+ </li>
72
+
73
+
74
+
75
+ <li class="">
76
+ <a href="/sidekiq/scheduled">Scheduled</a>
77
+ </li>
78
+
79
+
80
+
81
+ <li class="">
82
+ <a href="/sidekiq/morgue">Dead</a>
83
+ </li>
84
+
85
+
86
+
87
+
88
+ <li class="active" data-navbar="custom-tab">
89
+ <a href="/sidekiq/undertaker/filter">Undertaker</a>
90
+ </li>
91
+
92
+
93
+ <li class="navbar-livereload">
94
+ <div class="poll-wrapper">
95
+
96
+
97
+ <a id="live-poll" class="btn btn-primary active" href="/sidekiq/undertaker/filter/HardWorker/1_hour">Stop Polling</a>
98
+
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 class="count">0</span>
116
+ <span class="desc">Processed</span>
117
+ </li>
118
+ <li class="failed col-sm-1">
119
+ <span 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 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 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 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 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 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 header">
158
+ <div class="col-sm-12">
159
+ <h3>
160
+ <b>3</b> dead jobs
161
+ of <b>HardWorker</b> class
162
+ </h3>
163
+ </div>
164
+ </header>
165
+
166
+ <table class="table table-striped table-bordered table-white">
167
+ <thead>
168
+ <tr>
169
+ <th style="width: 20%">Error</th>
170
+ <th style="width: 10%">All</th>
171
+ <th style="width: 10%">1 hour</th>
172
+ <th style="width: 10%">3 hours</th>
173
+ <th style="width: 10%">1 day</th>
174
+ <th style="width: 10%">3 days</th>
175
+ <th style="width: 10%">1 week</th>
176
+ <th style="width: 10%">Older</th>
177
+ </tr>
178
+ </thead>
179
+
180
+ <tr>
181
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/total_dead'>all</a></td>
182
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/total_dead'>3</a></td>
183
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_hour'>3</a></td>
184
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/3_hours'>0</a></td>
185
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_day'>0</a></td>
186
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/3_days'>0</a></td>
187
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_week'>0</a></td>
188
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/older'>0</a></td>
189
+ </tr>
190
+
191
+ <tr>
192
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/total_dead'>RuntimeError</a></td>
193
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/total_dead'>2</a></td>
194
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour'>2</a></td>
195
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/3_hours'>0</a></td>
196
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_day'>0</a></td>
197
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/3_days'>0</a></td>
198
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_week'>0</a></td>
199
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/older'>0</a></td>
200
+ </tr>
201
+
202
+ <tr>
203
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/total_dead'>NoMethodError</a></td>
204
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/total_dead'>1</a></td>
205
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_hour'>1</a></td>
206
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/3_hours'>0</a></td>
207
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_day'>0</a></td>
208
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/3_days'>0</a></td>
209
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_week'>0</a></td>
210
+ <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/older'>0</a></td>
211
+ </tr>
212
+
213
+ </table>
214
+
215
+ </div>
216
+ </div>
217
+ </div>
218
+ </div>
219
+ <div class="navbar navbar-fixed-bottom navbar-inverse ltr">
220
+ <div class="navbar-inner">
221
+ <div class="container text-center">
222
+ <ul class="nav">
223
+ <li>
224
+ <p class="navbar-text product-version">Sidekiq v*EXCLUDED*</p>
225
+ </li>
226
+ <li>
227
+ <p class="navbar-text redis-url" title="redis://127.0.0.1:6379/0">redis://127.0.0.1:6379/0</p>
228
+ </li>
229
+ <li>
230
+ <p class="navbar-text server-utc-time">20:57:00 UTC</p>
231
+ </li>
232
+ <li>
233
+ <p class="navbar-text"><a style="color: gray;" href="https://github.com/mperham/sidekiq/wiki">docs</a></p>
234
+ </li>
235
+ </ul>
236
+ </div>
237
+ </div>
238
+ </div>
239
+
240
+ </body>
241
+ </html>