ruby_rolling_rate_limiter 0.1.3 → 0.1.4

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
2
  SHA1:
3
- metadata.gz: 707ecff1e33f4f609cc8399cdebab57ad206daca
4
- data.tar.gz: 89273199718232705e954c41decdaa1923e10a98
3
+ metadata.gz: 1d6a06dabda7291a27e30b3348cbbf5aa564189f
4
+ data.tar.gz: 67583bb1e73272f81949894311db42db2ca93919
5
5
  SHA512:
6
- metadata.gz: 41bd11d653038fb3008c62e15289a031b3390ea797d8f38bfa1c1a602420ae5ca7c38459bc117e600b35eb2db9bc20b328ff71f82c4c91ae7d00b5bd59491a58
7
- data.tar.gz: f683ecb68d5c63da9aa0eae3b3d1fd648f89d4ea7517f82ab39edf3cd0eb6c15ab3eacd56ecfbe50e9614ff6bce6274c3189e071b0927499f6ff3abe17a5ce6d
6
+ metadata.gz: 901303ce2533f0cf5be066bc36ba0e00b79814786eec572cd6ec99c2352e9407c3b69d1325e8a08797170f3ad4100f202a25826cf3f8a19081a9e48eeeeff510
7
+ data.tar.gz: 13e6cbe854abbfd36eea606ef9f2325206937615a41a502212c4301ff3b53116f329bf1fdeaf5856c2f721d73487338d35163dccf4353f2715bbe803c7e04af8
@@ -1,3 +1,3 @@
1
1
  class RubyRollingRateLimiter
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -48,21 +48,20 @@ class RubyRollingRateLimiter
48
48
  if max_retry_counter <= 100
49
49
  @lock_manager.lock("#{key}-lock", 10000) do |locked|
50
50
  if locked
51
- @redis_connection.multi
51
+ # Because the resource is locked via redlock, I'm going to remove the multi on this.
52
52
  @redis_connection.zremrangebyscore(key, 0, clear_before.to_s)
53
- @redis_connection.zrange(key, 0, -1)
54
- cur = @redis_connection.exec
55
-
56
- if (cur[1].count <= @max_calls_per_interval) && ((cur[1].count+call_size) <= @max_calls_per_interval) && ((@min_distance_between_calls_in_seconds * 1000 * 1000) && (now - cur[1].last.to_i) > (@min_distance_between_calls_in_seconds * 1000 * 1000))
57
- @redis_connection.multi
58
- @redis_connection.zrange(key, 0, -1)
59
- call_size.times do
53
+ current_range = @redis_connection.zrange(key, 0, -1)
54
+ if (current_range.count <= @max_calls_per_interval) && ((current_range.count+call_size) <= @max_calls_per_interval) && ((@min_distance_between_calls_in_seconds * 1000 * 1000) && (now - current_range.last.to_i) > (@min_distance_between_calls_in_seconds * 1000 * 1000))
55
+ results = @redis_connection.zrange(key, 0, -1)
56
+ call_size.times do
60
57
  @redis_connection.zadd(key, now.to_s, now.to_s)
58
+ # This will allow us to make spacing between the weights.
59
+ now = DateTime.now.strftime('%s%6N').to_i # Time since EPOC in microseconds.
61
60
  end
62
61
  @redis_connection.expire(key, @interval_in_seconds)
63
- results = @redis_connection.exec
62
+
64
63
  else
65
- results = [cur[1]]
64
+ results = current_range
66
65
  end
67
66
  else
68
67
  raise Errors::LockWaiting, "Could not aquire lock"
@@ -78,7 +77,7 @@ class RubyRollingRateLimiter
78
77
  end
79
78
 
80
79
  if results
81
- call_set = results[0]
80
+ call_set = results
82
81
  too_many_in_interval = call_set.count >= @max_calls_per_interval
83
82
  time_since_last_request = (@min_distance_between_calls_in_seconds * 1000 * 1000) && (now - call_set.last.to_i)
84
83
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_rolling_rate_limiter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Kloppenborg
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-14 00:00:00.000000000 Z
11
+ date: 2016-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler