sidekiq-throttled 0.15.0 → 0.16.2

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -0
  3. data/.github/workflows/ci.yml +11 -10
  4. data/.rubocop.yml +8 -7
  5. data/.rubocop_todo.yml +39 -3
  6. data/Appraisals +8 -12
  7. data/CHANGES.md +44 -0
  8. data/Gemfile +7 -5
  9. data/LICENSE.md +1 -0
  10. data/README.md +36 -32
  11. data/Rakefile +1 -1
  12. data/gemfiles/sidekiq_6.0.gemfile +7 -5
  13. data/gemfiles/sidekiq_6.1.gemfile +7 -5
  14. data/gemfiles/sidekiq_6.2.gemfile +7 -5
  15. data/gemfiles/sidekiq_6.3.gemfile +7 -5
  16. data/gemfiles/{sidekiq_5.2.gemfile → sidekiq_6.4.gemfile} +8 -6
  17. data/gemfiles/{sidekiq_5.1.gemfile → sidekiq_6.5.gemfile} +8 -6
  18. data/lib/sidekiq/throttled/communicator/callbacks.rb +1 -1
  19. data/lib/sidekiq/throttled/communicator/exception_handler.rb +25 -0
  20. data/lib/sidekiq/throttled/communicator/listener.rb +1 -1
  21. data/lib/sidekiq/throttled/communicator.rb +1 -1
  22. data/lib/sidekiq/throttled/configuration.rb +4 -4
  23. data/lib/sidekiq/throttled/expirable_list.rb +2 -5
  24. data/lib/sidekiq/throttled/fetch/unit_of_work.rb +7 -2
  25. data/lib/sidekiq/throttled/fetch.rb +5 -1
  26. data/lib/sidekiq/throttled/job.rb +128 -0
  27. data/lib/sidekiq/throttled/strategy/base.rb +6 -2
  28. data/lib/sidekiq/throttled/version.rb +1 -1
  29. data/lib/sidekiq/throttled/web/stats.rb +5 -4
  30. data/lib/sidekiq/throttled/worker.rb +6 -121
  31. data/lib/sidekiq/throttled.rb +15 -9
  32. data/{.rubocop → rubocop}/layout.yml +0 -0
  33. data/{.rubocop → rubocop}/lint.yml +0 -0
  34. data/{.rubocop → rubocop}/metrics.yml +0 -0
  35. data/{.rubocop → rubocop}/performance.yml +0 -0
  36. data/{.rubocop → rubocop}/rspec.yml +1 -1
  37. data/{.rubocop → rubocop}/style.yml +0 -0
  38. data/sidekiq-throttled.gemspec +6 -4
  39. metadata +20 -17
  40. data/gemfiles/sidekiq_5.0.gemfile +0 -31
@@ -2,7 +2,7 @@
2
2
 
3
3
  require "singleton"
4
4
 
5
- require "sidekiq/exception_handler"
5
+ require "sidekiq/throttled/communicator/exception_handler"
6
6
  require "sidekiq/throttled/communicator/listener"
7
7
  require "sidekiq/throttled/communicator/callbacks"
8
8
 
@@ -21,14 +21,14 @@ module Sidekiq
21
21
  # Instructs throttler to lookup strategies in parent classes, if there's
22
22
  # no own strategy:
23
23
  #
24
- # class Foo
25
- # include Sidekiq::Worker
26
- # include Sidekiq::Worker::Throttled
24
+ # class FooJob
25
+ # include Sidekiq::Job
26
+ # include Sidekiq::Throttled::Job
27
27
  #
28
28
  # sidekiq_throttle :concurrency => { :limit => 42 }
29
29
  # end
30
30
  #
31
- # class Bar < Foo
31
+ # class BarJob < FooJob
32
32
  # end
33
33
  #
34
34
  # By default in the example above, `Bar` won't have throttling options.
@@ -2,8 +2,6 @@
2
2
 
3
3
  require "monitor"
4
4
 
