sidekiq-undertaker 1.3.0 → 1.4.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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-build.yml +30 -2
  3. data/.rubocop.yml +4 -0
  4. data/.rubocop_codeclimate.yml +9 -0
  5. data/CHANGELOG.md +11 -0
  6. data/README.md +2 -1
  7. data/lib/sidekiq/undertaker/dead_job.rb +10 -2
  8. data/lib/sidekiq/undertaker/job_distributor.rb +4 -0
  9. data/lib/sidekiq/undertaker/job_filter.rb +7 -2
  10. data/lib/sidekiq/undertaker/version.rb +1 -1
  11. data/lib/sidekiq/undertaker/web_extension/api_helpers.rb +42 -21
  12. data/lib/sidekiq/undertaker/web_extension.rb +11 -9
  13. data/sidekiq-undertaker.gemspec +4 -5
  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 +3 -3
  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 +24 -24
  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 +24 -24
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. data/spec/sidekiq/undertaker/dead_jobs_spec.rb +7 -4
  25. data/spec/sidekiq/undertaker/job_distributor_spec.rb +38 -16
  26. data/spec/sidekiq/undertaker/job_filter_spec.rb +26 -9
  27. data/spec/sidekiq/undertaker/web_extension_spec.rb +60 -17
  28. data/spec/spec_helper.rb +4 -0
  29. data/web/views/filter.erb +1 -1
  30. data/web/views/filter_job_class.erb +8 -8
  31. data/web/views/filter_job_class_error_class.erb +36 -0
  32. data/web/views/morgue.erb +4 -3
  33. metadata +21 -29
  34. data/.travis.yml +0 -51
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb255bb741814575247793b7ddfdd7dfa6fe5c0d86a21df3b33f315209beef53
4
- data.tar.gz: fc6b4970d6e7d2c8410525c76fd97fc1c98943a0f9bb381807946829e38180ab
3
+ metadata.gz: c9faade9f819fcaff3bc2246d68197d085f6f90b10b82f38290f5a3cc5752f07
4
+ data.tar.gz: c08b3349474057a180eecf4cc64b0bb15f43112b264833bc6f9441b5ee139549
5
5
  SHA512:
6
- metadata.gz: '0162683d05be1edf9d3dc362a7b7c543fc4d0d6891945540637cc03dcb919a1780003ed55503f3cbc3af8ab0ef3a03ee28bfe6d6575dac4610ee623dd373b3b1'
7
- data.tar.gz: 610f3d98e380193606e37c74953dd53b00c79ae42fd6f091f940f27e9b61d55305df546a207676b8139a8d41719ba0fd3336cf87b5f35ec0b16b43283796c64a
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.0'
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 spec
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
@@ -7,3 +7,7 @@ inherit_from: .rubocop_todo.yml
7
7
 
8
8
  AllCops:
9
9
  TargetRubyVersion: 2.5
10
+
11
+ Layout/LineLength:
12
+ Exclude:
13
+ - 'sidekiq-undertaker.gemspec'
@@ -1,5 +1,14 @@
1
1
  require:
2
+ - rubocop-rake
2
3
  - rubocop-rspec
4
+
3
5
  inherit_from:
4
6
  - .rt_rubocop_defaults.yml
5
7
  - .rubocop_todo.yml
