logster 1.2.0 → 1.2.1
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/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
|