sidekiq-undertaker 1.1.0 → 1.3.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 (30) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-build.yml +1 -1
  3. data/CHANGELOG.md +104 -0
  4. data/README.md +7 -4
  5. data/assets/Undertaker_demo_1_job_1_error.png +0 -0
  6. data/assets/Undertaker_demo_1_job_all_errors.png +0 -0
  7. data/assets/Undertaker_demo_all_errors.png +0 -0
  8. data/assets/Undertaker_demo_all_jobs.png +0 -0
  9. data/assets/Undertaker_demo_all_jobs_1_error.png +0 -0
  10. data/lib/sidekiq/undertaker/version.rb +1 -1
  11. data/lib/sidekiq/undertaker/web_extension/api_helpers.rb +69 -12
  12. data/lib/sidekiq/undertaker/web_extension.rb +8 -1
  13. data/sidekiq-undertaker.gemspec +3 -1
  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 +29 -15
  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 +13 -15
  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 +13 -15
  17. 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 +19 -15
  18. 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 +19 -15
  19. 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 +19 -15
  20. data/spec/sidekiq/undertaker/job_distributor_spec.rb +3 -3
  21. data/spec/sidekiq/undertaker/job_filter_spec.rb +3 -3
  22. data/spec/sidekiq/undertaker/web_extension_spec.rb +115 -0
  23. data/web/locales/en.yml +2 -0
  24. data/web/views/filter.erb +16 -0
  25. data/web/views/morgue.erb +6 -0
  26. metadata +31 -14
  27. data/Demo_Filter.png +0 -0
  28. data/Demo_Job_Filter.png +0 -0
  29. data/Demo_Morgue_1_Job.png +0 -0
  30. data/Demo_Morgue_all.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b83cd4a266136182c00e82e85f9173d9c8b53722302ea8bc6b440706b31b12f2
4
- data.tar.gz: 478bb085a406e62c4f9b6eb2b4cd8e465b39dafaffa1a827c17669ffca488c83
3
+ metadata.gz: fb255bb741814575247793b7ddfdd7dfa6fe5c0d86a21df3b33f315209beef53
4
+ data.tar.gz: fc6b4970d6e7d2c8410525c76fd97fc1c98943a0f9bb381807946829e38180ab
5
5
  SHA512:
6
- metadata.gz: fe769f3ef5497ae2848dcd3bd858495152b813a72970cd6b311b1655c7d65e025e64cd2e88a808f4f23cced4ee2d4cc19cc7daf598df119a4127d5cbd276de16
7
- data.tar.gz: bad9876a8e994490b9461f443cd93b02da7363dc9c2b1b7a6ea936741c3d4865b99b58e7328a34cdae8d66224d52bedb02affeefbe9737ba23f1825d3bc8dc46
6
+ metadata.gz: '0162683d05be1edf9d3dc362a7b7c543fc4d0d6891945540637cc03dcb919a1780003ed55503f3cbc3af8ab0ef3a03ee28bfe6d6575dac4610ee623dd373b3b1'
7
+ data.tar.gz: 610f3d98e380193606e37c74953dd53b00c79ae42fd6f091f940f27e9b61d55305df546a207676b8139a8d41719ba0fd3336cf87b5f35ec0b16b43283796c64a
@@ -39,7 +39,7 @@ jobs:
39
39
  - 'truffleruby+graalvm'
40
40
 
41
41
  steps:
42
- - uses: actions/checkout@v2
42
+ - uses: actions/checkout@v3
43
43
  - name: Set up Ruby
44
44
  # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
45
45
  # change this to (see https://github.com/ruby/setup-ruby#versioning):
