congestion 0.0.3 → 0.1.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
- SHA1:
3
- metadata.gz: d59f5a0250e61d9968b5f465c84877d74de027e3
4
- data.tar.gz: 664e2b1cd954b180b1652c1b00b4188c7b7577a6
2
+ SHA256:
3
+ metadata.gz: 74d38ac534e68ff635448423e59608ea399916f7932262dcaa22447a194ab9aa
4
+ data.tar.gz: 435974e094f5c37727c69aa80449776bbd7fd85ea71d54b35e9f3b0bad714f36
5
5
  SHA512:
6
- metadata.gz: c71112f0a9ba8d2b6d3321a3d0294f69ea881c8c80e2a07014582d1168d8fbb6d8a41bc1854033c9bc24b8aa567f2517ad5034135d25fee75f3872096ff4c6eb
7
- data.tar.gz: 1e756869cd2ad93afb3c9e2b4767d651b84576c93f753f0a437be785b1af748c2ead59d805211863e64fb67ed1dd5f39476a834246c97eace97a661dedade055
6
+ metadata.gz: bc94b2ca6204b54f2df7981250bb847fd8e618c4f3a2e9369e44a9f4e18eda6f8e9b5ab08ff7e603955765068401f7618cb247f5f61553a16b94d294c3e56346
7
+ data.tar.gz: c7b9073c138665cd1115a02a2c14f00ccc6074787b1311e732e43e3f34adc0f2c2f9082cb0b10baf59d750cad42c34af0b1cc612d9a7d9899915d4af1a49e5d2
@@ -7,5 +7,9 @@ rvm:
7
7
  - jruby-19mode
8
8
  services:
9
9
  - redis-server
10
- jruby_before_script: &jruby_before_script
10
+ jruby_before_script:
11
11
  - bundle exec jbundle install
12
+ addons:
13
+ code_climate:
14
+ repo_token:
15
+ secure: IRJtjJW5EFgmD8dVa/E338jrnsry1FuKRpz943HKUG0AT2b3PgSafm4DCIycnxCEtvwmTrh75ZNt/9jUQyEktO5NM4f2V2WqlL53wVJPiRwr7kyySbPSeZF6D8/1M95yTphmL6yJ2gLtuJA35lG+hTPq+VkMAQGGu5NcwNp6HkU=
data/README.md CHANGED
@@ -3,9 +3,15 @@
3
3
  [![Build Status](https://travis-ci.org/parrish/Congestion.svg?branch=master)](https://travis-ci.org/parrish/Congestion)
4
4
  [![Test Coverage](https://codeclimate.com/github/parrish/Congestion/badges/coverage.svg)](https://codeclimate.com/github/parrish/Congestion)
5
5
  [![Code Climate](https://codeclimate.com/github/parrish/Congestion/badges/gpa.svg)](https://codeclimate.com/github/parrish/Congestion)
6
+ [![Gem Version](https://badge.fury.io/rb/congestion.svg)](http://badge.fury.io/rb/congestion)
6
7
 
7
8
  A Redis rate limiter that provides both time-based limits and quantity-based limits based on [classdojo/rolling-rate-limiter](https://github.com/classdojo/rolling-rate-limiter).
8
9
 
10
+ ## Middleware
11
+
12
+ - [Sidekiq-Congestion](https://github.com/parrish/Sidekiq-Congestion)
13
+ - [Rack-Congestion](https://github.com/parrish/Rack-Congestion)
14
+
9
15
  ## Installation
10
16
 
11
17
  Add this line to your application's Gemfile:
@@ -22,11 +22,10 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency 'redis', '>= 3.1'
23
23
  spec.add_runtime_dependency 'connection_pool', '>= 2.0'
24
24
  spec.add_development_dependency 'bundler', '>= 1.5'
25
- spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rake', '>= 12.3.3'
26
26
  spec.add_development_dependency 'rspec', '~> 3.2'
27
27
  spec.add_development_dependency 'rspec-its', '~> 1.2'
28
28
  spec.add_development_dependency 'guard-rspec', '~> 4.5'
29
29
  spec.add_development_dependency 'timecop', '~> 0.7'
30
30
  spec.add_development_dependency 'pry'
31
- spec.add_development_dependency 'codeclimate-test-reporter'
32
31
  end
@@ -84,20 +84,31 @@ module Congestion
84
84
 
85
85
  def add_request
86
86
  unless options[:track_rejected]
87
- redis.zadd key, current_time, current_time
87
+ add_request = redis.multi do |t|
88
+ t.zadd key, current_time, current_time # [0] - key added
89
+ t.ttl key # [1] - key ttl
90
+ end
91
+ # TTL is -1 if not set, https://redis.io/commands/ttl
92
+ if add_request[1] == -1
93
+ # ensure we set the expire TTL on the request key
94
+ # using the raw interval here after the 'get_requests' limit check
95
+ # should be close enough to the actual interval folks desire
96
+ redis.pexpire key, options[:interval]
97
+ end
88
98
  end
89
99
  end
90
100
 
91
101
  def get_requests
92
102
  @requests ||= redis.multi do |t|
93
- t.zremrangebyscore key, 0, expired_at # [0] - clear old requests
94
- t.zcount key, '-inf', '+inf' # [1] - number of requests
95
- t.zrange key, 0, 0 # [2] - first request
96
- t.zrange key, -1, -1 # [3] - last request
97
- t.pexpire key, options[:interval] # [4] - expire request key
98
-
99
- # [5] - Add the request if tracking rejected
100
- t.zadd(key, current_time, current_time) if options[:track_rejected]
103
+ t.zremrangebyscore key, 0, expired_at # [0] - clear old requests
104
+ t.zcount key, '-inf', '+inf' # [1] - number of requests
105
+ t.zrange key, 0, 0 # [2] - first request
106
+ t.zrange key, -1, -1 # [3] - last request
107
+ if options[:track_rejected]
108
+ t.zadd(key, current_time, current_time) # [4] - Add the request if tracking rejected
109
+ end
110
+ # ensure the TTL is set after we've added the key if tracking rejected
111
+ t.pexpire key, options[:interval] # [5] - expire request key
101
112
  end
102
113
  end
103
114
  end
@@ -1,3 +1,3 @@
1
1
  module Congestion
2
- VERSION = '0.0.3'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: congestion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Parrish
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-14 00:00:00.000000000 Z
11
+ date: 2020-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: 12.3.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: 12.3.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -136,20 +136,6 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: codeclimate-test-reporter
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
139
  description: Redis rate limiter that provides both time-based limits and quantity-based
154
140
  limits
155
141
  email:
@@ -193,8 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
179
  - !ruby/object:Gem::Version
194
180
  version: '0'
195
181
  requirements: []
196
- rubyforge_project:
197
- rubygems_version: 2.4.6
182
+ rubygems_version: 3.0.6
198
183
  signing_key:
199
184
  specification_version: 4
200
185
  summary: Redis rate limiter