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 +4 -4
- data/lib/ruby_rolling_rate_limiter/version.rb +1 -1
- data/lib/ruby_rolling_rate_limiter.rb +10 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d6a06dabda7291a27e30b3348cbbf5aa564189f
|
4
|
+
data.tar.gz: 67583bb1e73272f81949894311db42db2ca93919
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 901303ce2533f0cf5be066bc36ba0e00b79814786eec572cd6ec99c2352e9407c3b69d1325e8a08797170f3ad4100f202a25826cf3f8a19081a9e48eeeeff510
|
7
|
+
data.tar.gz: 13e6cbe854abbfd36eea606ef9f2325206937615a41a502212c4301ff3b53116f329bf1fdeaf5856c2f721d73487338d35163dccf4353f2715bbe803c7e04af8
|
@@ -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
|
-
|
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
|
-
|
55
|
-
|
56
|
-
|
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
|
-
|
62
|
+
|
64
63
|
else
|
65
|
-
results =
|
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
|
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.
|
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-
|
11
|
+
date: 2016-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|