sidekiq-undertaker 1.7.0 → 1.8.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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-build.yml +4 -2
  3. data/.rubocop.yml +3 -2
  4. data/.rubocop_todo.yml +12 -8
  5. data/CHANGELOG.md +12 -1
  6. data/Gemfile +4 -4
  7. data/README.md +1 -0
  8. data/lib/sidekiq/undertaker/version.rb +1 -1
  9. data/lib/sidekiq/undertaker/web_extension/api_helpers.rb +43 -32
  10. data/lib/sidekiq/undertaker.rb +5 -3
  11. data/renovate.json +3 -2
  12. data/sidekiq-undertaker.gemspec +3 -3
  13. data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_filter_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv8.approved.txt +377 -0
  14. 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_sidekiqv8.approved.txt +362 -0
  15. 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_sidekiqv8.approved.txt +362 -0
  16. 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_sidekiqv8.approved.txt +352 -0
  17. 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_sidekiqv8.approved.txt +352 -0
  18. 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_sidekiqv7.approved.txt → the_displayed_page_is_correct_for_sidekiqv8.approved.txt} +205 -93
  19. 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_sidekiqv7.approved.txt → the_displayed_page_is_correct_for_sidekiqv8.approved.txt} +203 -91
  20. 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_sidekiqv7.approved.txt → the_displayed_page_is_correct_for_sidekiqv8.approved.txt} +269 -155
  21. 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_sidekiqv8.approved.txt +407 -0
  22. 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_sidekiqv7.approved.txt → the_displayed_page_is_correct_for_sidekiqv8.approved.txt} +269 -155
  23. data/spec/sidekiq/undertaker/web_extension_spec.rb +12 -13
  24. data/spec/spec_helper.rb +13 -0
  25. data/spec/support/monkey_patch/approvals/writers/text_writer.rb +20 -0
  26. metadata +17 -17
  27. data/.github/dependabot.yml +0 -8
  28. data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_filter_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv7.approved.txt +0 -265
  29. 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_sidekiqv7.approved.txt +0 -250
  30. 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_sidekiqv7.approved.txt +0 -250
  31. 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_sidekiqv7.approved.txt +0 -240
  32. 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_sidekiqv7.approved.txt +0 -240
  33. 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_sidekiqv7.approved.txt +0 -295
@@ -2,12 +2,6 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- require "sidekiq/api"
6
- require "sidekiq/web"
7
- require "sinatra"
8
- require "rack/test"
9
- require "stringio"
10
-
11
5
  module Sidekiq
12
6
  # rubocop:disable Metrics/ModuleLength
13
7
  module Undertaker
@@ -15,12 +9,17 @@ module Sidekiq
15
9
  include Rack::Test::Methods
16
10
 
17
11
  let(:app) do
18
- Sidekiq::Web.new.tap do |app|
19
- # In order to use the Web UI of Sidekiq `6.2` a session is required
20
- # SEE: https://github.com/mperham/sidekiq/blob/master/Changes.md#620
21
- app.use Rack::Session::Cookie, secret: "A-Test-Web-Session-Secret"
12
+ # In order to use the Web UI of Sidekiq a session is required
13
+ # SEE: https://github.com/mperham/sidekiq/blob/master/Changes.md#620
14
+ secret = "A-Test-Web-Session-Secret--A-Test-Web-Session-Secret--A-Test-Web-Session-Secret"
15
+ Sidekiq::Web.configure do |c|
16
+ c.middlewares.clear
17
+ c.use Rack::Session::Cookie, secrets: secret
22
18
  end
19
+
20
+ Sidekiq::Web.new
23
21
  end
22
+
24
23
  let(:job_refs) { [] }
25
24
 
26
25
  let(:jid1) { "4416aa76eb8cf03f56a49220" }
@@ -51,7 +50,7 @@ module Sidekiq
51
50
  job_refs.push add_dead("jid" => jid3, "error_class" => "NoMethodError")
52
51
  job_refs.push add_dead("jid" => jid4, "class" => "HardWorker1", "error_class" => "NoMethodError")
53
52
 
54
- allow_any_instance_of(Sidekiq::WebAction).to receive(:root_path).and_return("/sidekiq/")
53
+ allow_any_instance_of(Sidekiq::Web::Action).to receive(:root_path).and_return("/sidekiq/")
55
54
 
56
55
  allow_any_instance_of(::Sidekiq::Web::CsrfProtection).to receive(:valid_token?).and_return(true)
57
56
  end
@@ -221,7 +220,7 @@ module Sidekiq
221
220
  it "redirects back to referer after delete" do