5
- require "concurrent/utility/monotonic_time"
6
-
7
5
  module Sidekiq
8
6
  module Throttled
9
7
  # List that tracks when elements were added and enumerates over those not
@@ -24,7 +22,6 @@ module Sidekiq
24
22
  # It does not deduplicates elements. Eviction happens only upon elements
25
23
  # retrieval (see {#each}).
26
24
  #
27
- # @see http://ruby-concurrency.github.io/concurrent-ruby/Concurrent.html#monotonic_time-class_method
28
25
  # @see https://ruby-doc.org/core/Process.html#method-c-clock_gettime
29
26
  # @see https://linux.die.net/man/3/clock_gettime
30
27
  #
@@ -44,7 +41,7 @@ module Sidekiq
44
41
  # @params element [Object]
45
42
  # @return [ExpirableList] self
46
43
  def <<(element)
47
- @mon.synchronize { @arr << [Concurrent.monotonic_time, element] }
44
+ @mon.synchronize { @arr << [::Process.clock_gettime(::Process::CLOCK_MONOTONIC), element] }
48
45
  self
49
46
  end
50
47
 
@@ -58,7 +55,7 @@ module Sidekiq
58
55
  return to_enum __method__ unless block_given?
59
56
 
60
57
  @mon.synchronize do
61
- horizon = Concurrent.monotonic_time - @ttl
58
+ horizon = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) - @ttl
62
59
 
63
60
  # drop all elements older than horizon
64
61
  @arr.shift while @arr[0] && @arr[0][0] < horizon
@@ -49,9 +49,14 @@ module Sidekiq
49
49
  # process was terminated. It is a reverse of whatever fetcher was
50
50
  # doing to pull the job out of queue.
51
51
  #
52
+ # @param [Redis] pipelined connection for requeing via Redis#pipelined
52
53
  # @return [void]
53
- def requeue
54
- Sidekiq.redis { |conn| conn.rpush(QueueName.expand(queue_name), job) }
54
+ def requeue(pipeline = nil)
55
+ if pipeline
56
+ pipeline.rpush(QueueName.expand(queue_name), job)
57
+ else
58
+ Sidekiq.redis { |conn| conn.rpush(QueueName.expand(queue_name), job) }
59
+ end
55
60
  end
56
61
 
57
62
  # Pushes job back to the head of the queue, so that job won't be tried
@@ -22,7 +22,11 @@ module Sidekiq
22
22
  return if units.empty?
23
23
 
24
24
  Sidekiq.logger.debug { "Re-queueing terminated jobs" }
25
- Sidekiq.redis { |conn| conn.pipelined { units.each(&:requeue) } }
25
+ Sidekiq.redis do |conn|
26
+ conn.pipelined do |pipeline|
27
+ units.each { |unit| unit.requeue(pipeline) }
28
+ end
29
+ end
26
30
  Sidekiq.logger.info("Pushed #{units.size} jobs back to Redis")
27
31
  rescue => e
