logster 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -2
- data/lib/logster/redis_store.rb +9 -2
- data/lib/logster/version.rb +1 -1
- data/test/logster/test_redis_rate_limiter.rb +20 -2
- 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: b7977f29deaddc757de884805c3ab10ad34979dd
|
4
|
+
data.tar.gz: 6c02e339cc7ee928c4a84d97f8183058ae5a6149
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 586e6ffde7e7ae5a5e8e11ca762b8f5ed0e94342682cf39e3c12adf0f70da449b657f9dfe04f56efe09e52704221bc08907dcd7f67ad848b91270405cf603600
|
7
|
+
data.tar.gz: c0749406fcf8b7981bd555ca691e3531a41f775acf4909b4f13f106753b144212b57bfddc6c2fca280a75a3d04a6f117973ed46853e478f39616b3bcf34a5254
|
data/README.md
CHANGED
@@ -97,11 +97,16 @@ Logster UI is built using [Ember.js](http://emberjs.com/)
|
|
97
97
|
|
98
98
|
# CHANGELOG
|
99
99
|
|
100
|
-
-
|
100
|
+
- 2016-03-22: Version 1.2.1
|
101
|
+
- Feature: Add method to retrieve current rate from rate limiters.
|
102
|
+
- Feature: Make `RedisStore#rate_limits` readable.
|
103
|
+
- Feature: Make `RedisRateLimiter#callback` and `RedisRateLimiter#duration` readable.
|
104
|
+
|
105
|
+
- 2016-03-18: Version 1.2.0
|
101
106
|
- Fix: Move Redis configuration into RedisStore.
|
102
107
|
- Feature: Allow `RedisStore#redis_prefix` to either be a String or a Proc.
|
103
108
|
|
104
|
-
-
|
109
|
+
- 2016-02-11: Version 1.1.1
|
105
110
|
- Feature: Error rate can now be tracked in one minute and one hour buckets.
|
106
111
|
|
107
112
|
- 2015-11-27: Version 1.0.1
|
data/lib/logster/redis_store.rb
CHANGED
@@ -6,6 +6,8 @@ module Logster
|
|
6
6
|
BUCKETS = 6
|
7
7
|
PREFIX = "__LOGSTER__RATE_LIMIT".freeze
|
8
8
|
|
9
|
+
attr_reader :duration, :callback
|
10
|
+
|
9
11
|
def initialize(redis, severities, limit, duration, redis_prefix = nil, callback = nil)
|
10
12
|
@severities = severities
|
11
13
|
@limit = limit
|
@@ -14,6 +16,11 @@ module Logster
|
|
14
16
|
@redis_prefix = redis_prefix
|
15
17
|
@redis = redis
|
16
18
|
@bucket_range = @duration / BUCKETS
|
19
|
+
@mget_keys = (0..(BUCKETS - 1)).map { |i| "#{key}:#{i}" }
|
20
|
+
end
|
21
|
+
|
22
|
+
def retrieve_rate
|
23
|
+
@redis.mget(@mget_keys).reduce(0) { |sum, value| sum + value.to_i }
|
17
24
|
end
|
18
25
|
|
19
26
|
def check(severity)
|
@@ -72,10 +79,9 @@ module Logster
|
|
72
79
|
end
|
73
80
|
|
74
81
|
def mget_keys(bucket_num)
|
75
|
-
@mget_keys ||= (0..(BUCKETS - 1)).map { |i| "\"#{key}:#{i}\"" }
|
76
82
|
keys = @mget_keys.dup
|
77
83
|
keys.delete_at(bucket_num)
|
78
|
-
keys.join(
|
84
|
+
keys.map { |key| "'#{key}'" }.join(', ')
|
79
85
|
end
|
80
86
|
|
81
87
|
def bucket_number(time)
|
@@ -91,6 +97,7 @@ module Logster
|
|
91
97
|
|
92
98
|
attr_accessor :redis, :max_backlog, :redis_raw_connection
|
93
99
|
attr_writer :redis_prefix
|
100
|
+
attr_reader :rate_limits
|
94
101
|
|
95
102
|
def initialize(redis = nil)
|
96
103
|
super()
|
data/lib/logster/version.rb
CHANGED
@@ -9,6 +9,7 @@ class TestRedisRateLimiter < Minitest::Test
|
|
9
9
|
|
10
10
|
def teardown
|
11
11
|
@redis.flushall
|
12
|
+
Timecop.return
|
12
13
|
end
|
13
14
|
|
14
15
|
def test_check
|
@@ -143,16 +144,33 @@ class TestRedisRateLimiter < Minitest::Test
|
|
143
144
|
assert_equal(1, @rate_limiter.check(Logger::WARN))
|
144
145
|
assert_redis_key(60, 0)
|
145
146
|
|
146
|
-
|
147
|
+
toggle = true
|
147
148
|
|
148
149
|
@rate_limiter = Logster::RedisRateLimiter.new(
|
149
|
-
@redis, [Logger::WARN], 1, 60, Proc.new {
|
150
|
+
@redis, [Logger::WARN], 1, 60, Proc.new { toggle ? 'lobster1' : 'lobster2' }
|
150
151
|
)
|
151
152
|
|
152
153
|
assert_includes(key, "lobster1")
|
154
|
+
|
155
|
+
toggle = false
|
153
156
|
assert_includes(key, "lobster2")
|
154
157
|
end
|
155
158
|
|
159
|
+
def test_retrieve_rate
|
160
|
+
time = Time.new(2015, 1, 1, 1 , 1)
|
161
|
+
Timecop.freeze(time)
|
162
|
+
|
163
|
+
@rate_limiter = Logster::RedisRateLimiter.new(@redis, [Logger::WARN], 1, 60)
|
164
|
+
|
165
|
+
@rate_limiter.check(Logger::WARN)
|
166
|
+
assert_equal(@rate_limiter.retrieve_rate, 1)
|
167
|
+
|
168
|
+
Timecop.freeze(time + 50) do
|
169
|
+
@rate_limiter.check(Logger::WARN)
|
170
|
+
assert_equal(@rate_limiter.retrieve_rate, 2)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
156
174
|
private
|
157
175
|
|
158
176
|
def key
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- UI for viewing logs in Rack
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|