sidekiq-throttled 1.0.1 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90f1a4d340b3475746da902b0a469af8269e39fc6953b8bb08e759c0600caf1e
4
- data.tar.gz: d03565985b3a0cca9d350a1b86c97530fc3b02bfef3773ecebe5ee7654ee8286
3
+ metadata.gz: 6a187d7a0ab7f55794f909da549082fb32ec06acca0e75928fa970fd2312a63e
4
+ data.tar.gz: c6acd8c1ebe40741e0285e6de82c0384b60a7a03ccee602b8de29309cb8bc313
5
5
  SHA512:
6
- metadata.gz: 88770ec54943f0f455432de0e9455ef19877f5ddbf58821c3e8ee997afc0c0f3b7468010aa2fe4297c3f9069758e8e903e1a3243271afa454aff5575afcea071
7
- data.tar.gz: d1345ef48cb90f9174f71a9bc2625f5d1c2d218e5d1eb7d00f98c3014efbb0e83e3682ca8742baa960e17433da80267a8b716cad4a04b78716e96f9089fb01f3
6
+ metadata.gz: 6f777dff16dc389b43a089c4e392228afc695830bea0bedb4a4aa4b04d49b44a0ae5b60d643a255548947f90eeb198aaf91219f9f282de29b8c7c009626e6e4f
7
+ data.tar.gz: 86b28f4fa073f7930254269e766576da4bf3412a262d9e0329285221b1376437dc6f072e9aa93be1402da7e06f3f5501ce416b241d134c666546ae3abb7397fe
data/README.adoc CHANGED
@@ -12,11 +12,7 @@
12
12
  {doc-link}[image:{doc-badge}[API Documentation]]
13
13
  ****
14
14
 
15
- NOTE: This is the 1.x *development* branch. For the 0.x *stable* branch, please
16
- see: https://github.com/ixti/sidekiq-throttled/tree/0-x-stable[0-x-stable]
17
-
18
- Concurrency and threshold throttling for https://github.com/mperham/sidekiq[Sidekiq].
19
-
15
+ Concurrency and threshold throttling for https://github.com/sidekiq/sidekiq[Sidekiq].
20
16
 
21
17
  == Installation
22
18
 
@@ -44,12 +40,8 @@ you are using Rails):
44
40
  [source,ruby]
45
41
  ----
46
42
  require "sidekiq/throttled"
47
- Sidekiq::Throttled.setup!
48
43
  ----
49
44
 
50
- Load order can be an issue if you are using other Sidekiq plugins and/or middleware.
51
- To prevent any problems, add the `.setup!` call to the bottom of your init file.
52
-
53
45
  Once you've done that you can include `Sidekiq::Throttled::Job` to your
54
46
  job classes and configure throttling:
55
47
 
@@ -108,6 +100,30 @@ end
108
100
  ----
109
101
 
110
102
 
103
+ ==== Middleware(s)
104
+
105
+ `Sidekiq::Throttled` relies on following bundled middlewares:
106
+
107
+ * `Sidekiq::Throttled::Middlewares::Server`
108
+
109
+ The middleware is automatically injected when you require `sidekiq/throttled`.
110
+ In rare cases this might be an issue. You can change to order manually:
111
+
112
+ [source,ruby]
113
+ ----
114
+ Sidekiq.configure_server do |config|
115
+ # ...
116
+
117
+ config.server_middleware do |chain|
118
+ chain.remove(Sidekiq::Throttled::Middlewares::Server)
119
+ chain.add(Sidekiq::Throttled::Middlewares::Server)
120
+ end
121
+ end
122
+ ----
123
+
124
+ See: https://github.com/sidekiq/sidekiq/blob/main/lib/sidekiq/middleware/chain.rb
125
+
126
+
111
127
  === Observer
112
128
 
113
129
  You can specify an observer that will be called on throttling. To do so pass an
@@ -251,6 +267,7 @@ sidekiq_throttle(concurrency: { limit: 20, ttl: 1.hour.to_i })
251
267
 
252
268
  This library aims to support and is tested against the following Ruby versions:
253
269
 
270
+ * Ruby 2.7.x
254
271
  * Ruby 3.0.x
255
272
  * Ruby 3.1.x
256
273
  * Ruby 3.2.x
@@ -295,3 +312,11 @@ This library aims to support and work with following Sidekiq versions:
295
312
  * Send a pull request
296
313
  * If we like them we'll merge them
297
314
  * If we've accepted a patch, feel free to ask for commit access!
315
+
316
+
317
+ == Endorsement
318
+
319
+ https://github.com/sensortower[image:sensortower.svg[SensorTower]]
320
+
321
+ The initial work on the project was initiated to address the needs of
322
+ https://github.com/sensortower[SensorTower].
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ # internal
4
+ require_relative "../registry"
5
+
6
+ module Sidekiq
7
+ module Throttled
8
+ module Middlewares
9
+ # Server middleware required for Sidekiq::Throttled functioning.
10
+ class Server
11
+ include Sidekiq::ServerMiddleware
12
+
13
+ def call(_worker, msg, _queue)
14
+ yield
15
+ ensure
16
+ job = msg.fetch("wrapped") { msg["class"] }
17
+ jid = msg["jid"]
18
+
19
+ if job && jid
20
+ Registry.get job do |strategy|
21
+ strategy.finalize!(jid, *msg["args"])
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ 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
@@ -3,6 +3,6 @@
3
3
  module Sidekiq
