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