sidekiq-throttled 0.16.2 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +332 -0
  3. data/lib/sidekiq/throttled/config.rb +44 -0
  4. data/lib/sidekiq/throttled/cooldown.rb +55 -0
  5. data/lib/sidekiq/throttled/expirable_set.rb +70 -0
  6. data/lib/sidekiq/throttled/job.rb +4 -4
  7. data/lib/sidekiq/throttled/message.rb +32 -0
  8. data/lib/sidekiq/throttled/middlewares/server.rb +28 -0
  9. data/lib/sidekiq/throttled/patches/basic_fetch.rb +45 -0
  10. data/lib/sidekiq/throttled/patches/super_fetch.rb +52 -0
  11. data/lib/sidekiq/throttled/patches/throttled_retriever.rb +26 -0
  12. data/lib/sidekiq/throttled/registry.rb +4 -7
  13. data/lib/sidekiq/throttled/strategy/base.rb +1 -1
  14. data/lib/sidekiq/throttled/strategy/concurrency.rb +4 -6
  15. data/lib/sidekiq/throttled/strategy/threshold.rb +4 -6
  16. data/lib/sidekiq/throttled/strategy.rb +10 -10
  17. data/lib/sidekiq/throttled/strategy_collection.rb +8 -9
  18. data/lib/sidekiq/throttled/version.rb +1 -1
  19. data/lib/sidekiq/throttled/web.rb +2 -45
  20. data/lib/sidekiq/throttled/worker.rb +1 -1
  21. data/lib/sidekiq/throttled.rb +46 -67
  22. metadata +27 -73
  23. data/.coveralls.yml +0 -1
  24. data/.github/dependabot.yml +0 -12
  25. data/.github/workflows/ci.yml +0 -52
  26. data/.gitignore +0 -12
  27. data/.rspec +0 -5
  28. data/.rubocop.yml +0 -20
  29. data/.rubocop_todo.yml +0 -68
  30. data/.travis.yml +0 -39
  31. data/.yardopts +0 -1
  32. data/Appraisals +0 -25
  33. data/CHANGES.md +0 -300
  34. data/Gemfile +0 -34
  35. data/Guardfile +0 -25
  36. data/README.md +0 -301
  37. data/Rakefile +0 -27
  38. data/gemfiles/sidekiq_6.0.gemfile +0 -33
  39. data/gemfiles/sidekiq_6.1.gemfile +0 -33
  40. data/gemfiles/sidekiq_6.2.gemfile +0 -33
  41. data/gemfiles/sidekiq_6.3.gemfile +0 -33
  42. data/gemfiles/sidekiq_6.4.gemfile +0 -33
  43. data/gemfiles/sidekiq_6.5.gemfile +0 -33
  44. data/lib/sidekiq/throttled/communicator/callbacks.rb +0 -72
  45. data/lib/sidekiq/throttled/communicator/exception_handler.rb +0 -25
  46. data/lib/sidekiq/throttled/communicator/listener.rb +0 -109
  47. data/lib/sidekiq/throttled/communicator.rb +0 -116
  48. data/lib/sidekiq/throttled/configuration.rb +0 -50
  49. data/lib/sidekiq/throttled/expirable_list.rb +0 -70
  50. data/lib/sidekiq/throttled/fetch/unit_of_work.rb +0 -83
  51. data/lib/sidekiq/throttled/fetch.rb +0 -107
  52. data/lib/sidekiq/throttled/middleware.rb +0 -22
  53. data/lib/sidekiq/throttled/patches/queue.rb +0 -18
  54. data/lib/sidekiq/throttled/queue_name.rb +0 -46
  55. data/lib/sidekiq/throttled/queues_pauser.rb +0 -152
  56. data/lib/sidekiq/throttled/testing.rb +0 -12
  57. data/lib/sidekiq/throttled/utils.rb +0 -19
  58. data/lib/sidekiq/throttled/web/queues.html.erb +0 -49
  59. data/lib/sidekiq/throttled/web/summary_fix.js +0 -10
  60. data/lib/sidekiq/throttled/web/summary_fix.rb +0 -35
  61. data/rubocop/layout.yml +0 -24
  62. data/rubocop/lint.yml +0 -41
  63. data/rubocop/metrics.yml +0 -4
  64. data/rubocop/performance.yml +0 -25
  65. data/rubocop/rspec.yml +0 -3
  66. data/rubocop/style.yml +0 -84
  67. data/sidekiq-throttled.gemspec +0 -36
  68. /data/{LICENSE.md → LICENSE.txt} +0 -0
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sidekiq
4
+ module Throttled
5
+ module Patches
6
+ module ThrottledRetriever
7
+ # Retrieves job from redis.
8
+ #
9
+ # @return [Sidekiq::BasicFetch::UnitOfWork, nil]
10
+ def retrieve_work
11
+ work = super
12
+
13
+ if work && Throttled.throttled?(work.job)
14
+ Throttled.cooldown&.notify_throttled(work.queue)
15
+ requeue_throttled(work)
16
+ return nil
17
+ end
18
+
19
+ Throttled.cooldown&.notify_admitted(work.queue) if work
20
+
21
+ work
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # internal
4
- require "sidekiq/throttled/strategy"
5
- require "sidekiq/throttled/utils"
4
+ require_relative "./strategy"
6
5
 
