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.
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>