28
32
  Sidekiq.logger.warn("Failed to requeue #{units.size} jobs: #{e}")
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ # internal
4
+ require "sidekiq/throttled/registry"
5
+
6
+ module Sidekiq
7
+ module Throttled
8
+ # Adds helpers to your worker classes
9
+ #
10
+ # @example Usage
11
+ #
12
+ # class MyJob
13
+ # include Sidekiq::Job
14
+ # include Sidekiq::Throttled::Job
15
+ #
16
+ # sidkiq_options :queue => :my_queue
17
+ # sidekiq_throttle :threshold => { :limit => 123, :period => 1.hour }
18
+ #
19
+ # def perform
20
+ # # ...
21
+ # end
22
+ # end
23
+ #
24
+ # @see ClassMethods
25
+ module Job
26
+ # Extends worker class with {ClassMethods}.
27
+ #
28
+ # @note Using `included` hook with extending worker with {ClassMethods}
29
+ # in order to make API inline with `include Sidekiq::Job`.
30
+ #
31
+ # @private
32
+ def self.included(worker)
33
+ worker.send(:extend, ClassMethods)
34
+ end
35
+
36
+ # Helper methods added to the singleton class of destination
37
+ module ClassMethods
38
+ # Registers some strategy for the worker.
39
+ #
40
+ # @example Allow max 123 MyJob jobs per hour
41
+ #
42
+ # class MyJob
43
+ # include Sidekiq::Job
44
+ # include Sidekiq::Throttled::Job
45
+ #
46
+ # sidekiq_throttle({
47
+ # :threshold => { :limit => 123, :period => 1.hour }
48
+ # })
49
+ # end
50
+ #
51
+ # @example Allow max 10 concurrently running MyJob jobs
52
+ #
53
+ # class MyJob
54
+ # include Sidekiq::Job
55
+ # include Sidekiq::Throttled::Job
56
+ #
57
+ # sidekiq_throttle({
58
+ # :concurrency => { :limit => 10 }
59
+ # })
60
+ # end
61
+ #
62
+ # @example Allow max 10 concurrent MyJob jobs and max 123 per hour
63
+ #
64
+ # class MyJob
65
+ # include Sidekiq::Job
66
+ # include Sidekiq::Throttled::Job
67
+ #
68
+ # sidekiq_throttle({
69
+ # :threshold => { :limit => 123, :period => 1.hour },
70
+ # :concurrency => { :limit => 10 }
71
+ # })
72
+ # end
73
+ #
74
+ # @see Registry.add
75
+ # @return [void]
76
+ def sidekiq_throttle(**kwargs)
77
+ Registry.add(self, **kwargs)
78
+ end
79
+
80
+ # Adds current worker to preconfigured throttling strategy. Allows
81
+ # sharing same pool for multiple workers.
82
+ #
83
+ # First of all we need to create shared throttling strategy:
84
+ #
85
+ # # Create google_api throttling strategy
86
+ # Sidekiq::Throttled::Registry.add(:google_api, {
87
+ # :threshold => { :limit => 123, :period => 1.hour },
88
+ # :concurrency => { :limit => 10 }
89
+ # })
90
+ #
91
+ # Now we can assign it to our workers:
92
+ #
93
+ # class FetchProfileJob
94
+ # include Sidekiq::Job
95
+ # include Sidekiq::Throttled::Job
96
+ #
97
+ # sidekiq_throttle_as :google_api
98
+ # end
99
+ #
100
+ # class FetchCommentsJob
101
+ # include Sidekiq::Job
102
+ # include Sidekiq::Throttled::Job
103
+ #
104
+ # sidekiq_throttle_as :google_api
105
+ # end
106
+ #
107
+ # With the above configuration we ensure that there are maximum 10
108
+ # concurrently running jobs of FetchProfileJob or FetchCommentsJob
109
+ # allowed. And only 123 jobs of those are executed per hour.
110
+ #
111
+ # In other words, it will allow:
112
+ #
113
+ # - only `X` concurrent `FetchProfileJob`s
114
+ # - max `XX` `FetchProfileJob` per hour
115
+ # - only `Y` concurrent `FetchCommentsJob`s
116
+ # - max `YY` `FetchCommentsJob` per hour
117
+ #
118
+ # Where `(X + Y) == 10` and `(XX + YY) == 123`
119
+ #
120
+ # @see Registry.add_alias
121
+ # @return [void]
122
+ def sidekiq_throttle_as(name)
123
+ Registry.add_alias(self, name)
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -12,8 +12,12 @@ module Sidekiq
12
12
 
13
13
  def key(job_args)
14
14
  key = @base_key.dup
15
- key << ":#{@key_suffix.call(*job_args)}" if @key_suffix
16
- key
15
+ return key unless @key_suffix
16
+
17
+ key << ":#{@key_suffix.call(*job_args)}"
18
+ rescue => e
19
+ Sidekiq.logger.error "Failed to get key suffix: #{e}"
20
+ raise e
17
21
  end
18
22
  end
19
23
  end