7
6
  module Sidekiq
8
7
  module Throttled
@@ -14,8 +13,6 @@ module Sidekiq
14
13
  @aliases = {}
15
14
 
16
15
  class << self
17
- include Utils
18
-
19
16
  # Adds strategy to the registry.
20
17
  #
21
18
  # @param (see Strategy#initialize)
@@ -105,9 +102,7 @@ module Sidekiq
105
102
  # @param name [Class, #to_s]
106
103
  # @return [Strategy, nil]
107
104
  def find_by_class(name)
108
- return unless Throttled.configuration.inherit_strategies?
109
-
110
- const = name.is_a?(Class) ? name : constantize(name)
105
+ const = name.is_a?(Class) ? name : Object.const_get(name)
111
106
  return unless const.is_a?(Class)
112
107
 
113
108
  const.ancestors.each do |m|
@@ -115,6 +110,8 @@ module Sidekiq
115
110
  return strategy if strategy
116
111
  end
117
112
 
113
+ nil
114
+ rescue NameError
118
115
  nil
119
116
  end
120
117
  end
@@ -15,7 +15,7 @@ module Sidekiq
15
15
  return key unless @key_suffix
16
16
 
17
17
  key << ":#{@key_suffix.call(*job_args)}"
18
- rescue => e
18
+ rescue StandardError => e
19
19
  Sidekiq.logger.error "Failed to get key suffix: #{e}"
20
20
  raise e
21
21
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "redis/prescription"
3
+ require "redis_prescription"
4
4
 
5
- require "sidekiq/throttled/strategy/base"
5
+ require_relative "./base"
6
6
 
7
7
  module Sidekiq
8
8
  module Throttled
@@ -20,7 +20,7 @@ module Sidekiq
20
20
  # PUSH(@key, @jid)
21
21
  # return 0
22
22
  # end
23
- SCRIPT = Redis::Prescription.read "#{__dir__}/concurrency.lua"
23
+ SCRIPT = RedisPrescription.new(File.read("#{__dir__}/concurrency.lua"))
24
24
  private_constant :SCRIPT
25
25
 
26
26
  # @param [#to_s] strategy_key
@@ -49,9 +49,7 @@ module Sidekiq
49
49
  keys = [key(job_args)]
50
50
  argv = [jid.to_s, job_limit, @ttl, Time.now.to_f]
51
51
 
52
- Sidekiq.redis do |redis|
53
- 1 == SCRIPT.eval(redis, :keys => keys, :argv => argv)
54
- end
52
+ Sidekiq.redis { |redis| 1 == SCRIPT.call(redis, keys: keys, argv: argv) }
55
53
  end
56
54
 
57
55
  # @return [Integer] Current count of jobs
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "redis/prescription"
3
+ require "redis_prescription"
4
4
 
5
- require "sidekiq/throttled/strategy/base"
5
+ require_relative "./base"
6
6
 
7
7
  module Sidekiq
8
8
  module Throttled
@@ -30,7 +30,7 @@ module Sidekiq
30
30
  #
31
31
  # increase!
32
32
  # return 0
33
- SCRIPT = Redis::Prescription.read "#{__dir__}/threshold.lua"
33
+ SCRIPT = RedisPrescription.new(File.read("#{__dir__}/threshold.lua"))
34
34
  private_constant :SCRIPT
35
35
 
36
36
  # @param [#to_s] strategy_key
@@ -66,9 +66,7 @@ module Sidekiq
66
66
  keys = [key(job_args)]
67
67
  argv = [job_limit, period(job_args), Time.now.to_f]
68
68
 
69
- Sidekiq.redis do |redis|
70
- 1 == SCRIPT.eval(redis, :keys => keys, :argv => argv)
71
- end
69
+ Sidekiq.redis { |redis| 1 == SCRIPT.call(redis, keys: keys, argv: argv) }
72
70
  end
73
71
 
74
72
  # @return [Integer] Current count of jobs
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # internal
4
- require "sidekiq/throttled/errors"
5
- require "sidekiq/throttled/strategy_collection"
6
- require "sidekiq/throttled/strategy/concurrency"
7
- require "sidekiq/throttled/strategy/threshold"
4
+ require_relative "./errors"
5
+ require_relative "./strategy_collection"
6
+ require_relative "./strategy/concurrency"
7
+ require_relative "./strategy/threshold"
8
8
 
9
9
  module Sidekiq
10
10
  module Throttled
@@ -35,14 +35,14 @@ module Sidekiq
35
35
  @observer = observer
36
36
 
37
37
  @concurrency = StrategyCollection.new(concurrency,
38
- :strategy => Concurrency,
39
- :name => name,
40
- :key_suffix => key_suffix)
38
+ strategy: Concurrency,
39
+ name: name,
40
+ key_suffix: key_suffix)
41
41
 
42
42
  @threshold = StrategyCollection.new(threshold,
43
- :strategy => Threshold,
44
- :name => name,
45
- :key_suffix => key_suffix)
43
+ strategy: Threshold,
44
+ name: name,
45
+ key_suffix: key_suffix)
46
46
 
47
47
  return if @concurrency.any? || @threshold.any?
48
48
 
@@ -19,16 +19,15 @@ module Sidekiq
19
19
  # @param [#to_s] name
20
20
  # @param [#call] key_suffix Dynamic key suffix generator.
21
21
  def initialize(strategies, strategy:, name:, key_suffix:)
22
- strategies = (strategies.is_a?(Hash) ? [strategies] : Array(strategies))
23
- @strategies = strategies.map do |options|
22
+ @strategies = (strategies.is_a?(Hash) ? [strategies] : Array(strategies)).map do |options|
24
23
  make_strategy(strategy, name, key_suffix, options)
25
24
  end
26
25
  end
27
26
 
28
27
  # @param [#call] block
29
28
  # Iterates each strategy in collection
30
- def each(&block)
31
- @strategies.each(&block)
29
+ def each(...)
30
+ @strategies.each(...)
32
31
  end
33
32
 
34
33
  # @return [Boolean] whenever any strategy in collection has dynamic config
@@ -38,14 +37,14 @@ module Sidekiq
38
37
 
39
38
  # @return [Boolean] whenever job is throttled or not
40
39
  # by any strategy in collection.
41
- def throttled?(*args)
42
- any? { |s| s.throttled?(*args) }
40
+ def throttled?(...)
41
+ any? { |s| s.throttled?(...) }
43
42
  end
