congestion 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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