@@ -3,6 +3,6 @@
3
3
  module Sidekiq
4
4
  module Throttled
5
5
  # Gem version
6
- VERSION = "0.15.0"
6
+ VERSION = "0.16.2"
7
7
  end
8
8
  end
@@ -37,7 +37,8 @@ module Sidekiq
37
37
  percentile = 100.00 * int / max
38
38
  lvl = if 80 <= percentile then "danger"
39
39
  elsif 60 <= percentile then "warning"
40
- else "success"
40
+ else
41
+ "success"
41
42
  end
42
43
 
43
44
  %(<span class="label label-#{lvl}">#{int}</span>)
@@ -61,10 +62,10 @@ module Sidekiq
61
62
 
62
63
  # @return [String]
63
64
  def humanize_integer(int)
64
- digits = int.to_s.split ""
65
- str = digits.shift(digits.count % 3).join("")
65
+ digits = int.to_s.chars
66
+ str = digits.shift(digits.count % 3).join
66
67
 
67
- str << " " << digits.shift(3).join("") while digits.count.positive?
68
+ str << " " << digits.shift(3).join while digits.count.positive?
68
69
 
69
70
  str.strip
70
71
  end
@@ -1,128 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # internal
4
- require "sidekiq/throttled/registry"
3
+ require "sidekiq/throttled/job"
5
4
 
6
5
  module Sidekiq
7
6
  module Throttled
8
- # Adds helpers to your worker classes
9
- #
10
- # @example Usage
11
- #
12
- # class MyWorker
13
- # include Sidekiq::Worker
14
- # include Sidekiq::Throttled::Worker
15
- #
16
- # sidkiq_options :queue => :my_queue
17
- # sidekiq_throttle :threshold => { :limit => 123, :period => 1.hour }
18
- #
19
- # def perform
20
- # # ...
21
- # end
22
- # end
23
- #
24
- # @see ClassMethods
25
- module Worker
26
- # Extends worker class with {ClassMethods}.
27
- #
28
- # @note Using `included` hook with extending worker with {ClassMethods}
29
- # in order to make API inline with `include Sidekiq::Worker`.
30
- #
31
- # @private
32
- def self.included(worker)
33
- worker.send(:extend, ClassMethods)
34
- end
35
-
36
- # Helper methods added to the singleton class of destination
37
- module ClassMethods
38
- # Registers some strategy for the worker.
39
- #
40
- # @example Allow max 123 MyWorker jobs per hour
41
- #
42
- # class MyWorker
43
- # include Sidekiq::Worker
44
- # include Sidekiq::Throttled::Worker
45
- #
46
- # sidekiq_throttle({
47
- # :threshold => { :limit => 123, :period => 1.hour }
48
- # })
49
- # end
50
- #
51
- # @example Allow max 10 concurrently running MyWorker jobs
52
- #
53
- # class MyWorker
54
- # include Sidekiq::Worker
55
- # include Sidekiq::Throttled::Worker
56
- #
57
- # sidekiq_throttle({
58
- # :concurrency => { :limit => 10 }
59
- # })
60
- # end
61
- #
62
- # @example Allow max 10 concurrent MyWorker jobs and max 123 per hour
63
- #
64
- # class MyWorker
65
- # include Sidekiq::Worker
66
- # include Sidekiq::Throttled::Worker
67
- #
68
- # sidekiq_throttle({
69
- # :threshold => { :limit => 123, :period => 1.hour },
70
- # :concurrency => { :limit => 10 }
71
- # })
72
- # end
73
- #
74
- # @see Registry.add
75
- # @return [void]
76
- def sidekiq_throttle(**kwargs)
77
- Registry.add(self, **kwargs)
78
- end
79
-
80
- # Adds current worker to preconfigured throttling strategy. Allows
81
- # sharing same pool for multiple workers.
82
- #
83
- # First of all we need to create shared throttling strategy:
84
- #
85
- # # Create google_api throttling strategy
86
- # Sidekiq::Throttled::Registry.add(:google_api, {
87
- # :threshold => { :limit => 123, :period => 1.hour },
88
- # :concurrency => { :limit => 10 }
89
- # })
90
- #
91
- # Now we can assign it to our workers:
92
- #
93
- # class FetchProfileJob
94
- # include Sidekiq::Worker
95
- # include Sidekiq::Throttled::Worker
96
- #
97
- # sidekiq_throttle_as :google_api
98
- # end
99
- #
100
- # class FetchCommentsJob
101
- # include Sidekiq::Worker
102
- # include Sidekiq::Throttled::Worker
103
- #
104
- # sidekiq_throttle_as :google_api
105
- # end
106
- #
107
- # With the above configuration we ensure that there are maximum 10
108
- # concurrently running jobs of FetchProfileJob or FetchCommentsJob
109
- # allowed. And only 123 jobs of those are executed per hour.
110
- #
111
- # In other words, it will allow:
112
- #
113
- # - only `X` concurrent `FetchProfileJob`s
114
- # - max `XX` `FetchProfileJob` per hour
115
- # - only `Y` concurrent `FetchCommentsJob`s
116
- # - max `YY` `FetchCommentsJob` per hour
117
- #
118
- # Where `(X + Y) == 10` and `(XX + YY) == 123`
119
- #
120
- # @see Registry.add_alias
121
- # @return [void]
122
- def sidekiq_throttle_as(name)
123
- Registry.add_alias(self, name)
124
- end
125
- end
126
- end
7
+ # A new module, Sidekiq::Job, was added in Sidekiq version 6.3.0 as a
8
+ # simple alias for Sidekiq::Worker as the term "worker" was considered
9
+ # too generic and confusing. Many people call a Sidekiq process a "worker"
10
+ # whereas others call the thread that executes jobs a "worker".
11
+ Worker = Job
127
12
  end
128
13
  end
@@ -9,6 +9,7 @@ require "sidekiq/throttled/communicator"
9
9
  require "sidekiq/throttled/configuration"
10
10
  require "sidekiq/throttled/queues_pauser"
11
11
  require "sidekiq/throttled/registry"
12
+ require "sidekiq/throttled/job"
12
13
  require "sidekiq/throttled/worker"
13
14
  require "sidekiq/throttled/utils"
14
15
 
@@ -21,12 +22,12 @@ module Sidekiq
21
22
  # require "sidekiq/throttled"
22
23
  # Sidekiq::Throttled.setup!
23
24
  #
24
- # Once you've done that you can include {Sidekiq::Throttled::Worker} to your
25
+ # Once you've done that you can include {Sidekiq::Throttled::Job} to your
25
26
  # job classes and configure throttling:
26
27
  #
27
- # class MyWorker
28
- # include Sidekiq::Worker
29
- # include Sidekiq::Throttled::Worker
28
+ # class MyJob
29
+ # include Sidekiq::Job
30
+ # include Sidekiq::Throttled::Job
30
31
  #
31
32
  # sidekiq_options :queue => :my_queue
32
33
  #
@@ -61,7 +62,7 @@ module Sidekiq
61
62
  QueuesPauser.instance.setup!
62
63
 
63
64
  Sidekiq.configure_server do |config|
64
- setup_strategy!
65
+ setup_strategy!(config)
65
66
 
66
67
  require "sidekiq/throttled/middleware"
67
68
  config.server_middleware do |chain|
@@ -76,7 +77,7 @@ module Sidekiq
76
77
  # @return [Boolean]
77
78
  def throttled?(message)
78
79
  message = JSON.parse message
79
- job = message.fetch("class") { return false }
80
+ job = message.fetch("wrapped") { message.fetch("class") { return false } }
80
81
  jid = message.fetch("jid") { return false }
81
82
 
82
83
  preload_constant! job
@@ -93,15 +94,20 @@ module Sidekiq
93
94
  private
94
95
 
95
96
  # @return [void]
96
- def setup_strategy!
97
+ def setup_strategy!(sidekiq_config)
97
98
  require "sidekiq/throttled/fetch"
98
99
 
100
+ sidekiq_version = Gem::Version.new(Sidekiq::VERSION)
101
+
102
+ # https://github.com/mperham/sidekiq/commit/67daa7a408b214d593100f782271ed108686c147
103
+ sidekiq_config = sidekiq_config.options if sidekiq_version < Gem::Version.new("6.5.0")
104
+
99
105
  # https://github.com/mperham/sidekiq/commit/fce05c9d4b4c0411c982078a4cf3a63f20f739bc
100
- Sidekiq.options[:fetch] =
106
+ sidekiq_config[:fetch] =
101
107
  if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new("6.1.0")
102
108
  Sidekiq::Throttled::Fetch
103
109
  else
104
- Sidekiq::Throttled::Fetch.new(Sidekiq.options)
110
+ Sidekiq::Throttled::Fetch.new(sidekiq_config)
105
111
  end
106
112
  end
107
113
 
File without changes
File without changes
File without changes
File without changes
@@ -1,3 +1,3 @@
1
1
  RSpec/ExampleLength:
2
2
  Enabled: true
3
- Max: 10
3
+ Max: 15
File without changes
@@ -8,23 +8,25 @@ require "sidekiq/throttled/version"
8
8
  Gem::Specification.new do |spec|
9
9
  spec.name = "sidekiq-throttled"
10
10
  spec.version = Sidekiq::Throttled::VERSION
11
- spec.authors = ["Alexey V Zapparov"]
12
- spec.email = ["ixti@member.fsf.org"]
11
+ spec.authors = ["Alexey Zapparov"]
12
+ spec.email = ["alexey@zapparov.com"]
13
13
 
14
14
  spec.summary = "Concurrency and threshold throttling for Sidekiq."
15
15
  spec.description = "Concurrency and threshold throttling for Sidekiq."
16
- spec.homepage = "https://github.com/sensortower/sidekiq-throttled"
16
+ spec.homepage = "https://github.com/ixti/sidekiq-throttled"
17
17
  spec.license = "MIT"
18
18
 
19
19
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
20
  f.match %r{^(test|spec|features)/}
21
21
  end
22
22
 
23
+ spec.metadata["rubygems_mfa_required"] = "true"
24
+
23
25
  spec.bindir = "exe"
24
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
27
  spec.require_paths = ["lib"]
26
28
 
27
- spec.required_ruby_version = ">= 2.6"
29
+ spec.required_ruby_version = ">= 2.7"
28
30
 
29
31
  spec.add_runtime_dependency "concurrent-ruby"
30
32
  spec.add_runtime_dependency "redis-prescription"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-throttled
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.16.2
5
5
  platform: ruby
6
6
  authors:
7
- - Alexey V Zapparov
7
+ - Alexey Zapparov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-16 00:00:00.000000000 Z
11
+ date: 2022-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -68,22 +68,17 @@ dependencies:
68
68
  version: '2.0'
69
69
  description: Concurrency and threshold throttling for Sidekiq.
70
70
  email:
71
- - ixti@member.fsf.org
71
+ - alexey@zapparov.com
72
72
  executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - ".coveralls.yml"
77
+ - ".github/dependabot.yml"
77
78
  - ".github/workflows/ci.yml"
78
79
  - ".gitignore"
79
80
  - ".rspec"
80
81
  - ".rubocop.yml"
81
- - ".rubocop/layout.yml"
82
- - ".rubocop/lint.yml"
83
- - ".rubocop/metrics.yml"
84
- - ".rubocop/performance.yml"
85
- - ".rubocop/rspec.yml"
86
- - ".rubocop/style.yml"
87
82
  - ".rubocop_todo.yml"
88
83
  - ".travis.yml"
89
84
  - ".yardopts"
@@ -94,22 +89,23 @@ files:
94
89
  - LICENSE.md
95
90
  - README.md
96
91
  - Rakefile
97
- - gemfiles/sidekiq_5.0.gemfile
98
- - gemfiles/sidekiq_5.1.gemfile
99
- - gemfiles/sidekiq_5.2.gemfile
100
92
  - gemfiles/sidekiq_6.0.gemfile
101
93
  - gemfiles/sidekiq_6.1.gemfile
102
94
  - gemfiles/sidekiq_6.2.gemfile
103
95
  - gemfiles/sidekiq_6.3.gemfile
96
+ - gemfiles/sidekiq_6.4.gemfile
97
+ - gemfiles/sidekiq_6.5.gemfile
104
98
  - lib/sidekiq/throttled.rb
105
99
  - lib/sidekiq/throttled/communicator.rb
106
100
  - lib/sidekiq/throttled/communicator/callbacks.rb
101
+ - lib/sidekiq/throttled/communicator/exception_handler.rb
107
102
  - lib/sidekiq/throttled/communicator/listener.rb
108
103
  - lib/sidekiq/throttled/configuration.rb
109
104
  - lib/sidekiq/throttled/errors.rb
110
105
  - lib/sidekiq/throttled/expirable_list.rb
111
106
  - lib/sidekiq/throttled/fetch.rb
112
107
  - lib/sidekiq/throttled/fetch/unit_of_work.rb
108
+ - lib/sidekiq/throttled/job.rb
113
109
  - lib/sidekiq/throttled/middleware.rb
114
110
  - lib/sidekiq/throttled/patches/queue.rb
115
111
  - lib/sidekiq/throttled/queue_name.rb
@@ -132,11 +128,18 @@ files:
132
128
  - lib/sidekiq/throttled/web/summary_fix.rb
133
129
  - lib/sidekiq/throttled/web/throttled.html.erb
134
130
  - lib/sidekiq/throttled/worker.rb
131
+ - rubocop/layout.yml
132
+ - rubocop/lint.yml
133
+ - rubocop/metrics.yml
134
+ - rubocop/performance.yml
135
+ - rubocop/rspec.yml
136
+ - rubocop/style.yml
135
137
  - sidekiq-throttled.gemspec
136
- homepage: https://github.com/sensortower/sidekiq-throttled
138
+ homepage: https://github.com/ixti/sidekiq-throttled
137
139
  licenses:
138
140
  - MIT
139
- metadata: {}
141
+ metadata:
142
+ rubygems_mfa_required: 'true'
140
143
  post_install_message:
141
144
  rdoc_options: []
142
145
  require_paths:
@@ -145,14 +148,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
148
  requirements:
146
149
  - - ">="
147
150
  - !ruby/object:Gem::Version
148
- version: '2.6'
151
+ version: '2.7'
149
152
  required_rubygems_version: !ruby/object:Gem::Requirement
150
153
  requirements:
151
154
  - - ">="
152
155
  - !ruby/object:Gem::Version
153
156
  version: '0'
154
157
  requirements: []
155
- rubygems_version: 3.2.22
158
+ rubygems_version: 3.1.6
156
159
  signing_key:
157
160
  specification_version: 4
158
161
  summary: Concurrency and threshold throttling for Sidekiq.
@@ -1,31 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "rake"
7
- gem "rspec"
8
- gem "rubocop", "~> 0.90.0", require: false
9
- gem "rubocop-performance", "~> 1.8.0", require: false
10
- gem "rubocop-rspec", "~> 1.43.2", require: false
11
- gem "sidekiq", "~> 5.0.0"
12
-
13
- group :development do
14
- gem "byebug"
15
- gem "guard", require: false
16
- gem "guard-rspec", require: false
17
- gem "guard-rubocop", require: false
18
- end
19
-
20
- group :test do
21
- gem "apparition"
22
- gem "capybara"
23
- gem "coveralls", require: false
24
- gem "puma"
25
- gem "rack-test"
26
- gem "simplecov"
27
- gem "sinatra"
28
- gem "timecop"
29
- end
30
-
31
- gemspec path: "../"