222
221
  subject
223
222
  expect(last_response.status).to eq 302
224
- expect(last_response.header["Location"]).to include "/undertaker/morgue/all/all/total_dead"
223
+ expect(last_response.headers["Location"]).to include "/undertaker/morgue/all/all/total_dead"
225
224
  end
226
225
  end
227
226
 
@@ -445,7 +444,7 @@ module Sidekiq
445
444
  "key[]=#{job_refs[0]}&retry=Retry+Now",
446
445
  "HTTP_REFERER" => "/undertaker/morgue/all/all/all/total_dead")
447
446
  expect(last_response.status).to eq 302
448
- expect(last_response.header["Location"]).to include("/undertaker/morgue/all/all/all/total_dead")
447
+ expect(last_response.headers["Location"]).to include("/undertaker/morgue/all/all/all/total_dead")
449
448
  end
450
449
  end
451
450
  end
data/spec/spec_helper.rb CHANGED
@@ -11,9 +11,12 @@ ENV["RACK_ENV"] ||= ENV["ENVIRONMENT"] ||= "test"
11
11
 
12
12
  require "bundler/setup"
13
13
  Bundler.setup
14
+
14
15
  require "approvals/rspec"
15
16
  require "mock_redis"
16
17
  require "pry"
18
+ require "rack/session"
19
+ require "rack/test"
17
20
  require "sidekiq"
18
21
  require "timecop"
19
22
 
@@ -36,6 +39,12 @@ end
36
39
 
37
40
  require "sidekiq/undertaker"
38
41
 
42
+ [
43
+ "spec/support/**/*.rb"
44
+ ].each do |pattern|
45
+ Dir[File.join(pattern)].each { |file| require file.gsub("spec/", "") }
46
+ end
47
+
39
48
  RSpec.configure do |config|
40
49
  config.run_all_when_everything_filtered = true
41
50
  config.filter_run :focus
@@ -77,3 +86,7 @@ def push_job(params)
77
86
  queue_name = params["queue"] || "default"
78
87
  Sidekiq::Queue.new(queue_name).find_job(jid)
79
88
  end
89
+
90
+ Approvals.configure do |c|
91
+ c.approvals_path = "spec/fixtures/approvals/"
92
+ end
@@ -0,0 +1,20 @@
1
+ require "approvals/writer"
2
+
3
+ module Approvals
4
+ module Writers
5
+ class TextWriter
6
+ # HINT: Monkey patch TextWriter to replace nonce value
7
+ alias orig_format format
8
+ def format(data)
9
+ formated_data = orig_format(data)
10
+ replace_nonce(formated_data)
11
+ end
12
+
13
+ private
14
+
15
+ def replace_nonce(data)
16
+ data.gsub(/nonce="(.*)"/, 'nonce="<nonce>"')
17
+ end
18
+ end
19
+ end
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-undertaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Koppensteiner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-16 00:00:00.000000000 Z
11
+ date: 2025-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '7'
33
+ version: '8'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '7'
40
+ version: '8'
41
41
  description: |2
42
42
  Sidekiq::Undertaker is a plugin for Sidekiq.
43
43
  It allows exploring, reviving (retrying) or burying (deleting) dead jobs.
@@ -49,7 +49,6 @@ extensions: []
49
49
  extra_rdoc_files: []
50
50
  files:
51
51
  - ".codeclimate.yml"
52
- - ".github/dependabot.yml"
53
52
  - ".github/workflows/ruby-build.yml"
54
53
  - ".gitignore"
55
54
  - ".rspec"
@@ -76,16 +75,16 @@ files:
76
75
  - lib/sidekiq/undertaker/web_extension/api_helpers.rb
77
76
  - renovate.json
78
77
  - sidekiq-undertaker.gemspec
79
- - spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_filter_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv7.approved.txt
80
- - spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv7.approved.txt
81
- - spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_polled/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv7.approved.txt
82
- - 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_sidekiqv7.approved.txt
83
- - 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_sidekiqv7.approved.txt
84
- - 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_sidekiqv7.approved.txt
85
- - 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_sidekiqv7.approved.txt
86
- - 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_sidekiqv7.approved.txt
87
- - 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_sidekiqv7.approved.txt
88
- - 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_sidekiqv7.approved.txt
78
+ - spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_filter_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv8.approved.txt
79
+ - spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv8.approved.txt
80
+ - spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_polled/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv8.approved.txt
81
+ - 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_sidekiqv8.approved.txt
82
+ - 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_sidekiqv8.approved.txt
83
+ - 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_sidekiqv8.approved.txt
84
+ - 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_sidekiqv8.approved.txt
85
+ - 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_sidekiqv8.approved.txt
86
+ - 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_sidekiqv8.approved.txt
87
+ - 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_sidekiqv8.approved.txt
89
88
  - spec/sidekiq/undertaker/bucket_spec.rb
90
89
  - spec/sidekiq/undertaker/dead_jobs_spec.rb
91
90
  - spec/sidekiq/undertaker/job_distributor_spec.rb
@@ -93,6 +92,7 @@ files:
93
92
  - spec/sidekiq/undertaker/web_extension_spec.rb
94
93
  - spec/sidekiq/undertaker_spec.rb
95
94
  - spec/spec_helper.rb
95
+ - spec/support/monkey_patch/approvals/writers/text_writer.rb
96
96
  - web/locales/en.yml
97
97
  - web/views/filter.erb
98
98
  - web/views/filter_job_class.erb
@@ -117,14 +117,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: 3.1.0
120
+ version: 3.2.0
121
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubygems_version: 3.4.10
127
+ rubygems_version: 3.5.22
128
128
  signing_key:
129
129
  specification_version: 4
130
130
  summary: Sidekiq::Undertaker allows exploring, reviving or burying dead jobs
@@ -1,8 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: bundler
4
- directory: "/"
5
- schedule:
6
- interval: monthly
7
- open-pull-requests-limit: 10
8
- versioning-strategy: increase
@@ -1,265 +0,0 @@
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="navbar-menu" 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
- <li class="">
89
- <a href="/sidekiq/metrics">Metrics</a>
90
- </li>
91
-
92
-
93
-
94
-
95
- <li class="active" data-navbar="custom-tab">
96
- <a href="/sidekiq/undertaker/filter">Undertaker</a>
97
- </li>
98
-
99
-
100
- <li class="navbar-livereload">
101
- <div class="poll-wrapper">
102
-
103
- <a class="live-poll-start live-poll btn btn-primary">Live Poll</a>
104
- <a class="live-poll-stop live-poll btn btn-primary active">Stop Polling</a>
105
-
106
-
107
-
108
- </div>
109
- </li>
110
- </ul>
111
- </div>
112
- </div>
113
- </div>
114
-
115
- <div id="page">
116
- <div class="container">
117
- <div class="row">
118
- <div class="col-sm-12 summary_bar">
119
- <ul class="list-unstyled summary row">
120
- <li class="processed col-sm-1">
121
- <span id="txtProcessed" class="count" data-nwp>0</span>
122
- <span class="desc">Processed</span>
123
- </li>
124
- <li class="failed col-sm-1">
125
- <span id="txtFailed" class="count" data-nwp>0</span>
126
- <span class="desc">Failed</span>
127
- </li>
128
- <li class="busy col-sm-1">
129
- <a href="/sidekiq/busy">
130
- <span id="txtBusy" class="count" data-nwp>0</span>
131
- <span class="desc">Busy</span>
132
- </a>
133
- </li>
134
- <li class="enqueued col-sm-1">
135
- <a href="/sidekiq/queues">
136
- <span id="txtEnqueued" class="count" data-nwp>0</span>
137
- <span class="desc">Enqueued</span>
138
- </a>
139
- </li>
140
- <li class="retries col-sm-1">
141
- <a href="/sidekiq/retries">
142
- <span id="txtRetries" class="count" data-nwp>0</span>
143
- <span class="desc">Retries</span>
144
- </a>
145
- </li>
146
- <li class="scheduled col-sm-1">
147
- <a href="/sidekiq/scheduled">
148
- <span id="txtScheduled" class="count" data-nwp>0</span>
149
- <span class="desc">Scheduled</span>
150
- </a>
151
- </li>
152
- <li class="dead col-sm-1">
153
- <a href="/sidekiq/morgue">
154
- <span id="txtDead" class="count" data-nwp>4</span>
155
- <span class="desc">Dead</span>
156
- </a>
157
- </li>
158
- </ul>
159
-
160
- </div>
161
-
162
- <div class="col-sm-12">
163
- <header class="row header">
164
- <div class="col-sm-12">
165
- <h3>
166
- <b>4</b> dead jobs
167
- </h3>
168
- </div>
169
- </header>
170
-
171
- <table class="table table-striped table-bordered table-white">
172
- <thead>
173
- <tr>
174
- <th style="width: 20%">Jobs</th>
175
- <th style="width: 10%">All</th>
176
- <th style="width: 10%">1 hour</th>
177
- <th style="width: 10%">3 hours</th>
178
- <th style="width: 10%">1 day</th>
179
- <th style="width: 10%">3 days</th>
180
- <th style="width: 10%">1 week</th>
181
- <th style="width: 10%">Older</th>
182
- </tr>
183
- </thead>
184
-
185
- <tr>
186
- <td><a href='/sidekiq/undertaker/morgue/all/all/all/total_dead'> all</a></td>
187
- <td><a href='/sidekiq/undertaker/filter/all/total_dead'>4</a></td>
188
- <td><a href='/sidekiq/undertaker/filter/all/1_hour'>4</a></td>
189
- <td><a href='/sidekiq/undertaker/filter/all/3_hours'>0</a></td>
190
- <td><a href='/sidekiq/undertaker/filter/all/1_day'>0</a></td>
191
- <td><a href='/sidekiq/undertaker/filter/all/3_days'>0</a></td>
192
- <td><a href='/sidekiq/undertaker/filter/all/1_week'>0</a></td>
193
- <td><a href='/sidekiq/undertaker/filter/all/older'>0</a></td>
194
- </tr>
195
-
196
- <tr>
197
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/all/total_dead'> HardWorker</a></td>
198
- <td><a href='/sidekiq/undertaker/filter/HardWorker/total_dead'>3</a></td>
199
- <td><a href='/sidekiq/undertaker/filter/HardWorker/1_hour'>3</a></td>
200
- <td><a href='/sidekiq/undertaker/filter/HardWorker/3_hours'>0</a></td>
201
- <td><a href='/sidekiq/undertaker/filter/HardWorker/1_day'>0</a></td>
202
- <td><a href='/sidekiq/undertaker/filter/HardWorker/3_days'>0</a></td>
203
- <td><a href='/sidekiq/undertaker/filter/HardWorker/1_week'>0</a></td>
204
- <td><a href='/sidekiq/undertaker/filter/HardWorker/older'>0</a></td>
205
- </tr>
206
-
207
- <tr>
208
- <td><a href='/sidekiq/undertaker/morgue/HardWorker1/all/all/total_dead'> HardWorker1</a></td>
209
- <td><a href='/sidekiq/undertaker/filter/HardWorker1/total_dead'>1</a></td>
210
- <td><a href='/sidekiq/undertaker/filter/HardWorker1/1_hour'>1</a></td>
211
- <td><a href='/sidekiq/undertaker/filter/HardWorker1/3_hours'>0</a></td>
212
- <td><a href='/sidekiq/undertaker/filter/HardWorker1/1_day'>0</a></td>
213
- <td><a href='/sidekiq/undertaker/filter/HardWorker1/3_days'>0</a></td>
214
- <td><a href='/sidekiq/undertaker/filter/HardWorker1/1_week'>0</a></td>
215
- <td><a href='/sidekiq/undertaker/filter/HardWorker1/older'>0</a></td>
216
- </tr>
217
-
218
- </table>
219
-
220
- <header class="row header">
221
- <div class="col-sm-12">
222
- <h3>
223
- Import Jobs
224
- </h3>
225
- </div>
226
- </header>
227
-
228
- <form enctype="multipart/form-data" method="post" action='/sidekiq/undertaker/import_jobs'>
229
- <input type='hidden' name='authenticity_token' value='stubbed-csrf-token'/>
230
- <input type="file" id=upload_file" name="upload_file" >
231
- <button class="btn btn-danger" style="margin-top: 10px" type="submit">
232
- Import
233
- </button>
234
- </form>
235
-
236
- </div>
237
- </div>
238
- </div>
239
- </div>
240
- <div class="navbar navbar-fixed-bottom navbar-inverse ltr">
241
- <div class="navbar-inner">
242
- <div class="container text-center">
243
- <ul class="nav">
244
- <li>
245
- <p class="navbar-text product-version">Sidekiq v*EXCLUDED*</p>
246
- </li>
247
- <li>
248
- <p class="navbar-text redis-url" title="redis://localhost:6379/0">redis://localhost:6379/0</p>
249
- </li>
250
- <li>
251
- <p id="serverUtcTime" class="navbar-text server-utc-time">20:57:00 UTC</p>
252
- </li>
253
- <li>
254
- <p class="navbar-text"><a rel=help href="https://github.com/sidekiq/sidekiq/wiki">docs</a></p>
255
- </li>
256
- <li>
257
- <p class="navbar-text"><a rel=external href="https://github.com/sidekiq/sidekiq/tree/main/web/locales">en</a></p>
258
- </li>
259
- </ul>
260
- </div>
261
- </div>
262
- </div>
263
-
264
- </body>
265
- </html>