data/CHANGELOG.md ADDED
@@ -0,0 +1,104 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## [1.3.0] - 2022-04-27
6
+ ### Added
7
+ - Added option to export and re-import dead jobs
8
+
9
+ ## [1.2.0] - 2022-02-03
10
+ ### Changed
11
+ - Updated sidekiq dependency to 6.4.0
12
+
13
+ ## [1.1.1] - 2022-02-03
14
+ ### Added
15
+ - Added CHANGELOG.md
16
+
17
+ ## [1.1.0] - 2022-01-19
18
+ ### Added
19
+ - Added renovate.json
20
+ - Added ruby-build github workflow
21
+ - Added .rspec config file
22
+
23
+ ### Changed
24
+ - Updated support for Sidekiq 6.2.2 and higher
25
+ - Updated travis CI config to use latest ruby versions
26
+ - Updated to use GitHub-native Dependabot
27
+ - Updated spech_helper
28
+ - Updated approvals to version 0.0.25
29
+
30
+ ## [1.0.2] - 2021-01-27
31
+ ### Added
32
+ - Consider also explicitly stating that PRs must pass RuboCop to be accepted
33
+ - Added rubocop badge to README.md
34
+
35
+ ### Changed
36
+ - Upgraded rubocop and rt_rubocop_defaults
37
+ - Updated rake requirement from ~> 12.3 to ~> 13.0
38
+ - Updated Travis CI to use JRuby-9.2.10.0
39
+ - Updated README to clarify RuboCop install
40
+
41
+ ## [1.0.1] - 2020-02-03
42
+ ### Added
43
+ - Added ruby 2.7.0 to travis file and mark ruby 2.4.9 as optional
44
+
45
+ ### Changed
46
+ - Updated codeclimate.yml to enable rubocop
47
+
48
+ ### Fixed
49
+ - Fixed pagination on morgue page
50
+ - Fixed rubocopo issues
51
+
52
+ ## [1.0.0] - 2019-12-24
53
+ ### Added
54
+ - Added RubyGems badge
55
+ - Added custom locales
56
+
57
+ ### Changed
58
+ - Renamed gem from sidekiq-cleaner to sidekiq-undertaker
59
+ - Updated do not show 'all' as job or error name in titles
60
+ - Updated gemspec, .travis.yml and README.md
61
+ - Updated rename buckets and add the 'older' bucket
62
+ - Refactored move sort into JobAggregator
63
+ - Renamed JobAggregator to JobDistributor
64
+ - Updated translations
65
+ - Updated add '/filter' and '/morgue' prefixes to URLs
66
+ - Renamed Helpers to APIHelpers
67
+ - Moved view files to top level web folder
68
+ - Renamed views
69
+ - Moved WebExtension::Helper into separate file
70
+
71
+ ### Removed
72
+ - Removed before install steps from .travis.yml
73
+
74
+ ### Fixed
75
+ - Updated README.md to fix broken members link
76
+ - Fixed approvals specs after sidekiq ref update
77
+ - Fixed sidekiq dependency in gemspec
78
+ - Fixed broken links in filter view
79
+ - Fixed Travis link
80
+ - Fixed paths in views
81
+
82
+ ## [0.3.6] - 2019-12-04
83
+ ### Added
84
+ - Added Test Coverage Badge
85
+ - Added CodeClimate configuration
86
+ - Added support for JRuby
87
+ - Added .travis.yml
88
+ - Added support for csrf and allowed this to be used with newer versions of sidekiq
89
+
90
+ ### Changed
91
+ - Updated travis config
92
+ - Updated Rubocop and RtRubocopDefaults gems
93
+ - Updated README.md
94
+ - Updated gemspec
95
+ - Renamed approvals specs to shorten file path
96
+ - Updated approval specs to exclude Sidekiq::VERSION
97
+ - Removed celluloid dependency
98
+ - Allowed developers to use other Rubies
99
+ - Removed .ruby-version and added .ruby-version and .rvmrc to the .gitignore
100
+
101
+ ### Fixed
102
+ - Fixed "Retry All" and "Delete All" function
103
+ - Fixed Csrf and sidekiq version compatibility
104
+ - Fixed Cleaner Redirect Bug
data/README.md CHANGED
@@ -45,24 +45,24 @@ Or install it yourself as:
45
45
 
46
46
  The filter page shows a table with time-buckets as columns and rows for each job class.
47
47
 
48
- ![Sidekiq Undertaker](Demo_Filter.png)
48
+ ![Sidekiq Undertaker](assets/Undertaker_demo_all_jobs.png)
49
49
 
50
50
  #### Job Filter View
51
51
 
52
52
  For each job class, you can drill down to view error distribution based on
53
53
  error class.
54
54
 