44
43
 
45
44
  # Marks job as being processed.
46
45
  # @return [void]
47
- def finalize!(*args)
48
- each { |c| c.finalize!(*args) }
46
+ def finalize!(...)
47
+ each { |c| c.finalize!(...) }
49
48
  end
50
49
 
51
50
  # Resets count of jobs of all avaliable strategies
@@ -61,7 +60,7 @@ module Sidekiq
61
60
  return unless options
62
61
 
63
62
  strategy.new("throttled:#{name}",
64
- :key_suffix => key_suffix,
63
+ key_suffix: key_suffix,
65
64
  **options)
66
65
  end
67
66
  end
@@ -3,6 +3,6 @@
3
3
  module Sidekiq
4
4
  module Throttled
5
5
  # Gem version
6
- VERSION = "0.16.2"
6
+ VERSION = "1.4.0"
7
7
  end
8
8
  end
@@ -8,9 +8,8 @@ require "sidekiq"
8
8
  require "sidekiq/web"
9
9
 
10
10
  # internal
11
- require "sidekiq/throttled/registry"
12
- require "sidekiq/throttled/web/stats"
13
- require "sidekiq/throttled/web/summary_fix"
11
+ require_relative "./registry"
12
+ require_relative "./web/stats"
14
13
 
15
14
  module Sidekiq
16
15
  module Throttled
@@ -18,31 +17,11 @@ module Sidekiq
18
17
  module Web
19
18
  VIEWS = Pathname.new(__dir__).join("web")
20
19
  THROTTLED_TPL = VIEWS.join("throttled.html.erb").read.freeze
21
- QUEUES_TPL = VIEWS.join("queues.html.erb").read.freeze
22
20
 
23
21
  class << self
24
- # Replace default Queues tab with enhanced one.
25
- def enhance_queues_tab!
26
- SummaryFix.enabled = true
27
- Sidekiq::Web::DEFAULT_TABS["Queues"] = "enhanced-queues"
28
- Sidekiq::Web.tabs.delete("Enhanced Queues")
29
- end
30
-
31
- # Restore original Queues tab.
32
- #
33
- # @api There's next to absolutely no value in this method for real
34
- # users. The only it's purpose is to restore virgin state in specs.
35
- def restore_queues_tab!
36
- SummaryFix.enabled = false
37
- Sidekiq::Web::DEFAULT_TABS["Queues"] = "queues"
38
- Sidekiq::Web.tabs["Enhanced Queues"] = "enhanced-queues"
39
- end
40
-
41
22
  # @api private
42
23
  def registered(app)
43
- SummaryFix.apply! app
44
24
  register_throttled_tab app
45
- register_enhanced_queues_tab app
46
25
  end
47
26
 
48
27
  private
@@ -55,27 +34,6 @@ module Sidekiq
55
34
  redirect "#{root_path}throttled"
56
35
  end
57
36
  end
58
-
59
- # rubocop:disable Metrics/AbcSize
60
- def register_enhanced_queues_tab(app) # rubocop:disable Metrics/MethodLength
61
- pauser = QueuesPauser.instance
62
-
63
- app.get("/enhanced-queues") do
64
- @queues = Sidekiq::Queue.all
65
- erb QUEUES_TPL.dup
66
- end
67
-
68
- app.post("/enhanced-queues/:name") do
69
- case params[:action]
70
- when "delete" then Sidekiq::Queue.new(params[:name]).clear
71
- when "pause" then pauser.pause!(params[:name])
72
- else pauser.resume!(params[:name])
73
- end
74
-
75
- redirect "#{root_path}enhanced-queues"
76
- end
77
- end
78
- # rubocop:enable Metrics/AbcSize
79
37
  end
80
38
  end
81
39
  end
@@ -83,4 +41,3 @@ end
83
41
 
84
42
  Sidekiq::Web.register Sidekiq::Throttled::Web
85
43
  Sidekiq::Web.tabs["Throttled"] = "throttled"
86
- Sidekiq::Web.tabs["Enhanced Queues"] = "enhanced-queues"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "sidekiq/throttled/job"
3
+ require_relative "./job"
4
4
 
5
5
  module Sidekiq
6
6
  module Throttled
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # 3rd party
4
3
  require "sidekiq"
5
4
 
6
- # internal
7
- require "sidekiq/throttled/version"
8
- require "sidekiq/throttled/communicator"
9
- require "sidekiq/throttled/configuration"
10
- require "sidekiq/throttled/queues_pauser"
11
- require "sidekiq/throttled/registry"
12
- require "sidekiq/throttled/job"
13
- require "sidekiq/throttled/worker"
14
- require "sidekiq/throttled/utils"
5
+ require_relative "./throttled/config"
6
+ require_relative "./throttled/cooldown"
7
+ require_relative "./throttled/job"
8
+ require_relative "./throttled/message"
9
+ require_relative "./throttled/middlewares/server"
10
+ require_relative "./throttled/patches/basic_fetch"
11
+ require_relative "./throttled/patches/super_fetch"
12
+ require_relative "./throttled/registry"
13
+ require_relative "./throttled/version"
14
+ require_relative "./throttled/worker"
15
15
 
16
16
  # @see https://github.com/mperham/sidekiq/
17
17
  module Sidekiq
@@ -20,7 +20,6 @@ module Sidekiq
20
20
  # Just add somewhere in your bootstrap:
21
21
  #
22
22
  # require "sidekiq/throttled"
23
- # Sidekiq::Throttled.setup!
24
23
  #
25
24
  # Once you've done that you can include {Sidekiq::Throttled::Job} to your
26
25
  # job classes and configure throttling:
@@ -46,28 +45,29 @@ module Sidekiq
46
45
  MUTEX = Mutex.new
47
46
  private_constant :MUTEX
48
47
 
49
- class << self
50
- include Utils
48
+ @config = Config.new.freeze
49
+ @cooldown = Cooldown[@config]
51
50
 
52
- # @return [Configuration]
53
- def configuration
54
- @configuration ||= Configuration.new
55
- end
51
+ class << self
52
+ # @api internal
53
+ #
54
+ # @return [Cooldown, nil]
55
+ attr_reader :cooldown
56
56
 
57
- # Hooks throttler into sidekiq.
57
+ # @example
58
+ # Sidekiq::Throttled.configure do |config|
59
+ # config.cooldown_period = nil # Disable queues cooldown manager
60
+ # end
58
61
  #
59
- # @return [void]
60
- def setup!
61
- Communicator.instance.setup!
62
- QueuesPauser.instance.setup!
62
+ # @yieldparam config [Config]
63
+ def configure
64
+ MUTEX.synchronize do
65
+ config = @config.dup
63
66
 
64
- Sidekiq.configure_server do |config|
65
- setup_strategy!(config)
67
+ yield config
66
68
 
67
- require "sidekiq/throttled/middleware"
68
- config.server_middleware do |chain|
69
- chain.add Sidekiq::Throttled::Middleware
70
- end
69
+ @config = config.freeze
70
+ @cooldown = Cooldown[@config]
71
71
  end
72
72
  end
73
73
 
@@ -76,56 +76,35 @@ module Sidekiq
76
76
  # @param [String] message Job's JSON payload
77
77
  # @return [Boolean]
78
78
  def throttled?(message)
79
- message = JSON.parse message
80
- job = message.fetch("wrapped") { message.fetch("class") { return false } }
81
- jid = message.fetch("jid") { return false }
79
+ message = Message.new(message)
80
+ return false unless message.job_class && message.job_id
82
81
 
