sidekiq-undertaker 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby-build.yml +30 -2
- data/.rubocop.yml +4 -0
- data/.rubocop_codeclimate.yml +9 -0
- data/CHANGELOG.md +11 -0
- data/README.md +2 -1
- data/lib/sidekiq/undertaker/dead_job.rb +10 -2
- data/lib/sidekiq/undertaker/job_distributor.rb +4 -0
- data/lib/sidekiq/undertaker/job_filter.rb +7 -2
- data/lib/sidekiq/undertaker/version.rb +1 -1
- data/lib/sidekiq/undertaker/web_extension/api_helpers.rb +42 -21
- data/lib/sidekiq/undertaker/web_extension.rb +11 -9
- data/sidekiq-undertaker.gemspec +4 -5
- 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 +3 -3
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +24 -24
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classbucket_page_is_polled/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +24 -24
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classerror_classbucket_page_is_called/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +231 -0
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_filter/when_job_classerror_classbucket_page_is_polled/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +231 -0
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_all_failures_and_errors/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +8 -7
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_job_class_error_and_specific_error_message/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +284 -0
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_job_class_error_and_specific_error_message/with_pagination/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +1310 -0
- data/spec/fixtures/approvals/sidekiq_undertaker_webextension/show_morgue/when_job_classerrorbucket_is_called/with_specific_job_class_and_a_specific_error/behaves_like_a_page/the_displayed_page_is_correct_for_sidekiqv6.approved.txt +6 -5
- 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 +54 -53
- data/spec/sidekiq/undertaker/dead_jobs_spec.rb +7 -4
- data/spec/sidekiq/undertaker/job_distributor_spec.rb +38 -16
- data/spec/sidekiq/undertaker/job_filter_spec.rb +26 -9
- data/spec/sidekiq/undertaker/web_extension_spec.rb +60 -17
- data/spec/spec_helper.rb +4 -0
- data/web/views/filter.erb +1 -1
- data/web/views/filter_job_class.erb +8 -8
- data/web/views/filter_job_class_error_class.erb +36 -0
- data/web/views/morgue.erb +4 -3
- metadata +21 -29
- data/.travis.yml +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9faade9f819fcaff3bc2246d68197d085f6f90b10b82f38290f5a3cc5752f07
|
4
|
+
data.tar.gz: c08b3349474057a180eecf4cc64b0bb15f43112b264833bc6f9441b5ee139549
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d5e1d644890b7ef70348f41faf14961852f76f41dbd3ee9f3fd85a57fc29ee97a3476e2bf224a41f6e76ec17219e7e7ac04abcd6f569fee956883c0b72ad786
|
7
|
+
data.tar.gz: df1f8590c18238ed71a20d380510375f0eba41ea07e2cfd49d4f1e2f3bd0d2d8f3aad43b0bb07fcea9d44dbd242ef0551e93bc3b5091d470d39d3e12e86b0fcf
|
@@ -34,10 +34,13 @@ jobs:
|
|
34
34
|
- '2.7'
|
35
35
|
- 'jruby'
|
36
36
|
- 'jruby-9.3.2.0'
|
37
|
-
- 'jruby-9.2.20.
|
37
|
+
- 'jruby-9.2.20.1'
|
38
38
|
- 'truffleruby'
|
39
39
|
- 'truffleruby+graalvm'
|
40
40
|
|
41
|
+
env:
|
42
|
+
JRUBY_OPTS: '--debug'
|
43
|
+
|
41
44
|
steps:
|
42
45
|
- uses: actions/checkout@v3
|
43
46
|
- name: Set up Ruby
|
@@ -48,4 +51,29 @@ jobs:
|
|
48
51
|
ruby-version: ${{ matrix.ruby-version }}
|
49
52
|
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
50
53
|
- name: Run tests
|
51
|
-
run: bundle exec rspec
|
54
|
+
run: COVERAGE=true bundle exec rspec
|
55
|
+
- name: 'Upload Coverage Report'
|
56
|
+
uses: actions/upload-artifact@v3
|
57
|
+
if: ${{ matrix.ruby-version == 'ruby' }}
|
58
|
+
with:
|
59
|
+
name: coverage-report
|
60
|
+
path: ./coverage
|
61
|
+
retention-days: 1
|
62
|
+
|
63
|
+
coverage:
|
64
|
+
needs: [ test ]
|
65
|
+
name: coverage
|
66
|
+
runs-on: ubuntu-latest
|
67
|
+
steps:
|
68
|
+
- uses: actions/checkout@v3
|
69
|
+
- name: Download Coverage Report
|
70
|
+
uses: actions/download-artifact@v3
|
71
|
+
with:
|
72
|
+
name: coverage-report
|
73
|
+
path: ./coverage
|
74
|
+
- uses: paambaati/codeclimate-action@v3.0.0
|
75
|
+
env:
|
76
|
+
# Set CC_TEST_REPORTER_ID as secret of your repo
|
77
|
+
CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
|
78
|
+
with:
|
79
|
+
debug: true
|
data/.rubocop.yml
CHANGED
data/.rubocop_codeclimate.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## [1.4.0] - 2022-06-03
|
6
|
+
### Added
|
7
|
+
- Added a filter based on error messages
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
- Updated rubocop to version 1.30
|
11
|
+
- Updated rubyzip to version 2.3
|
12
|
+
|
13
|
+
### Removed
|
14
|
+
- Removed Travis CI integration
|
15
|
+
|
5
16
|
## [1.3.0] - 2022-04-27
|
6
17
|
### Added
|
7
18
|
- Added option to export and re-import dead jobs
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Sidekiq::Undertaker
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/sidekiq-undertaker.svg)](https://badge.fury.io/rb/sidekiq-undertaker)
|
4
|
-
[![Build
|
4
|
+
[![Ruby-Build](https://github.com/ThomasKoppensteiner/sidekiq-undertaker/actions/workflows/ruby-build.yml/badge.svg)](https://github.com/ThomasKoppensteiner/sidekiq-undertaker/actions/workflows/ruby-build.yml)
|
5
5
|
[![Code Climate](https://codeclimate.com/github/ThomasKoppensteiner/sidekiq-undertaker.svg)](https://codeclimate.com/github/ThomasKoppensteiner/sidekiq-undertaker)
|
6
6
|
[![Test Coverage](https://api.codeclimate.com/v1/badges/d442eb0a323d8911661f/test_coverage)](https://codeclimate.com/github/ThomasKoppensteiner/sidekiq-undertaker/test_coverage)
|
7
7
|
[![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop-hq/rubocop)
|
@@ -83,6 +83,7 @@ The [Sidekiq-Cleaner](https://github.com/HackingHabits/sidekiq-cleaner) gem was
|
|
83
83
|
[Tout](https://github.com/Tout/sidekiq-cleaner) and [TheWudu](https://github.com/TheWudu/sidekiq-cleaner) also contributed to it.
|
84
84
|
[Zlatko Rednjak](https://github.com/Rednjak) added the initial version of the `CHANGELOG.md`.
|
85
85
|
[Lucas Dell'Isola](https://github.com/ldellisola) added the export/import feature for dead jobs.
|
86
|
+
[thoesl](https://github.com/thoesl) added the error message based filter.
|
86
87
|
|
87
88
|
For the complete list of network members have a look at the [fork overview](https://github.com/ThomasKoppensteiner/sidekiq-undertaker/network/members).
|
88
89
|
|
@@ -27,7 +27,7 @@ module Sidekiq
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
attr_reader :job_class, :time_elapsed_since_failure, :error_class, :bucket_name, :job
|
30
|
+
attr_reader :job_class, :time_elapsed_since_failure, :error_class, :error_msg, :bucket_name, :job
|
31
31
|
|
32
32
|
def initialize(args)
|
33
33
|
@job = args.fetch(:job)
|
@@ -35,12 +35,14 @@ module Sidekiq
|
|
35
35
|
@bucket_name = args.fetch(:bucket_name)
|
36
36
|
@job_class = args.fetch(:job_class, job.item["class"])
|
37
37
|
@error_class = args.fetch(:error_class, job.item["error_class"])
|
38
|
+
@error_msg = shorten_error_msg(args.fetch(:error_message, job.item["error_message"]).to_s)
|
38
39
|
end
|
39
40
|
|
40
41
|
def ==(other)
|
41
42
|
job_class == other.job_class &&
|
42
43
|
time_elapsed_since_failure == other.time_elapsed_since_failure &&
|
43
44
|
error_class == other.error_class &&
|
45
|
+
error_msg == other.error_msg &&
|
44
46
|
bucket_name == other.bucket_name &&
|
45
47
|
job_eql?(other.job)
|
46
48
|
end
|
@@ -48,7 +50,13 @@ module Sidekiq
|
|
48
50
|
|
49
51
|
private
|
50
52
|
|
51
|
-
attr_writer :job_class, :time_elapsed_since_failure, :error_class, :bucket_name, :job
|
53
|
+
attr_writer :job_class, :time_elapsed_since_failure, :error_class, :error_message, :bucket_name, :job
|
54
|
+
|
55
|
+
def shorten_error_msg(msg)
|
56
|
+
max_error_msg_length = 30
|
57
|
+
|
58
|
+
msg.length > max_error_msg_length ? "#{msg[0, max_error_msg_length]}..." : msg
|
59
|
+
end
|
52
60
|
|
53
61
|
def job_eql?(other_job) # rubocop:disable Metrics/AbcSize
|
54
62
|
job.jid == other_job.jid &&
|
@@ -7,7 +7,7 @@ module Sidekiq
|
|
7
7
|
class JobFilter
|
8
8
|
class << self
|
9
9
|
def filter_dead_jobs(filters = {})
|
10
|
-
# filters can have keys in (job_class, error_class, bucket_name)
|
10
|
+
# filters can have keys in (job_class, error_class, error_msg, bucket_name)
|
11
11
|
dead_jobs = []
|
12
12
|
Sidekiq::Undertaker::DeadJob.for_each do |dead_job|
|
13
13
|
filter_passed = true
|
@@ -26,7 +26,8 @@ module Sidekiq
|
|
26
26
|
value.nil? ||
|
27
27
|
total_dead_bucket?(filter, value) ||
|
28
28
|
all_jobs?(filter, value) ||
|
29
|
-
all_errors?(filter, value)
|
29
|
+
all_errors?(filter, value) ||
|
30
|
+
all_error_msgs?(filter, value)
|
30
31
|
end
|
31
32
|
|
32
33
|
def total_dead_bucket?(filter, value)
|
@@ -40,6 +41,10 @@ module Sidekiq
|
|
40
41
|
def all_errors?(filter, value)
|
41
42
|
filter == "error_class" && value == "all"
|
42
43
|
end
|
44
|
+
|
45
|
+
def all_error_msgs?(filter, value)
|
46
|
+
filter == "error_msg" && value == "all"
|
47
|
+
end
|
43
48
|
end
|
44
49
|
end
|
45
50
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require "sidekiq/undertaker/job_distributor"
|
4
4
|
require "sidekiq/undertaker/job_filter"
|
5
|
+
require "base64"
|
5
6
|
require "json"
|
6
7
|
require "zip"
|
7
8
|
|
@@ -15,7 +16,7 @@ module Sidekiq
|
|
15
16
|
def show_filter
|
16
17
|
store_request_params
|
17
18
|
|
18
|
-
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(
|
19
|
+
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params)
|
19
20
|
@distribution = Sidekiq::Undertaker::JobDistributor.new(@dead_jobs).group_by_job_class
|
20
21
|
@total_dead = @dead_jobs.size
|
21
22
|
|
@@ -25,17 +26,27 @@ module Sidekiq
|
|
25
26
|
def show_filter_by_job_class_bucket_name
|
26
27
|
store_request_params
|
27
28
|
|
28
|
-
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(
|
29
|
+
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params)
|
29
30
|
@distribution = Sidekiq::Undertaker::JobDistributor.new(@dead_jobs).group_by_error_class
|
30
31
|
@total_dead = @dead_jobs.size
|
31
32
|
|
32
33
|
render_result("filter_job_class.erb")
|
33
34
|
end
|
34
35
|
|
35
|
-
def
|
36
|
+
def show_filter_by_job_class_error_class_bucket_name
|
36
37
|
store_request_params
|
37
38
|
|
38
|
-
@dead_jobs
|
39
|
+
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params)
|
40
|
+
@distribution = Sidekiq::Undertaker::JobDistributor.new(@dead_jobs).group_by_error_msg
|
41
|
+
@total_dead = @dead_jobs.size
|
42
|
+
|
43
|
+
render_result("filter_job_class_error_class.erb")
|
44
|
+
end
|
45
|
+
|
46
|
+
def show_undertaker_by_job_class_error_class_error_msg_bucket_name
|
47
|
+
store_request_params
|
48
|
+
|
49
|
+
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params)
|
39
50
|
|
40
51
|
# Display dead jobs as list
|
41
52
|
@dead_jobs = @dead_jobs.map(&:job)
|
@@ -44,7 +55,7 @@ module Sidekiq
|
|
44
55
|
|
45
56
|
# Pagination
|
46
57
|
@total_dead = @dead_jobs.size
|
47
|
-
@current_page = (
|
58
|
+
@current_page = (parsed_params[:page] || 1).to_i
|
48
59
|
@count = 50 # per page
|
49
60
|
@dead_jobs = @dead_jobs[((@current_page - 1) * @count), @count]
|
50
61
|
|
@@ -57,14 +68,15 @@ module Sidekiq
|
|
57
68
|
params.delete("job_class")
|
58
69
|
params.delete("bucket_name")
|
59
70
|
params.delete("error_class")
|
71
|
+
params.delete("error_msg")
|
60
72
|
|
61
73
|
render_result("morgue.erb")
|
62
74
|
end
|
63
75
|
|
64
76
|
def post_undertaker
|
65
|
-
raise ::ArgumentError.new("Key missing") unless
|
77
|
+
raise ::ArgumentError.new("Key missing") unless parsed_params["key"]
|
66
78
|
|
67
|
-
jobs =
|
79
|
+
jobs = parsed_params["key"].map { |k| Sidekiq::DeadSet.new.fetch(*parse_params(k)).first }.compact
|
68
80
|
|
69
81
|
handle_selected_jobs jobs
|
70
82
|
rescue ::ArgumentError
|
@@ -72,20 +84,20 @@ module Sidekiq
|
|
72
84
|
end
|
73
85
|
|
74
86
|
def handle_selected_jobs(jobs)
|
75
|
-
return send_data(*prepare_data(jobs.map(&:item), EXPORT_CHUNK_SIZE)) if
|
87
|
+
return send_data(*prepare_data(jobs.map(&:item), EXPORT_CHUNK_SIZE)) if parsed_params["export"]
|
76
88
|
|
77
|
-
if
|
89
|
+
if parsed_params["retry"]
|
78
90
|
jobs.each(&:retry)
|
79
|
-
elsif
|
91
|
+
elsif parsed_params["delete"]
|
80
92
|
jobs.each(&:delete)
|
81
93
|
end
|
82
94
|
|
83
95
|
redirect redirect_path(request)
|
84
96
|
end
|
85
97
|
|
86
|
-
def
|
98
|
+
def post_undertaker_job_class_error_class_error_msg_bucket_name_delete
|
87
99
|
store_request_params
|
88
|
-
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(
|
100
|
+
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params)
|
89
101
|
@dead_jobs.each do |dead_job|
|
90
102
|
dead_job.job.delete
|
91
103
|
end
|
@@ -93,10 +105,10 @@ module Sidekiq
|
|
93
105
|
redirect redirect_path(request)
|
94
106
|
end
|
95
107
|
|
96
|
-
def
|
108
|
+
def post_undertaker_job_class_error_class_error_msg_bucket_name_retry
|
97
109
|
store_request_params
|
98
110
|
|
99
|
-
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(
|
111
|
+
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params)
|
100
112
|
@dead_jobs.each do |dead_job|
|
101
113
|
dead_job.job.retry
|
102
114
|
end
|
@@ -104,18 +116,18 @@ module Sidekiq
|
|
104
116
|
redirect redirect_path(request)
|
105
117
|
end
|
106
118
|
|
107
|
-
def
|
119
|
+
def post_undertaker_job_class_error_class_error_msg_bucket_name_export
|
108
120
|
store_request_params
|
109
121
|
|
110
|
-
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(
|
122
|
+
@dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(parsed_params)
|
111
123
|
send_data(*prepare_data(@dead_jobs.map { |j| j.job.item }, EXPORT_CHUNK_SIZE))
|
112
124
|
end
|
113
125
|
|
114
126
|
def post_import_jobs
|
115
|
-
file =
|
127
|
+
file = parsed_params["upload_file"]
|
116
128
|
raise ::ArgumentError.new("The file is not a json") if file.nil? || file[:type] != "application/json"
|
117
129
|
|
118
|
-
data =
|
130
|
+
data = parsed_params["upload_file"][:tempfile].read
|
119
131
|
dead_set = Sidekiq::DeadSet.new
|
120
132
|
|
121
133
|
JSON.parse(data).each do |job|
|
@@ -131,9 +143,18 @@ module Sidekiq
|
|
131
143
|
end
|
132
144
|
|
133
145
|
def store_request_params
|
134
|
-
@req_job_class =
|
135
|
-
@req_bucket_name =
|
136
|
-
@req_error_class =
|
146
|
+
@req_job_class = parsed_params["job_class"]
|
147
|
+
@req_bucket_name = parsed_params["bucket_name"]
|
148
|
+
@req_error_class = parsed_params["error_class"]
|
149
|
+
@req_error_msg = parsed_params["error_msg"]
|
150
|
+
end
|
151
|
+
|
152
|
+
def parsed_params
|
153
|
+
@parsed_params ||= if params["error_msg"] && params["error_msg"] != "all"
|
154
|
+
params.merge("error_msg" => Base64.urlsafe_decode64(params["error_msg"]))
|
155
|
+
else
|
156
|
+
params
|
157
|
+
end
|
137
158
|
end
|
138
159
|
|
139
160
|
def view_path
|
@@ -15,25 +15,27 @@ module Sidekiq
|
|
15
15
|
app.get "/undertaker/filter/:job_class/:bucket_name" do
|
16
16
|
show_filter_by_job_class_bucket_name
|
17
17
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
app.get "/undertaker/filter/:job_class/:error_class/:bucket_name" do
|
19
|
+
show_filter_by_job_class_error_class_bucket_name
|
20
|
+
end
|
21
|
+
app.get "/undertaker/morgue/:job_class/:error_class/:error_msg/:bucket_name" do
|
22
|
+
show_undertaker_by_job_class_error_class_error_msg_bucket_name
|
21
23
|
end
|
22
24
|
|
23
25
|
app.post "/undertaker/morgue" do
|
24
26
|
post_undertaker
|
25
27
|
end
|
26
28
|
|
27
|
-
app.post "/undertaker/morgue/:job_class/:error_class/:bucket_name/delete" do
|
28
|
-
|
29
|
+
app.post "/undertaker/morgue/:job_class/:error_class/:error_msg/:bucket_name/delete" do
|
30
|
+
post_undertaker_job_class_error_class_error_msg_bucket_name_delete
|
29
31
|
end
|
30
32
|
|
31
|
-
app.post "/undertaker/morgue/:job_class/:error_class/:bucket_name/retry" do
|
32
|
-
|
33
|
+
app.post "/undertaker/morgue/:job_class/:error_class/:error_msg/:bucket_name/retry" do
|
34
|
+
post_undertaker_job_class_error_class_error_msg_bucket_name_retry
|
33
35
|
end
|
34
36
|
|
35
|
-
app.post "/undertaker/morgue/:job_class/:error_class/:bucket_name/export" do
|
36
|
-
|
37
|
+
app.post "/undertaker/morgue/:job_class/:error_class/:error_msg/:bucket_name/export" do
|
38
|
+
post_undertaker_job_class_error_class_error_msg_bucket_name_export
|
37
39
|
end
|
38
40
|
|
39
41
|
app.post "/undertaker/import_jobs" do
|
data/sidekiq-undertaker.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
"source_code_uri" => "https://github.com/ThomasKoppensteiner/sidekiq-undertaker",
|
24
24
|
"changelog_uri" => "https://github.com/ThomasKoppensteiner/sidekiq-undertaker/blob/master/CHANGELOG.md",
|
25
25
|
"bug_tracker_uri" => "https://github.com/ThomasKoppensteiner/sidekiq-undertaker/issues",
|
26
|
-
"build_status_uri" => "https://
|
26
|
+
"build_status_uri" => "https://github.com/ThomasKoppensteiner/sidekiq-undertaker/actions/workflows/ruby-build.yml",
|
27
27
|
"rubygems_mfa_required" => "true"
|
28
28
|
}
|
29
29
|
|
@@ -31,7 +31,6 @@ Gem::Specification.new do |spec|
|
|
31
31
|
|
32
32
|
spec.files = `git ls-files -z`.split("\x0")
|
33
33
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
34
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
35
34
|
spec.require_paths = ["lib", "lib/sidekiq/undertaker"]
|
36
35
|
|
37
36
|
spec.add_development_dependency "bundler", ">= 1.17", "<3"
|
@@ -47,14 +46,14 @@ Gem::Specification.new do |spec|
|
|
47
46
|
spec.add_development_dependency "rspec-mocks", "~> 3.8"
|
48
47
|
spec.add_development_dependency "rspec-sidekiq", "~> 3.0"
|
49
48
|
spec.add_development_dependency "rt_rubocop_defaults", "~> 2.3"
|
50
|
-
spec.add_development_dependency "rubocop", "~> 1.
|
49
|
+
spec.add_development_dependency "rubocop", "~> 1.30"
|
51
50
|
spec.add_development_dependency "rubocop-rake", "~> 0.5"
|
52
51
|
spec.add_development_dependency "rubocop-rspec", "~> 2.0"
|
53
52
|
spec.add_development_dependency "rubocop_runner", "~> 2.1"
|
54
|
-
spec.add_development_dependency "simplecov", "~> 0.
|
53
|
+
spec.add_development_dependency "simplecov", "~> 0.21"
|
55
54
|
spec.add_development_dependency "sinatra", "~> 2.0"
|
56
55
|
spec.add_development_dependency "timecop", "~> 0.9"
|
57
56
|
|
58
|
-
spec.add_runtime_dependency "rubyzip"
|
57
|
+
spec.add_runtime_dependency "rubyzip", "~> 2.3"
|
59
58
|
spec.add_runtime_dependency "sidekiq", ">= 6.4", "< 7"
|
60
59
|
end
|
@@ -177,7 +177,7 @@
|
|
177
177
|
</thead>
|
178
178
|
|
179
179
|
<tr>
|
180
|
-
<td><a href='/sidekiq/undertaker/morgue/all/all/total_dead'> all</a></td>
|
180
|
+
<td><a href='/sidekiq/undertaker/morgue/all/all/all/total_dead'> all</a></td>
|
181
181
|
<td><a href='/sidekiq/undertaker/filter/all/total_dead'>4</a></td>
|
182
182
|
<td><a href='/sidekiq/undertaker/filter/all/1_hour'>4</a></td>
|
183
183
|
<td><a href='/sidekiq/undertaker/filter/all/3_hours'>0</a></td>
|
@@ -188,7 +188,7 @@
|
|
188
188
|
</tr>
|
189
189
|
|
190
190
|
<tr>
|
191
|
-
<td><a href='/sidekiq/undertaker/morgue/HardWorker/all/total_dead'> HardWorker</a></td>
|
191
|
+
<td><a href='/sidekiq/undertaker/morgue/HardWorker/all/all/total_dead'> HardWorker</a></td>
|
192
192
|
<td><a href='/sidekiq/undertaker/filter/HardWorker/total_dead'>3</a></td>
|
193
193
|
<td><a href='/sidekiq/undertaker/filter/HardWorker/1_hour'>3</a></td>
|
194
194
|
<td><a href='/sidekiq/undertaker/filter/HardWorker/3_hours'>0</a></td>
|
@@ -199,7 +199,7 @@
|
|
199
199
|
</tr>
|
200
200
|
|
201
201
|
<tr>
|
202
|
-
<td><a href='/sidekiq/undertaker/morgue/HardWorker1/all/total_dead'> HardWorker1</a></td>
|
202
|
+
<td><a href='/sidekiq/undertaker/morgue/HardWorker1/all/all/total_dead'> HardWorker1</a></td>
|
203
203
|
<td><a href='/sidekiq/undertaker/filter/HardWorker1/total_dead'>1</a></td>
|
204
204
|
<td><a href='/sidekiq/undertaker/filter/HardWorker1/1_hour'>1</a></td>
|
205
205
|
<td><a href='/sidekiq/undertaker/filter/HardWorker1/3_hours'>0</a></td>
|
@@ -178,36 +178,36 @@
|
|
178
178
|
</thead>
|
179
179
|
|
180
180
|
<tr>
|
181
|
-
<td><a href='/sidekiq/undertaker/morgue/HardWorker/all/total_dead'>all</a></td>
|
182
|
-
<td><a href='/sidekiq/undertaker/
|
183
|
-
<td><a href='/sidekiq/undertaker/
|
184
|
-
<td><a href='/sidekiq/undertaker/
|
185
|
-
<td><a href='/sidekiq/undertaker/
|
186
|
-
<td><a href='/sidekiq/undertaker/
|
187
|
-
<td><a href='/sidekiq/undertaker/
|
188
|
-
<td><a href='/sidekiq/undertaker/
|
181
|
+
<td><a href='/sidekiq/undertaker/morgue/HardWorker/all/all/total_dead'>all</a></td>
|
182
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/total_dead'>3</a></td>
|
183
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/1_hour'>3</a></td>
|
184
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/3_hours'>0</a></td>
|
185
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/1_day'>0</a></td>
|
186
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/3_days'>0</a></td>
|
187
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/1_week'>0</a></td>
|
188
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/older'>0</a></td>
|
189
189
|
</tr>
|
190
190
|
|
191
191
|
<tr>
|
192
|
-
<td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/total_dead'>RuntimeError</a></td>
|
193
|
-
<td><a href='/sidekiq/undertaker/
|
194
|
-
<td><a href='/sidekiq/undertaker/
|
195
|
-
<td><a href='/sidekiq/undertaker/
|
196
|
-
<td><a href='/sidekiq/undertaker/
|
197
|
-
<td><a href='/sidekiq/undertaker/
|
198
|
-
<td><a href='/sidekiq/undertaker/
|
199
|
-
<td><a href='/sidekiq/undertaker/
|
192
|
+
<td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/all/total_dead'>RuntimeError</a></td>
|
193
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/total_dead'>2</a></td>
|
194
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/1_hour'>2</a></td>
|
195
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/3_hours'>0</a></td>
|
196
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/1_day'>0</a></td>
|
197
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/3_days'>0</a></td>
|
198
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/1_week'>0</a></td>
|
199
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/older'>0</a></td>
|
200
200
|
</tr>
|
201
201
|
|
202
202
|
<tr>
|
203
|
-
<td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/total_dead'>NoMethodError</a></td>
|
204
|
-
<td><a href='/sidekiq/undertaker/
|
205
|
-
<td><a href='/sidekiq/undertaker/
|
206
|
-
<td><a href='/sidekiq/undertaker/
|
207
|
-
<td><a href='/sidekiq/undertaker/
|
208
|
-
<td><a href='/sidekiq/undertaker/
|
209
|
-
<td><a href='/sidekiq/undertaker/
|
210
|
-
<td><a href='/sidekiq/undertaker/
|
203
|
+
<td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/all/total_dead'>NoMethodError</a></td>
|
204
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/total_dead'>1</a></td>
|
205
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/1_hour'>1</a></td>
|
206
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/3_hours'>0</a></td>
|
207
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/1_day'>0</a></td>
|
208
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/3_days'>0</a></td>
|
209
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/1_week'>0</a></td>
|
210
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/older'>0</a></td>
|
211
211
|
</tr>
|
212
212
|
|
213
213
|
</table>
|
@@ -178,36 +178,36 @@
|
|
178
178
|
</thead>
|
179
179
|
|
180
180
|
<tr>
|
181
|
-
<td><a href='/sidekiq/undertaker/morgue/HardWorker/all/total_dead'>all</a></td>
|
182
|
-
<td><a href='/sidekiq/undertaker/
|
183
|
-
<td><a href='/sidekiq/undertaker/
|
184
|
-
<td><a href='/sidekiq/undertaker/
|
185
|
-
<td><a href='/sidekiq/undertaker/
|
186
|
-
<td><a href='/sidekiq/undertaker/
|
187
|
-
<td><a href='/sidekiq/undertaker/
|
188
|
-
<td><a href='/sidekiq/undertaker/
|
181
|
+
<td><a href='/sidekiq/undertaker/morgue/HardWorker/all/all/total_dead'>all</a></td>
|
182
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/total_dead'>3</a></td>
|
183
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/1_hour'>3</a></td>
|
184
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/3_hours'>0</a></td>
|
185
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/1_day'>0</a></td>
|
186
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/3_days'>0</a></td>
|
187
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/1_week'>0</a></td>
|
188
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/all/older'>0</a></td>
|
189
189
|
</tr>
|
190
190
|
|
191
191
|
<tr>
|
192
|
-
<td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/total_dead'>RuntimeError</a></td>
|
193
|
-
<td><a href='/sidekiq/undertaker/
|
194
|
-
<td><a href='/sidekiq/undertaker/
|
195
|
-
<td><a href='/sidekiq/undertaker/
|
196
|
-
<td><a href='/sidekiq/undertaker/
|
197
|
-
<td><a href='/sidekiq/undertaker/
|
198
|
-
<td><a href='/sidekiq/undertaker/
|
199
|
-
<td><a href='/sidekiq/undertaker/
|
192
|
+
<td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/all/total_dead'>RuntimeError</a></td>
|
193
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/total_dead'>2</a></td>
|
194
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/1_hour'>2</a></td>
|
195
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/3_hours'>0</a></td>
|
196
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/1_day'>0</a></td>
|
197
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/3_days'>0</a></td>
|
198
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/1_week'>0</a></td>
|
199
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/RuntimeError/older'>0</a></td>
|
200
200
|
</tr>
|
201
201
|
|
202
202
|
<tr>
|
203
|
-
<td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/total_dead'>NoMethodError</a></td>
|
204
|
-
<td><a href='/sidekiq/undertaker/
|
205
|
-
<td><a href='/sidekiq/undertaker/
|
206
|
-
<td><a href='/sidekiq/undertaker/
|
207
|
-
<td><a href='/sidekiq/undertaker/
|
208
|
-
<td><a href='/sidekiq/undertaker/
|
209
|
-
<td><a href='/sidekiq/undertaker/
|
210
|
-
<td><a href='/sidekiq/undertaker/
|
203
|
+
<td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/all/total_dead'>NoMethodError</a></td>
|
204
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/total_dead'>1</a></td>
|
205
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/1_hour'>1</a></td>
|
206
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/3_hours'>0</a></td>
|
207
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/1_day'>0</a></td>
|
208
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/3_days'>0</a></td>
|
209
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/1_week'>0</a></td>
|
210
|
+
<td><a href='/sidekiq/undertaker/filter/HardWorker/NoMethodError/older'>0</a></td>
|
211
211
|
</tr>
|
212
212
|
|
213
213
|
</table>
|