55
- ![Sidekiq Undertaker](Demo_Job_Filter.png)
55
+ ![Sidekiq Undertaker](assets/Undertaker_demo_1_job_all_errors.png)
56
56
 
57
57
  #### Morgue View
58
58
  Finally, click on the individual error counts to display details of the
59
59
  errors in a list form.
60
60
 
61
- ![Sidekiq Undertaker](Demo_Morgue_1_Job.png)
61
+ ![Sidekiq Undertaker](assets/Undertaker_demo_1_job_1_error.png)
62
62
 
63
63
  The morgue view can, for example, also show an error distribution over all job classes.
64
64
 
65
- ![Sidekiq Undertaker](Demo_Morgue_all.png)
65
+ ![Sidekiq Undertaker](assets/Undertaker_demo_all_jobs_1_error.png)
66
66
 
67
67
  ## Contributing
68
68
 
@@ -81,6 +81,9 @@ this fork was renamed to `sidekiq-undertaker`.
81
81
 
82
82
  The [Sidekiq-Cleaner](https://github.com/HackingHabits/sidekiq-cleaner) gem was originally created by [Madan Thangavelu](https://github.com/HackingHabits).
83
83
  [Tout](https://github.com/Tout/sidekiq-cleaner) and [TheWudu](https://github.com/TheWudu/sidekiq-cleaner) also contributed to it.
84
+ [Zlatko Rednjak](https://github.com/Rednjak) added the initial version of the `CHANGELOG.md`.
85
+ [Lucas Dell'Isola](https://github.com/ldellisola) added the export/import feature for dead jobs.
86
+
84
87
  For the complete list of network members have a look at the [fork overview](https://github.com/ThomasKoppensteiner/sidekiq-undertaker/network/members).
85
88
 
86
89
  ## Alternative Projects
Binary file
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sidekiq
4
4
  module Undertaker
5
- VERSION = "1.1.0"
5
+ VERSION = "1.3.0"
6
6
  end
7
7
  end
@@ -2,11 +2,16 @@
2
2
 
3
3
  require "sidekiq/undertaker/job_distributor"
4
4
  require "sidekiq/undertaker/job_filter"
5
+ require "json"
6
+ require "zip"
5
7
 
6
8
  module Sidekiq
7
9
  module Undertaker
8
10
  module WebExtension
11
+ # rubocop:disable Metrics/ModuleLength
9
12
  module APIHelpers
13
+ EXPORT_CHUNK_SIZE = 2000
14
+
10
15
  def show_filter
11
16
  store_request_params
12
17
 
@@ -59,22 +64,25 @@ module Sidekiq
59
64
  def post_undertaker
60
65
  raise ::ArgumentError.new("Key missing") unless params["key"]
61
66
 
62
- params["key"].each do |key|
63
- job = Sidekiq::DeadSet.new.fetch(*parse_params(key)).first
64
- if job
65
- if params["retry"]
66
- job.retry
67
- elsif params["delete"]
68
- job.delete
69
- end
70
- end
71
- end
67
+ jobs = params["key"].map { |k| Sidekiq::DeadSet.new.fetch(*parse_params(k)).first }.compact
72
68
 
73
- redirect redirect_path(request)
69
+ handle_selected_jobs jobs
74
70
  rescue ::ArgumentError
75
71
  bad_request
76
72
  end
77
73
 
74
+ def handle_selected_jobs(jobs)
75
+ return send_data(*prepare_data(jobs.map(&:item), EXPORT_CHUNK_SIZE)) if params["export"]
76
+
77
+ if params["retry"]
78
+ jobs.each(&:retry)
79
+ elsif params["delete"]
80
+ jobs.each(&:delete)
81
+ end
82
+
83
+ redirect redirect_path(request)
84
+ end
85
+
78
86
  def post_undertaker_job_class_error_class_buckent_name_delete
79
87
  store_request_params
80
88
  @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(params)
@@ -96,6 +104,28 @@ module Sidekiq
96
104
  redirect redirect_path(request)
97
105
  end
98
106
 
107
+ def post_undertaker_job_class_error_class_buckent_name_export
108
+ store_request_params
109
+
110
+ @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(params)
111
+ send_data(*prepare_data(@dead_jobs.map { |j| j.job.item }, EXPORT_CHUNK_SIZE))
112
+ end
113
+
114
+ def post_import_jobs
115
+ file = params["upload_file"]
116
+ raise ::ArgumentError.new("The file is not a json") if file.nil? || file[:type] != "application/json"
117
+
118
+ data = params["upload_file"][:tempfile].read
119
+ dead_set = Sidekiq::DeadSet.new
120
+
121
+ JSON.parse(data).each do |job|
122
+ dead_set.kill(Sidekiq.dump_json(job))
123
+ end
124
+ redirect redirect_path(request)
125
+ rescue StandardError
126
+ bad_request
127
+ end
128
+
99
129
  def render_result(template)
100
130
  render(:erb, File.read(File.join(view_path, template)))
101
131
  end
@@ -112,13 +142,40 @@ module Sidekiq
112
142
 
113
143
  def redirect_path(request)
114
144
  path = request.referer ? URI.parse(request.referer).path : request.path
115
- path.gsub("/delete", "").gsub("/retry", "")
145
+ path.gsub("/delete", "").gsub("/retry", "").gsub("/export", "")
146
+ end
147
+
148
+ def prepare_data(data, chunk_size)
149
+ filename = Time.now.strftime("%Y-%m-%d_%H-%M").to_s
150
+ return [data.to_json, "application/json", "#{filename}.json"] if data.length <= chunk_size
151
+
152
+ filename = "#{@req_job_class}_#{filename}"
153
+ zip = Zip::OutputStream.write_buffer do |file|
154
+ data.each_slice(chunk_size).each_with_index do |chunk, index|
155
+ file.put_next_entry("#{filename}_part-#{index + 1}.json")
156
+ file.write chunk.to_json
157
+ end
158
+ end
159
+
160
+ [zip.string, "application/zip", "#{filename}.zip"]
161
+ end
162
+
163
+ def send_data(data, content_type = "text/plain", file_name = "attachment.txt")
164
+ [
165
+ 200,
166
+ {
167
+ "Content-Type" => content_type,
168
+ "Content-Disposition" => "attachment; filename=\"#{file_name}\""
169
+ },
170
+ [data]
171
+ ]
116
172
  end
117
173
 
118
174
  def bad_request
119
175
  [400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
120
176
  end
121
177
  end
178
+ # rubocop:enable Metrics/ModuleLength
122
179
  end
123
180
  end
124
181
  end
@@ -12,7 +12,6 @@ module Sidekiq
12
12
  app.get "/undertaker/filter" do
13
13
  show_filter
14
14
  end
15
-
16
15
  app.get "/undertaker/filter/:job_class/:bucket_name" do
17
16
  show_filter_by_job_class_bucket_name
18
17
  end
@@ -32,6 +31,14 @@ module Sidekiq
32
31
  app.post "/undertaker/morgue/:job_class/:error_class/:bucket_name/retry" do
33
32
  post_undertaker_job_class_error_class_buckent_name_retry
34
33
  end
34
+
35
+ app.post "/undertaker/morgue/:job_class/:error_class/:bucket_name/export" do
36
+ post_undertaker_job_class_error_class_buckent_name_export
37
+ end
38
+
39
+ app.post "/undertaker/import_jobs" do
40
+ post_import_jobs
41
+ end
35
42
  end
36
43
  # rubocop:enable Metrics/MethodLength
37
44
  end
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.metadata = {
22
22
  "homepage_uri" => "https://github.com/ThomasKoppensteiner/sidekiq-undertaker",
23
23
  "source_code_uri" => "https://github.com/ThomasKoppensteiner/sidekiq-undertaker",
24
+ "changelog_uri" => "https://github.com/ThomasKoppensteiner/sidekiq-undertaker/blob/master/CHANGELOG.md",
24
25
  "bug_tracker_uri" => "https://github.com/ThomasKoppensteiner/sidekiq-undertaker/issues",
25
26
  "build_status_uri" => "https://travis-ci.org/ThomasKoppensteiner/sidekiq-undertaker",
26
27
  "rubygems_mfa_required" => "true"
@@ -54,5 +55,6 @@ Gem::Specification.new do |spec|
54
55
  spec.add_development_dependency "sinatra", "~> 2.0"
55
56
  spec.add_development_dependency "timecop", "~> 0.9"
56
57
 
57
- spec.add_runtime_dependency "sidekiq", ">= 6.2.2", "< 6.3"
58
+ spec.add_runtime_dependency "rubyzip"
59
+ spec.add_runtime_dependency "sidekiq", ">= 6.4", "< 7"
58
60
  end
@@ -18,7 +18,7 @@
18
18
  <meta name="google" content="notranslate" />
19
19
 
20
20
  </head>
21
- <body class="admin" data-poll-path="" data-locale="en">
21
+ <body class="admin" data-locale="en">
22
22
  <div class="navbar navbar-default navbar-fixed-top">
23
23
  <div class="container-fluid">
24
24
  <div class="navbar-header" data-navbar="static">
@@ -29,9 +29,8 @@
29
29
  </button>
30
30
  <div class="navbar-toggle collapsed navbar-livereload">
31
31
 
32
-
33
- <a id="live-poll" class="btn btn-primary" href="/sidekiq/undertaker/filter?poll=true">Live Poll</a>
34
-
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>
35
34
 
36
35
 
37
36
 
@@ -95,9 +94,8 @@
95
94
  <li class="navbar-livereload">
96
95
  <div class="poll-wrapper">
97
96
 
98
-
99
- <a id="live-poll" class="btn btn-primary" href="/sidekiq/undertaker/filter?poll=true">Live Poll</a>
100
-
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>
101
99
 
102
100
 
103
101
 
@@ -114,40 +112,40 @@
114
112
  <div class="col-sm-12 summary_bar">
115
113
  <ul class="list-unstyled summary row">
116
114
  <li class="processed col-sm-1">
117
- <span class="count">0</span>
115
+ <span id="txtProcessed" class="count">0</span>
118
116
  <span class="desc">Processed</span>
119
117
  </li>
120
118
  <li class="failed col-sm-1">
121
- <span class="count">0</span>
119
+ <span id="txtFailed" class="count">0</span>
122
120
  <span class="desc">Failed</span>
123
121
  </li>
124
122
  <li class="busy col-sm-1">
125
123
  <a href="/sidekiq/busy">
126
- <span class="count">0</span>
124
+ <span id="txtBusy" class="count">0</span>
127
125
  <span class="desc">Busy</span>
128
126
  </a>
129
127
  </li>
130
128
  <li class="enqueued col-sm-1">
131
129
  <a href="/sidekiq/queues">
132
- <span class="count">0</span>
130
+ <span id="txtEnqueued" class="count">0</span>
133
131
  <span class="desc">Enqueued</span>
134
132
  </a>
135
133
  </li>
136
134
  <li class="retries col-sm-1">
137
135
  <a href="/sidekiq/retries">
138
- <span class="count">0</span>
136
+ <span id="txtRetries" class="count">0</span>
139
137
  <span class="desc">Retries</span>
140
138
  </a>
141
139
  </li>
142
140
  <li class="scheduled col-sm-1">
143
141
  <a href="/sidekiq/scheduled">
144
- <span class="count">0</span>
142
+ <span id="txtScheduled" class="count">0</span>
145
143
  <span class="desc">Scheduled</span>
146
144
  </a>
147
145
  </li>
148
146
  <li class="dead col-sm-1">
149
147
  <a href="/sidekiq/morgue">
150
- <span class="count">4</span>
148
+ <span id="txtDead" class="count">4</span>
151
149
  <span class="desc">Dead</span>
152
150
  </a>
153
151
  </li>
@@ -213,6 +211,22 @@
213
211
 
214
212
  </table>
215
213
 
214
+ <header class="row header">
215
+ <div class="col-sm-12">
216
+ <h3>
217
+ Import Jobs
218
+ </h3>
219
+ </div>
220
+ </header>
221
+
222
+ <form enctype="multipart/form-data" method="post" action='/sidekiq/undertaker/import_jobs'>
223
+ <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
224
+ <input type="file" id=upload_file" name="upload_file" >
225
+ <button class="btn btn-danger" style="margin-top: 10px" type="submit">
226
+ Import
227
+ </button>
228
+ </form>
229
+
216
230
  </div>
217
231
  </div>
218
232
  </div>
@@ -228,7 +242,7 @@
228
242
  <p class="navbar-text redis-url" title="redis://127.0.0.1:6379/0">redis://127.0.0.1:6379/0</p>
229
243
  </li>
230
244
  <li>
231
- <p class="navbar-text server-utc-time">20:57:00 UTC</p>
245
+ <p id="serverUtcTime" class="navbar-text server-utc-time">20:57:00 UTC</p>
232
246
  </li>
233
247
  <li>
234
248
  <p class="navbar-text"><a style="color: gray;" href="https://github.com/mperham/sidekiq/wiki">docs</a></p>
@@ -18,7 +18,7 @@
18
18
  <meta name="google" content="notranslate" />
19
19
 
20
20
  </head>
21
- <body class="admin" data-poll-path="" data-locale="en">
21
+ <body class="admin" data-locale="en">
22
22
  <div class="navbar navbar-default navbar-fixed-top">
23
23
  <div class="container-fluid">
24
24
  <div class="navbar-header" data-navbar="static">
@@ -29,9 +29,8 @@
29
29
  </button>
30
30
  <div class="navbar-toggle collapsed navbar-livereload">
31
31
 
32
-
33
- <a id="live-poll" class="btn btn-primary" href="/sidekiq/undertaker/filter/HardWorker/1_hour?poll=true">Live Poll</a>
34
-
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>
35
34
 
36
35
 
37
36
 
@@ -95,9 +94,8 @@
95
94
  <li class="navbar-livereload">
96
95
  <div class="poll-wrapper">
97
96
 
98
-
99
- <a id="live-poll" class="btn btn-primary" href="/sidekiq/undertaker/filter/HardWorker/1_hour?poll=true">Live Poll</a>
100
-
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>
101
99
 
102
100
 
103
101
 
@@ -114,40 +112,40 @@
114
112
  <div class="col-sm-12 summary_bar">
115
113
  <ul class="list-unstyled summary row">
116
114
  <li class="processed col-sm-1">
117
- <span class="count">0</span>
115
+ <span id="txtProcessed" class="count">0</span>
118
116
  <span class="desc">Processed</span>
119
117
  </li>
120
118
  <li class="failed col-sm-1">
121
- <span class="count">0</span>
119
+ <span id="txtFailed" class="count">0</span>
122
120
  <span class="desc">Failed</span>
123
121
  </li>
124
122
  <li class="busy col-sm-1">
125
123
  <a href="/sidekiq/busy">
126
- <span class="count">0</span>
124
+ <span id="txtBusy" class="count">0</span>
127
125
  <span class="desc">Busy</span>
128
126
  </a>
129
127
  </li>
130
128
  <li class="enqueued col-sm-1">
131
129
  <a href="/sidekiq/queues">
132
- <span class="count">0</span>
130
+ <span id="txtEnqueued" class="count">0</span>
133
131
  <span class="desc">Enqueued</span>
134
132
  </a>
135
133
  </li>
136
134
  <li class="retries col-sm-1">
137
135
  <a href="/sidekiq/retries">
138
- <span class="count">0</span>
136
+ <span id="txtRetries" class="count">0</span>
139
137
  <span class="desc">Retries</span>
140
138
  </a>
141
139
  </li>
142
140
  <li class="scheduled col-sm-1">
143
141
  <a href="/sidekiq/scheduled">
144
- <span class="count">0</span>
142
+ <span id="txtScheduled" class="count">0</span>
145
143
  <span class="desc">Scheduled</span>
146
144
  </a>
147
145
  </li>
148
146
  <li class="dead col-sm-1">
149
147
  <a href="/sidekiq/morgue">
150
- <span class="count">4</span>
148
+ <span id="txtDead" class="count">4</span>
151
149
  <span class="desc">Dead</span>
152
150
  </a>
153
151
  </li>
@@ -229,7 +227,7 @@
229
227
  <p class="navbar-text redis-url" title="redis://127.0.0.1:6379/0">redis://127.0.0.1:6379/0</p>
230
228
  </li>
231
229
  <li>
232
- <p class="navbar-text server-utc-time">20:57:00 UTC</p>
230
+ <p id="serverUtcTime" class="navbar-text server-utc-time">20:57:00 UTC</p>
233
231
  </li>
234
232
  <li>
235
233
  <p class="navbar-text"><a style="color: gray;" href="https://github.com/mperham/sidekiq/wiki">docs</a></p>
@@ -18,7 +18,7 @@
18
18
  <meta name="google" content="notranslate" />
19
19
 
20
20
  </head>
21
- <body class="admin" data-poll-path="/sidekiq/undertaker/filter/HardWorker/1_hour" data-locale="en">
21
+ <body class="admin" data-locale="en">
22
22
  <div class="navbar navbar-default navbar-fixed-top">
23
23
  <div class="container-fluid">
24
24
  <div class="navbar-header" data-navbar="static">
@@ -29,9 +29,8 @@
29
29
  </button>
30
30
  <div class="navbar-toggle collapsed navbar-livereload">
31
31
 
32
-
33
- <a id="live-poll" class="btn btn-primary active" href="/sidekiq/undertaker/filter/HardWorker/1_hour">Stop Polling</a>
34
-
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>
35
34
 
36
35
 
37
36
 
@@ -95,9 +94,8 @@
95
94
  <li class="navbar-livereload">
96
95
  <div class="poll-wrapper">
97
96
 
98
-
99
- <a id="live-poll" class="btn btn-primary active" href="/sidekiq/undertaker/filter/HardWorker/1_hour">Stop Polling</a>
100
-
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>
101
99
 
102
100
 
103
101
 
@@ -114,40 +112,40 @@
114
112
  <div class="col-sm-12 summary_bar">
115
113
  <ul class="list-unstyled summary row">
116
114
  <li class="processed col-sm-1">
117
- <span class="count">0</span>
115
+ <span id="txtProcessed" class="count">0</span>
118
116
  <span class="desc">Processed</span>
119
117
  </li>
120
118
  <li class="failed col-sm-1">
121
- <span class="count">0</span>
119
+ <span id="txtFailed" class="count">0</span>
122
120
  <span class="desc">Failed</span>
123
121
  </li>
124
122
  <li class="busy col-sm-1">
125
123
  <a href="/sidekiq/busy">
126
- <span class="count">0</span>
124
+ <span id="txtBusy" class="count">0</span>
127
125
  <span class="desc">Busy</span>
128
126
  </a>
129
127
  </li>
130
128
  <li class="enqueued col-sm-1">
131
129
  <a href="/sidekiq/queues">
132
- <span class="count">0</span>
130
+ <span id="txtEnqueued" class="count">0</span>
133
131
  <span class="desc">Enqueued</span>
134
132
  </a>
135
133
  </li>
136
134
  <li class="retries col-sm-1">
137
135
  <a href="/sidekiq/retries">
138
- <span class="count">0</span>
136
+ <span id="txtRetries" class="count">0</span>
139
137
  <span class="desc">Retries</span>
140
138
  </a>
141
139
  </li>
142
140
  <li class="scheduled col-sm-1">
143
141
  <a href="/sidekiq/scheduled">
144
- <span class="count">0</span>
142
+ <span id="txtScheduled" class="count">0</span>
145
143
  <span class="desc">Scheduled</span>
146
144
  </a>
147
145
  </li>
148
146
  <li class="dead col-sm-1">
149
147
  <a href="/sidekiq/morgue">
150
- <span class="count">4</span>
148
+ <span id="txtDead" class="count">4</span>
151
149
  <span class="desc">Dead</span>
152
150
  </a>
153
151
  </li>
@@ -229,7 +227,7 @@
229
227
  <p class="navbar-text redis-url" title="redis://127.0.0.1:6379/0">redis://127.0.0.1:6379/0</p>
230
228
  </li>
231
229
  <li>
232
- <p class="navbar-text server-utc-time">20:57:00 UTC</p>
230
+ <p id="serverUtcTime" class="navbar-text server-utc-time">20:57:00 UTC</p>
233
231
  </li>
234
232
  <li>
235
233
  <p class="navbar-text"><a style="color: gray;" href="https://github.com/mperham/sidekiq/wiki">docs</a></p>