83
- preload_constant! job
84
-
85
- Registry.get job do |strategy|
86
- return strategy.throttled?(jid, *message["args"])
82
+ Registry.get(message.job_class) do |strategy|
83
+ return strategy.throttled?(message.job_id, *message.job_args)
87
84
  end
88
85
 
89
86
  false
90
- rescue
87
+ rescue StandardError
91
88
  false
92
89
  end
93
90
 
94
- private
95
-
96
- # @return [void]
97
- def setup_strategy!(sidekiq_config)
98
- require "sidekiq/throttled/fetch"
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")
91
+ # @deprecated Will be removed in 2.0.0
92
+ def setup!
93
+ warn "Sidekiq::Throttled.setup! was deprecated"
104
94
 
105
- # https://github.com/mperham/sidekiq/commit/fce05c9d4b4c0411c982078a4cf3a63f20f739bc
106
- sidekiq_config[:fetch] =
107
- if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new("6.1.0")
108
- Sidekiq::Throttled::Fetch
109
- else
110
- Sidekiq::Throttled::Fetch.new(sidekiq_config)
95
+ Sidekiq.configure_server do |config|
96
+ config.server_middleware do |chain|
97
+ chain.remove(Sidekiq::Throttled::Middlewares::Server)
98
+ chain.add(Sidekiq::Throttled::Middlewares::Server)
111
99
  end
112
- end
113
-
114
- # Tries to preload constant by it's name once.
115
- #
116
- # Somehow, sometimes, some classes are not eager loaded upon Rails init,
117
- # leading to throttling config not being registered prior job perform.
118
- # And that leaves us with concurrency limit + 1 situation upon Sidekiq
119
- # server restart (becomes normal after all Sidekiq processes handled
120
- # at leas onr job of that class).
121
- #
122
- # @return [void]
123
- def preload_constant!(job)
124
- MUTEX.synchronize do
125
- @preloaded ||= {}
126
- @preloaded[job] ||= constantize(job) || true
127
100
  end
128
101
  end
129
102
  end
130
103
  end
104
+
105
+ configure_server do |config|
106
+ config.server_middleware do |chain|
107
+ chain.add(Sidekiq::Throttled::Middlewares::Server)
108
+ end
109
+ end
131
110
  end
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.16.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Zapparov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-19 00:00:00.000000000 Z
11
+ date: 2024-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -16,100 +16,62 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: redis-prescription
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sidekiq
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '6.5'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '2.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '2.0'
69
- description: Concurrency and threshold throttling for Sidekiq.
54
+ version: '6.5'
55
+ description:
70
56
  email:
71
57
  - alexey@zapparov.com
72
58
  executables: []
73
59
  extensions: []
74
60
  extra_rdoc_files: []
75
61
  files:
76
- - ".coveralls.yml"
77
- - ".github/dependabot.yml"
78
- - ".github/workflows/ci.yml"
79
- - ".gitignore"
80
- - ".rspec"
81
- - ".rubocop.yml"
82
- - ".rubocop_todo.yml"
83
- - ".travis.yml"
84
- - ".yardopts"
85
- - Appraisals
86
- - CHANGES.md
87
- - Gemfile
88
- - Guardfile
89
- - LICENSE.md
90
- - README.md
91
- - Rakefile
92
- - gemfiles/sidekiq_6.0.gemfile
93
- - gemfiles/sidekiq_6.1.gemfile
94
- - gemfiles/sidekiq_6.2.gemfile
95
- - gemfiles/sidekiq_6.3.gemfile
96
- - gemfiles/sidekiq_6.4.gemfile
97
- - gemfiles/sidekiq_6.5.gemfile
62
+ - LICENSE.txt
63
+ - README.adoc
98
64
  - lib/sidekiq/throttled.rb
