ruby_rolling_rate_limiter 0.1.3 → 0.1.4

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
  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