sidekiq-rate-limiter 0.1.3 → 0.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 +4 -4
- data/.github/workflows/test.yml +48 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +19 -0
- data/README.md +2 -2
- data/gemfiles/sidekiq_6.0.gemfile +5 -0
- data/gemfiles/sidekiq_6.1.gemfile +5 -0
- data/gemfiles/sidekiq_6.x.gemfile +5 -0
- data/lib/sidekiq-rate-limiter/server.rb +8 -1
- data/lib/sidekiq-rate-limiter/version.rb +1 -1
- data/sidekiq-rate-limiter.gemspec +3 -3
- data/spec/sidekiq-rate-limiter/fetch_spec.rb +14 -2
- data/spec/sidekiq-rate-limiter/server_spec.rb +10 -2
- data/spec/spec_helper.rb +19 -41
- metadata +35 -15
- data/.simplecov +0 -6
- data/.travis.yml +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eaf0f64591b7ddcbba0d15b889fdfbe2b639cce8b112a8be3e92ec9cac2dc07e
|
4
|
+
data.tar.gz: fbfadc77f1bf676221b3e8c268a4ac60d4a19bc55e3a22a74c2084b9e62c3ee2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00bf480916d2764f62e2e96b377573bcfe266c05c95d8a395f5b1293c84d3122f11355fa311c9af019fc50b07ae4228c51e06e4ded5dcb571c040b158d5fb6b3
|
7
|
+
data.tar.gz: 2907155a2a62408dcb3e1e928669588bd269057215de35cbe41782ee130e514823ff9fdc618f6b132484151bf8ca652360b213c0eaf398fb20b0ff815e235570
|
@@ -0,0 +1,48 @@
|
|
1
|
+
name: Test
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
test:
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby-version: ['3.1', '2.7']
|
15
|
+
sidekiq-version: ['4', '5', '6.0', '6.1', '6.x']
|
16
|
+
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v3
|
19
|
+
|
20
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
21
|
+
uses: ruby/setup-ruby@359bebbc29cbe6c87da6bc9ea3bc930432750108
|
22
|
+
with:
|
23
|
+
ruby-version: ${{ matrix.ruby-version }}
|
24
|
+
|
25
|
+
- name: Install dependencies
|
26
|
+
run: bundle install --gemfile=gemfiles/sidekiq_${{ matrix.sidekiq-version }}.gemfile
|
27
|
+
|
28
|
+
- name: Start Redis
|
29
|
+
uses: supercharge/redis-github-action@1.5.0
|
30
|
+
|
31
|
+
- name: Run tests
|
32
|
+
run: bundle exec --gemfile=gemfiles/sidekiq_${{ matrix.sidekiq-version }}.gemfile rspec
|
33
|
+
|
34
|
+
- name: Coveralls
|
35
|
+
uses: coverallsapp/github-action@v1
|
36
|
+
with:
|
37
|
+
flag-name: run-${{ join(matrix.*, '-') }}
|
38
|
+
parallel: true
|
39
|
+
|
40
|
+
finish:
|
41
|
+
needs: test
|
42
|
+
if: ${{ always() }}
|
43
|
+
runs-on: ubuntu-latest
|
44
|
+
steps:
|
45
|
+
- name: Coveralls Finished
|
46
|
+
uses: coverallsapp/github-action@v1
|
47
|
+
with:
|
48
|
+
parallel-finished: true
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.6
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
## 0.2.0 (Mar 1, 2023)
|
2
|
+
|
3
|
+
* Upstream fix for sidekiq 6.5.0 [#43, thanks to 5minpause]
|
4
|
+
* Add support for new Sidekiq's configuration model [#42, thanks to anero]
|
5
|
+
* gemspec: Drop defunct property rubyforge_project [#37, thanks to olleolleolle]
|
6
|
+
|
7
|
+
## 0.1.3 (Oct 15, 2019)
|
8
|
+
|
9
|
+
* Fix errors when using with redis-rb > 4.1.0 [#30, #31]
|
10
|
+
|
11
|
+
## 0.1.2 (Jul 5, 2018)
|
12
|
+
|
13
|
+
* Add (provisional) Sidekiq 5 support
|
14
|
+
|
15
|
+
## 0.1.1 (Feb 15, 2016)
|
16
|
+
|
17
|
+
* Add Sidekiq 4 support
|
18
|
+
* Drop Ruby 1.9 support
|
19
|
+
|
1
20
|
## 0.1.0 (May 30, 2014)
|
2
21
|
|
3
22
|
* Support callables for all configuration options
|
data/README.md
CHANGED
@@ -2,14 +2,14 @@ sidekiq-rate-limiter
|
|
2
2
|
====================
|
3
3
|
|
4
4
|
[](https://rubygems.org/gems/sidekiq-rate-limiter)
|
5
|
-
[](https://github.com/enova/sidekiq-rate-limiter/actions/workflows/test.yml)
|
6
6
|
[](https://coveralls.io/github/enova/sidekiq-rate-limiter?branch=master)
|
7
7
|
|
8
8
|
Redis-backed, per-worker rate limits for job processing.
|
9
9
|
|
10
10
|
## Compatibility
|
11
11
|
|
12
|
-
sidekiq-rate-limiter is actively tested against MRI versions 2.
|
12
|
+
sidekiq-rate-limiter is actively tested against MRI versions 2.7 and 3.1.
|
13
13
|
|
14
14
|
sidekiq-rate-limiter works by using a custom fetch class, the class responsible
|
15
15
|
for pulling work from the queue stored in Redis. Consequently you'll want to be
|
@@ -2,5 +2,12 @@ require 'sidekiq-rate-limiter/version'
|
|
2
2
|
require 'sidekiq-rate-limiter/fetch'
|
3
3
|
|
4
4
|
Sidekiq.configure_server do |config|
|
5
|
-
Sidekiq.
|
5
|
+
# Backwards compatibility for Sidekiq < 6.1.0 (see https://github.com/mperham/sidekiq/pull/4602 for details)
|
6
|
+
if (Sidekiq::BasicFetch.respond_to?(:bulk_requeue))
|
7
|
+
Sidekiq.options[:fetch] = Sidekiq::RateLimiter::Fetch
|
8
|
+
elsif (Sidekiq::VERSION < '6.5.0') # Sidekiq config was redesigned in https://github.com/mperham/sidekiq/pull/5340
|
9
|
+
Sidekiq.options[:fetch] = Sidekiq::RateLimiter::Fetch.new(Sidekiq.options)
|
10
|
+
else
|
11
|
+
Sidekiq[:fetch] = Sidekiq::RateLimiter::Fetch.new(Sidekiq)
|
12
|
+
end
|
6
13
|
end
|
@@ -13,7 +13,6 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.homepage = "https://github.com/enova/sidekiq-rate-limiter"
|
14
14
|
s.summary = %q{Redis-backed, per-worker rate limits for job processing}
|
15
15
|
s.description = %q{Redis-backed, per-worker rate limits for job processing}
|
16
|
-
s.rubyforge_project = "nowarning"
|
17
16
|
|
18
17
|
s.files = `git ls-files`.split("\n")
|
19
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -24,8 +23,9 @@ Gem::Specification.new do |s|
|
|
24
23
|
s.add_development_dependency "pry-byebug"
|
25
24
|
s.add_development_dependency "rake"
|
26
25
|
s.add_development_dependency "rspec", '~> 3.4'
|
27
|
-
s.add_development_dependency "
|
26
|
+
s.add_development_dependency "simplecov"
|
27
|
+
s.add_development_dependency "simplecov-lcov", '~> 0.8.0'
|
28
28
|
|
29
|
-
s.add_dependency "sidekiq", ">= 4.0", "<
|
29
|
+
s.add_dependency "sidekiq", ">= 4.0", "< 7.0"
|
30
30
|
s.add_dependency "redis_rate_limiter"
|
31
31
|
end
|
@@ -27,7 +27,14 @@ RSpec.describe Sidekiq::RateLimiter::Fetch do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
let(:options)
|
30
|
+
let(:options) do
|
31
|
+
if Sidekiq::VERSION =~ /^(4|5|6\.[0-4])/
|
32
|
+
{ queues: [queue, another_queue, another_queue] }
|
33
|
+
else
|
34
|
+
Sidekiq.tap { |s| s[:queues] = [queue, another_queue, another_queue] }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
31
38
|
let(:queue) { 'basic' }
|
32
39
|
let(:another_queue) { 'some_other_queue' }
|
33
40
|
let(:args) { ['I am some args'] }
|
@@ -46,8 +53,13 @@ RSpec.describe Sidekiq::RateLimiter::Fetch do
|
|
46
53
|
else
|
47
54
|
Sidekiq::Fetcher::TIMEOUT
|
48
55
|
end
|
56
|
+
|
57
|
+
if Sidekiq::VERSION.start_with?('6.5.')
|
58
|
+
_timeout = { timeout: timeout}
|
59
|
+
timeout = _timeout
|
60
|
+
end
|
49
61
|
|
50
|
-
fetch = described_class.new options.merge(:strict => true)
|
62
|
+
fetch = described_class.new options.merge!(:strict => true)
|
51
63
|
expect(fetch.queues_cmd).to eql(["queue:#{queue}", "queue:#{another_queue}", timeout])
|
52
64
|
end
|
53
65
|
|
@@ -8,13 +8,21 @@ RSpec.describe Sidekiq::RateLimiter, 'server configuration' do
|
|
8
8
|
|
9
9
|
it 'should set Sidekiq.options[:fetch] as desired' do
|
10
10
|
Sidekiq.configure_server do |config|
|
11
|
-
|
11
|
+
if Sidekiq::VERSION =~ /^(4|5|6.0)/
|
12
|
+
expect(Sidekiq.options[:fetch]).to eql(Sidekiq::RateLimiter::Fetch)
|
13
|
+
else
|
14
|
+
expect(Sidekiq.options[:fetch]).to be_a(Sidekiq::RateLimiter::Fetch)
|
15
|
+
end
|
12
16
|
end
|
13
17
|
end
|
14
18
|
|
15
19
|
it 'should inherit from Sidekiq::BasicFetch' do
|
16
20
|
Sidekiq.configure_server do |config|
|
17
|
-
|
21
|
+
if Sidekiq::VERSION =~ /^(4|5|6.0)/
|
22
|
+
expect(Sidekiq.options[:fetch]).to be < Sidekiq::BasicFetch
|
23
|
+
else
|
24
|
+
expect(Sidekiq.options[:fetch].class.ancestors[1]).to be(Sidekiq::BasicFetch)
|
25
|
+
end
|
18
26
|
end
|
19
27
|
end
|
20
28
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,35 +1,11 @@
|
|
1
1
|
require 'sidekiq'
|
2
2
|
require 'sidekiq/testing'
|
3
|
-
|
4
|
-
## Confirming presence of redis server executable
|
5
|
-
abort "## `redis-server` not in path" if %x(which redis-server).empty?
|
6
|
-
redis_dir = "#{File.dirname(__FILE__)}/support/redis"
|
7
|
-
|
8
|
-
## Redis configuration
|
9
|
-
REDIS_CONFIG = <<-CONF
|
10
|
-
daemonize yes
|
11
|
-
pidfile #{redis_dir}/test.pid
|
12
|
-
port 6380
|
13
|
-
timeout 300
|
14
|
-
save 900 1
|
15
|
-
save 300 10
|
16
|
-
save 60 10000
|
17
|
-
dbfilename test.rdb
|
18
|
-
dir #{redis_dir}
|
19
|
-
loglevel warning
|
20
|
-
logfile stdout
|
21
|
-
databases 1
|
22
|
-
CONF
|
23
|
-
|
24
|
-
%x(echo '#{REDIS_CONFIG}' > #{redis_dir}/test.conf)
|
25
|
-
redis_command = "redis-server #{redis_dir}/test.conf"
|
26
|
-
%x[ #{redis_command} ]
|
27
|
-
##
|
3
|
+
require 'pry-byebug'
|
28
4
|
|
29
5
|
## Configuring sidekiq
|
30
6
|
options = {
|
31
7
|
logger: nil,
|
32
|
-
redis: { :
|
8
|
+
redis: { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0') }
|
33
9
|
}
|
34
10
|
|
35
11
|
Sidekiq.configure_client do |config|
|
@@ -43,12 +19,27 @@ Sidekiq.configure_server do |config|
|
|
43
19
|
config.send("#{option}=", value)
|
44
20
|
end
|
45
21
|
end
|
46
|
-
##
|
47
22
|
|
23
|
+
|
24
|
+
## Code Coverage
|
48
25
|
require 'simplecov'
|
49
26
|
|
27
|
+
SimpleCov.start do
|
28
|
+
if ENV['CI']
|
29
|
+
require 'simplecov-lcov'
|
30
|
+
|
31
|
+
SimpleCov::Formatter::LcovFormatter.config do |c|
|
32
|
+
c.report_with_single_file = true
|
33
|
+
c.single_report_path = 'coverage/lcov.info'
|
34
|
+
end
|
35
|
+
|
36
|
+
formatter SimpleCov::Formatter::LcovFormatter
|
37
|
+
end
|
38
|
+
|
39
|
+
add_filter %w[version.rb spec/]
|
40
|
+
end
|
41
|
+
|
50
42
|
require File.expand_path("../../lib/sidekiq-rate-limiter", __FILE__)
|
51
|
-
##
|
52
43
|
|
53
44
|
## Hook to set Sidekiq::Testing mode using rspec tags
|
54
45
|
RSpec.configure do |config|
|
@@ -76,18 +67,5 @@ RSpec.configure do |config|
|
|
76
67
|
elsif Sidekiq::Testing.fake?
|
77
68
|
Sidekiq::Worker.clear_all
|
78
69
|
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
config.after(:all) do
|
83
|
-
## Stopping Redis
|
84
|
-
ps = %x(ps -A -o pid,command | grep '#{redis_command}' | grep -v grep).split($/)
|
85
|
-
pids = ps.map { |p| p.split(/\s+/).reject(&:empty?).first.to_i }
|
86
|
-
pids.each { |pid| Process.kill("TERM", pid) }
|
87
|
-
|
88
|
-
## Cleaning up
|
89
|
-
sleep 0.1
|
90
|
-
%x(rm -rf #{redis_dir}/*)
|
91
70
|
end
|
92
71
|
end
|
93
|
-
##
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-rate-limiter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Docady
|
8
8
|
- Blake Thomas
|
9
9
|
- Enova
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2023-03-01 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: pry
|
@@ -69,19 +69,33 @@ dependencies:
|
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '3.4'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: simplecov
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: simplecov-lcov
|
73
87
|
requirement: !ruby/object:Gem::Requirement
|
74
88
|
requirements:
|
75
89
|
- - "~>"
|
76
90
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
91
|
+
version: 0.8.0
|
78
92
|
type: :development
|
79
93
|
prerelease: false
|
80
94
|
version_requirements: !ruby/object:Gem::Requirement
|
81
95
|
requirements:
|
82
96
|
- - "~>"
|
83
97
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
98
|
+
version: 0.8.0
|
85
99
|
- !ruby/object:Gem::Dependency
|
86
100
|
name: sidekiq
|
87
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,7 +105,7 @@ dependencies:
|
|
91
105
|
version: '4.0'
|
92
106
|
- - "<"
|
93
107
|
- !ruby/object:Gem::Version
|
94
|
-
version: '
|
108
|
+
version: '7.0'
|
95
109
|
type: :runtime
|
96
110
|
prerelease: false
|
97
111
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -101,7 +115,7 @@ dependencies:
|
|
101
115
|
version: '4.0'
|
102
116
|
- - "<"
|
103
117
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
118
|
+
version: '7.0'
|
105
119
|
- !ruby/object:Gem::Dependency
|
106
120
|
name: redis_rate_limiter
|
107
121
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,10 +137,10 @@ executables: []
|
|
123
137
|
extensions: []
|
124
138
|
extra_rdoc_files: []
|
125
139
|
files:
|
140
|
+
- ".github/workflows/test.yml"
|
126
141
|
- ".gitignore"
|
127
142
|
- ".rspec"
|
128
|
-
- ".
|
129
|
-
- ".travis.yml"
|
143
|
+
- ".ruby-version"
|
130
144
|
- CHANGELOG.md
|
131
145
|
- Gemfile
|
132
146
|
- LICENSE
|
@@ -134,6 +148,9 @@ files:
|
|
134
148
|
- Rakefile
|
135
149
|
- gemfiles/sidekiq_4.gemfile
|
136
150
|
- gemfiles/sidekiq_5.gemfile
|
151
|
+
- gemfiles/sidekiq_6.0.gemfile
|
152
|
+
- gemfiles/sidekiq_6.1.gemfile
|
153
|
+
- gemfiles/sidekiq_6.x.gemfile
|
137
154
|
- lib/sidekiq-rate-limiter.rb
|
138
155
|
- lib/sidekiq-rate-limiter/fetch.rb
|
139
156
|
- lib/sidekiq-rate-limiter/server.rb
|
@@ -147,7 +164,7 @@ homepage: https://github.com/enova/sidekiq-rate-limiter
|
|
147
164
|
licenses:
|
148
165
|
- MIT
|
149
166
|
metadata: {}
|
150
|
-
post_install_message:
|
167
|
+
post_install_message:
|
151
168
|
rdoc_options: []
|
152
169
|
require_paths:
|
153
170
|
- lib
|
@@ -162,9 +179,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
179
|
- !ruby/object:Gem::Version
|
163
180
|
version: '0'
|
164
181
|
requirements: []
|
165
|
-
|
166
|
-
|
167
|
-
signing_key:
|
182
|
+
rubygems_version: 3.1.6
|
183
|
+
signing_key:
|
168
184
|
specification_version: 4
|
169
185
|
summary: Redis-backed, per-worker rate limits for job processing
|
170
|
-
test_files:
|
186
|
+
test_files:
|
187
|
+
- spec/sidekiq-rate-limiter/fetch_spec.rb
|
188
|
+
- spec/sidekiq-rate-limiter/server_spec.rb
|
189
|
+
- spec/spec_helper.rb
|
190
|
+
- spec/support/redis/.keep
|
data/.simplecov
DELETED
data/.travis.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
cache: bundler
|
3
|
-
sudo: false
|
4
|
-
rvm:
|
5
|
-
- 2.5.1
|
6
|
-
- 2.4.4
|
7
|
-
|
8
|
-
gemfile:
|
9
|
-
- 'gemfiles/sidekiq_4.gemfile'
|
10
|
-
- 'gemfiles/sidekiq_5.gemfile'
|
11
|
-
|
12
|
-
deploy:
|
13
|
-
provider: rubygems
|
14
|
-
api_key:
|
15
|
-
secure: "VX48kpd9UySMWSDMwjxaNZy14RW1usU7eFLGNeohjCzxUsCywn+mS5/IZHl56vDXWJp7JwnboDiIa74hGV86PcSEM7kr+DAZO33iCazMNTpoWDiH1iJfj0jZbO2rOvx0rGI9fGYcC9xfyKQ37hVb13Eo0bnKa0YX30HArnx7EFo="
|
16
|
-
on:
|
17
|
-
tags: true
|
18
|
-
all_branches: true
|