99
- - lib/sidekiq/throttled/communicator.rb
100
- - lib/sidekiq/throttled/communicator/callbacks.rb
101
- - lib/sidekiq/throttled/communicator/exception_handler.rb
102
- - lib/sidekiq/throttled/communicator/listener.rb
103
- - lib/sidekiq/throttled/configuration.rb
65
+ - lib/sidekiq/throttled/config.rb
66
+ - lib/sidekiq/throttled/cooldown.rb
104
67
  - lib/sidekiq/throttled/errors.rb
105
- - lib/sidekiq/throttled/expirable_list.rb
106
- - lib/sidekiq/throttled/fetch.rb
107
- - lib/sidekiq/throttled/fetch/unit_of_work.rb
68
+ - lib/sidekiq/throttled/expirable_set.rb
108
69
  - lib/sidekiq/throttled/job.rb
109
- - lib/sidekiq/throttled/middleware.rb
110
- - lib/sidekiq/throttled/patches/queue.rb
111
- - lib/sidekiq/throttled/queue_name.rb
112
- - lib/sidekiq/throttled/queues_pauser.rb
70
+ - lib/sidekiq/throttled/message.rb
71
+ - lib/sidekiq/throttled/middlewares/server.rb
72
+ - lib/sidekiq/throttled/patches/basic_fetch.rb
73
+ - lib/sidekiq/throttled/patches/super_fetch.rb
74
+ - lib/sidekiq/throttled/patches/throttled_retriever.rb
113
75
  - lib/sidekiq/throttled/registry.rb
114
76
  - lib/sidekiq/throttled/strategy.rb
115
77
  - lib/sidekiq/throttled/strategy/base.rb
@@ -118,27 +80,19 @@ files:
118
80
  - lib/sidekiq/throttled/strategy/threshold.lua
119
81
  - lib/sidekiq/throttled/strategy/threshold.rb
120
82
  - lib/sidekiq/throttled/strategy_collection.rb
121
- - lib/sidekiq/throttled/testing.rb
122
- - lib/sidekiq/throttled/utils.rb
123
83
  - lib/sidekiq/throttled/version.rb
124
84
  - lib/sidekiq/throttled/web.rb
125
- - lib/sidekiq/throttled/web/queues.html.erb
126
85
  - lib/sidekiq/throttled/web/stats.rb
127
- - lib/sidekiq/throttled/web/summary_fix.js
128
- - lib/sidekiq/throttled/web/summary_fix.rb
129
86
  - lib/sidekiq/throttled/web/throttled.html.erb
130
87
  - 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
137
- - sidekiq-throttled.gemspec
138
88
  homepage: https://github.com/ixti/sidekiq-throttled
139
89
  licenses:
140
90
  - MIT
141
91
  metadata:
92
+ homepage_uri: https://github.com/ixti/sidekiq-throttled
93
+ source_code_uri: https://github.com/ixti/sidekiq-throttled/tree/v1.4.0
94
+ bug_tracker_uri: https://github.com/ixti/sidekiq-throttled/issues
95
+ changelog_uri: https://github.com/ixti/sidekiq-throttled/blob/v1.4.0/CHANGES.md
142
96
  rubygems_mfa_required: 'true'
143
97
  post_install_message:
144
98
  rdoc_options: []
@@ -155,8 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
109
  - !ruby/object:Gem::Version
156
110
  version: '0'
157
111
  requirements: []
158
- rubygems_version: 3.1.6
112
+ rubygems_version: 3.5.4
159
113
  signing_key:
160
114
  specification_version: 4
161
- summary: Concurrency and threshold throttling for Sidekiq.
115
+ summary: Concurrency and rate-limit throttling for Sidekiq
162
116
  test_files: []
data/.coveralls.yml DELETED
@@ -1 +0,0 @@
1
- service_name: travis-ci
@@ -1,12 +0,0 @@
1
- # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
2
-
3
- version: 2
4
- updates:
5
- - package-ecosystem: "github-actions"
6
- directory: "/"
7
- schedule:
8
- interval: "daily"
9
- - package-ecosystem: "bundler"
10
- directory: "/"
11
- schedule:
12
- interval: "daily"