8
+
9
+ AllCops:
10
+ TargetRubyVersion: 2.5
11
+
12
+ Layout/LineLength:
13
+ Exclude:
14
+ - 'sidekiq-undertaker.gemspec'
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 Status](https://travis-ci.org/ThomasKoppensteiner/sidekiq-undertaker.svg?branch=master)](https://travis-ci.org/ThomasKoppensteiner/sidekiq-undertaker)
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 &&
@@ -19,6 +19,10 @@ module Sidekiq
19
19
  group_by(:error_class)
20
20
  end
21
21
 
22
+ def group_by_error_msg
23
+ group_by(:error_msg)
24
+ end
25
+
22
26
  private
23
27
 
24
28
  def distribute
@@ -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,6 @@
2
2
 
3
3
  module Sidekiq
4
4
  module Undertaker
5
- VERSION = "1.3.0"
5
+ VERSION = "1.4.0"
6
6
  end
7
7
  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(params)
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(params)
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 show_undertaker_by_job_class_error_class_bucket_name
36
+ def show_filter_by_job_class_error_class_bucket_name
36
37
  store_request_params
37
38
 
38
- @dead_jobs = Sidekiq::Undertaker::JobFilter.filter_dead_jobs(params)
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 = (params[:page] || 1).to_i
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 params["key"]
77
+ raise ::ArgumentError.new("Key missing") unless parsed_params["key"]
66
78
 
67
- jobs = params["key"].map { |k| Sidekiq::DeadSet.new.fetch(*parse_params(k)).first }.compact
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 params["export"]
87
+ return send_data(*prepare_data(jobs.map(&:item), EXPORT_CHUNK_SIZE)) if parsed_params["export"]
76
88
 
77
- if params["retry"]
89
+ if parsed_params["retry"]
78
90
  jobs.each(&:retry)
79
- elsif params["delete"]
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 post_undertaker_job_class_error_class_buckent_name_delete
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(params)
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 post_undertaker_job_class_error_class_buckent_name_retry
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(params)
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 post_undertaker_job_class_error_class_buckent_name_export
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(params)
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 = params["upload_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 = params["upload_file"][:tempfile].read
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 = params["job_class"]
135
- @req_bucket_name = params["bucket_name"]
136
- @req_error_class = params["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
- app.get "/undertaker/morgue/:job_class/:error_class/:bucket_name" do
20
- show_undertaker_by_job_class_error_class_bucket_name
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
- post_undertaker_job_class_error_class_buckent_name_delete
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
- post_undertaker_job_class_error_class_buckent_name_retry
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
- post_undertaker_job_class_error_class_buckent_name_export
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
@@ -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://travis-ci.org/ThomasKoppensteiner/sidekiq-undertaker",
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.8"
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.14"
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/morgue/HardWorker/all/total_dead'>3</a></td>
183
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_hour'>3</a></td>
184
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/3_hours'>0</a></td>
185
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_day'>0</a></td>
186
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/3_days'>0</a></td>
187
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_week'>0</a></td>
188
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/older'>0</a></td>
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/morgue/HardWorker/RuntimeError/total_dead'>2</a></td>
194
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour'>2</a></td>
195
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/3_hours'>0</a></td>
196
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_day'>0</a></td>
197
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/3_days'>0</a></td>
198
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_week'>0</a></td>
199
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/older'>0</a></td>
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/morgue/HardWorker/NoMethodError/total_dead'>1</a></td>
205
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_hour'>1</a></td>
206
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/3_hours'>0</a></td>
207
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_day'>0</a></td>
208
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/3_days'>0</a></td>
209
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_week'>0</a></td>
210
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/older'>0</a></td>
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/morgue/HardWorker/all/total_dead'>3</a></td>
183
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_hour'>3</a></td>
184
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/3_hours'>0</a></td>
185
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_day'>0</a></td>
186
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/3_days'>0</a></td>
187
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/1_week'>0</a></td>
188
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/all/older'>0</a></td>
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/morgue/HardWorker/RuntimeError/total_dead'>2</a></td>
194
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_hour'>2</a></td>
195
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/3_hours'>0</a></td>
196
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_day'>0</a></td>
197
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/3_days'>0</a></td>
198
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/1_week'>0</a></td>
199
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/RuntimeError/older'>0</a></td>
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/morgue/HardWorker/NoMethodError/total_dead'>1</a></td>
205
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_hour'>1</a></td>
206
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/3_hours'>0</a></td>
207
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_day'>0</a></td>
208
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/3_days'>0</a></td>
209
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/1_week'>0</a></td>
210
- <td><a href='/sidekiq/undertaker/morgue/HardWorker/NoMethodError/older'>0</a></td>
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>