4
4
  module Throttled
5
5
  # Gem version
6
- VERSION = "1.0.1"
6
+ VERSION = "1.2.0"
7
7
  end
8
8
  end
@@ -5,7 +5,7 @@ require "sidekiq"
5
5
  require_relative "./throttled/config"
6
6
  require_relative "./throttled/cooldown"
7
7
  require_relative "./throttled/job"
8
- require_relative "./throttled/middleware"
8
+ require_relative "./throttled/middlewares/server"
9
9
  require_relative "./throttled/patches/basic_fetch"
10
10
  require_relative "./throttled/registry"
11
11
  require_relative "./throttled/version"
@@ -18,7 +18,6 @@ module Sidekiq
18
18
  # Just add somewhere in your bootstrap:
19
19
  #
20
20
  # require "sidekiq/throttled"
21
- # Sidekiq::Throttled.setup!
22
21
  #
23
22
  # Once you've done that you can include {Sidekiq::Throttled::Job} to your
24
23
  # job classes and configure throttling:
@@ -70,14 +69,6 @@ module Sidekiq
70
69
  end
71
70
  end
72
71
 
73
- def setup!
74
- Sidekiq.configure_server do |config|
75
- config.server_middleware do |chain|
76
- chain.add Sidekiq::Throttled::Middleware
77
- end
78
- end
79
- end
80
-
81
72
  # Tells whenever job is throttled or not.
82
73
  #
83
74
  # @param [String] message Job's JSON payload
@@ -94,9 +85,27 @@ module Sidekiq
94
85
  end
95
86
 
96
87
  false
97
- rescue
88
+ rescue StandardError
98
89
  false
99
90
  end
91
+
92
+ # @deprecated Will be removed in 2.0.0
93
+ def setup!
94
+ warn "Sidekiq::Throttled.setup! was deprecated"
95
+
96
+ Sidekiq.configure_server do |config|
97
+ config.server_middleware do |chain|
98
+ chain.remove(Sidekiq::Throttled::Middlewares::Server)
99
+ chain.add(Sidekiq::Throttled::Middlewares::Server)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ configure_server do |config|
107
+ config.server_middleware do |chain|
108
+ chain.add(Sidekiq::Throttled::Middlewares::Server)
100
109
  end
101
110
  end
102
111
  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: 1.0.1
4
+ version: 1.2.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: 2023-11-20 00:00:00.000000000 Z
11
+ date: 2023-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -59,7 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - LICENSE
62
+ - LICENSE.txt
63
63
  - README.adoc
64
64
  - lib/sidekiq/throttled.rb
65
65
  - lib/sidekiq/throttled/config.rb
@@ -67,7 +67,7 @@ files:
67
67
  - lib/sidekiq/throttled/errors.rb
68
68
  - lib/sidekiq/throttled/expirable_set.rb
69
69
  - lib/sidekiq/throttled/job.rb
70
- - lib/sidekiq/throttled/middleware.rb
70
+ - lib/sidekiq/throttled/middlewares/server.rb
71
71
  - lib/sidekiq/throttled/patches/basic_fetch.rb
72
72
  - lib/sidekiq/throttled/registry.rb
73
73
  - lib/sidekiq/throttled/strategy.rb
@@ -87,9 +87,9 @@ licenses:
87
87
  - MIT
88
88
  metadata:
89
89
  homepage_uri: https://github.com/ixti/sidekiq-throttled
90
- source_code_uri: https://github.com/ixti/sidekiq-throttled/tree/v1.0.1
90
+ source_code_uri: https://github.com/ixti/sidekiq-throttled/tree/v1.2.0
91
91
  bug_tracker_uri: https://github.com/ixti/sidekiq-throttled/issues
92
- changelog_uri: https://github.com/ixti/sidekiq-throttled/blob/v1.0.1/CHANGES.md
92
+ changelog_uri: https://github.com/ixti/sidekiq-throttled/blob/v1.2.0/CHANGES.md
93
93
  rubygems_mfa_required: 'true'
94
94
  post_install_message:
95
95
  rdoc_options: []
@@ -99,14 +99,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: '3.0'
102
+ version: '2.7'
103
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  requirements:
105
105
  - - ">="
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  requirements: []
109
- rubygems_version: 3.4.10
109
+ rubygems_version: 3.3.26
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: Concurrency and rate-limit throttling for Sidekiq
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # internal
4
- require_relative "./registry"
5
-
6
- module Sidekiq
7
- module Throttled
8
- # Server middleware that notifies strategy that job was finished.
9
- #
10
- # @private
11
- class Middleware
12
- include Sidekiq::ServerMiddleware
13
-
14
- # Called within Sidekiq job processing
15
- def call(_worker, msg, _queue)
16
- yield
17
- ensure
18
- job = msg.fetch("wrapped") { msg["class"] }
19
- jid = msg["jid"]
20
-
21
- if job && jid
22
- Registry.get job do |strategy|
23
- strategy.finalize!(jid, *msg["args"])
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
File without changes