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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 97266a5b02f788e8537daaf28e0adff771a3bf6b
4
- data.tar.gz: f43b618a847f9e98f54ecb9e469a29e0354a6947
3
+ metadata.gz: b7977f29deaddc757de884805c3ab10ad34979dd
4
+ data.tar.gz: 6c02e339cc7ee928c4a84d97f8183058ae5a6149
5
5
  SHA512:
6
- metadata.gz: 22657415d4f4173ed2a1850e43a146d81db3c53e33d6009f99069fbe81671fb65d88809fc79a963b06744a17e288364706d1ef63127bcacb3076cc9be789e28d
7
- data.tar.gz: 7e57a8c7862c3375948e2a097b89c1c1d3f023e33a32c928196371e3c7ef4c02b90df6828790d12fafb49c21acccf5b7810abe32220f4030e012ed463a271081
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
- - 2015-03-18: Version 1.2.0
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
- - 2015-02-11: Version 1.1.1
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
@@ -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()
@@ -1,3 +1,3 @@
1
1
  module Logster
2
- VERSION = "1.2.0"
2
+ VERSION = "1.2.1"
3
3
  end
@@ -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
- array = ['lobster1', 'lobster2']
147
+ toggle = true
147
148
 
148
149
  @rate_limiter = Logster::RedisRateLimiter.new(
149
- @redis, [Logger::WARN], 1, 60, Proc.new { array.delete_at(0) }
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.0
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-21 00:00:00.000000000 Z
11
+ date: 2016-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler