sidekiq-undertaker 1.1.0 → 1.3.0

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