time_window_drop_collector 0.1.15 → 0.3.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.
- data/README.md +3 -2
- data/lib/time_window_drop_collector.rb +3 -3
- data/lib/time_window_drop_collector/storage.rb +2 -2
- data/lib/time_window_drop_collector/version.rb +1 -1
- data/lib/time_window_drop_collector/wrappers/memcache.rb +2 -2
- data/lib/time_window_drop_collector/wrappers/mock.rb +2 -2
- data/lib/time_window_drop_collector/wrappers/rails_cache.rb +2 -2
- data/lib/time_window_drop_collector/wrappers/redis.rb +2 -2
- data/test/memcache_wrapper_test.rb +2 -2
- data/test/mock_wrapper_test.rb +3 -3
- data/test/rails_cache_wrapper_test.rb +3 -3
- data/test/redis_wrapper_test.rb +5 -5
- data/test/storage_test.rb +8 -1
- data/test/time_window_drop_collector_test.rb +11 -1
- data/time_window_drop_collector.gemspec +1 -1
- metadata +16 -16
data/README.md
CHANGED
@@ -43,9 +43,9 @@ Can be:
|
|
43
43
|
twdc.drop( "id1" )
|
44
44
|
twdc.drop( "id1" )
|
45
45
|
twdc.drop( "id2" )
|
46
|
-
twdc.drop( "id1" )
|
46
|
+
twdc.drop( "id1", 4 )
|
47
47
|
|
48
|
-
twdc.count( "id1" ) # =>
|
48
|
+
twdc.count( "id1" ) # => 6
|
49
49
|
twdc.count( "id2" ) # => 1
|
50
50
|
|
51
51
|
# after 10 minutes
|
@@ -80,3 +80,4 @@ It uses the `Rails.cache` accesible
|
|
80
80
|
TimeWindowDropCollector.new do
|
81
81
|
client :redis, { :host => "host", :port => "port" }
|
82
82
|
end
|
83
|
+
|
@@ -33,12 +33,12 @@ class TimeWindowDropCollector
|
|
33
33
|
@storage = TimeWindowDropCollector::Storage.new( wrapper, config[:window], config[:slices] )
|
34
34
|
end
|
35
35
|
|
36
|
-
def drop( keys )
|
36
|
+
def drop( keys, amount=1 )
|
37
37
|
keys = [keys] unless keys.is_a? Array
|
38
38
|
keys = keys.map(&:to_s)
|
39
39
|
|
40
|
-
TimeWindowDropCollector::Logger.log "DROP keys: #{keys.join(", ")}"
|
41
|
-
storage.incr( keys )
|
40
|
+
TimeWindowDropCollector::Logger.log "DROP keys: #{keys.join(", ")}, amount: #{amount}"
|
41
|
+
storage.incr( keys, amount )
|
42
42
|
end
|
43
43
|
|
44
44
|
def count( orig_keys )
|
@@ -9,8 +9,8 @@ class TimeWindowDropCollector::Storage
|
|
9
9
|
@slices = slices
|
10
10
|
end
|
11
11
|
|
12
|
-
def incr( keys )
|
13
|
-
wrapper.incr( timestamp_key_multi( keys ), window )
|
12
|
+
def incr( keys, amount=1 )
|
13
|
+
wrapper.incr( timestamp_key_multi( keys ), window, amount )
|
14
14
|
end
|
15
15
|
|
16
16
|
def count( keys )
|
@@ -7,10 +7,10 @@ class TimeWindowDropCollector
|
|
7
7
|
@client = Dalli::Client.new( opts )
|
8
8
|
end
|
9
9
|
|
10
|
-
def incr( keys, expire_time )
|
10
|
+
def incr( keys, expire_time, amount )
|
11
11
|
client.multi do
|
12
12
|
keys.each do |key|
|
13
|
-
client.incr( key,
|
13
|
+
client.incr( key, amount, expire_time, 1 )
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -7,9 +7,9 @@ class TimeWindowDropCollector
|
|
7
7
|
@client = Rails.cache
|
8
8
|
end
|
9
9
|
|
10
|
-
def incr( keys, expire_time )
|
10
|
+
def incr( keys, expire_time, amount )
|
11
11
|
keys.each do |key|
|
12
|
-
client.increment( key,
|
12
|
+
client.increment( key, amount, :expires_in => expire_time )
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -7,10 +7,10 @@ class TimeWindowDropCollector
|
|
7
7
|
@client = ::Redis.new( opts )
|
8
8
|
end
|
9
9
|
|
10
|
-
def incr( keys, expire_time )
|
10
|
+
def incr( keys, expire_time, amount )
|
11
11
|
client.pipelined do
|
12
12
|
keys.each do |key|
|
13
|
-
client.
|
13
|
+
client.incrby( key, amount )
|
14
14
|
client.expire( key, expire_time )
|
15
15
|
end
|
16
16
|
end
|
@@ -9,8 +9,8 @@ class MemcacheWrapperTest < Test::Unit::TestCase
|
|
9
9
|
|
10
10
|
def test_incr
|
11
11
|
wrapper = TimeWindowDropCollector::Wrappers::Memcache.new( ["arg1"] )
|
12
|
-
wrapper.client.expects( :incr ).with( "key",
|
13
|
-
wrapper.incr( "key", "expire_time" )
|
12
|
+
wrapper.client.expects( :incr ).with( "key", 5, "expire_time", 1 )
|
13
|
+
wrapper.incr( "key", "expire_time", 5 )
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_values_for
|
data/test/mock_wrapper_test.rb
CHANGED
@@ -9,9 +9,9 @@ class MockWrapperTest < Test::Unit::TestCase
|
|
9
9
|
|
10
10
|
def test_incr
|
11
11
|
wrapper = TimeWindowDropCollector::Wrappers::Mock.new( ["arg1"] )
|
12
|
-
wrapper.client.expects( :incr ).with( "key1",
|
13
|
-
wrapper.client.expects( :incr ).with( "key2",
|
14
|
-
wrapper.incr( ["key1", "key2"], "expire_time" )
|
12
|
+
wrapper.client.expects( :incr ).with( "key1", 2, nil, 1 )
|
13
|
+
wrapper.client.expects( :incr ).with( "key2", 2, nil, 1 )
|
14
|
+
wrapper.incr( ["key1", "key2"], "expire_time", 2 )
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_values_for
|
@@ -14,10 +14,10 @@ class MemcacheWrapperTest < Test::Unit::TestCase
|
|
14
14
|
|
15
15
|
def test_incr
|
16
16
|
wrapper = TimeWindowDropCollector::Wrappers::RailsCache.new( ["arg1"] )
|
17
|
-
wrapper.client.expects( :increment ).with( "key1",
|
18
|
-
wrapper.client.expects( :increment ).with( "key2",
|
17
|
+
wrapper.client.expects( :increment ).with( "key1", 5, :expires_in => "expire_time" )
|
18
|
+
wrapper.client.expects( :increment ).with( "key2", 5, :expires_in => "expire_time" )
|
19
19
|
|
20
|
-
wrapper.incr( ["key1", "key2"], "expire_time" )
|
20
|
+
wrapper.incr( ["key1", "key2"], "expire_time", 5 )
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_values_for
|
data/test/redis_wrapper_test.rb
CHANGED
@@ -4,7 +4,7 @@ class RedisMock
|
|
4
4
|
def multi
|
5
5
|
yield
|
6
6
|
end
|
7
|
-
def
|
7
|
+
def incrby(key,amount);end
|
8
8
|
def expire(key);end
|
9
9
|
def mget(keys);end
|
10
10
|
def pipelined
|
@@ -24,13 +24,13 @@ class RedisWrapperTest < Test::Unit::TestCase
|
|
24
24
|
Redis.expects( :new ).returns( RedisMock.new )
|
25
25
|
wrapper = TimeWindowDropCollector::Wrappers::Redis.new( nil )
|
26
26
|
|
27
|
-
wrapper.client.expects( :
|
27
|
+
wrapper.client.expects( :incrby ).with( "key1", 10 )
|
28
28
|
wrapper.client.expects( :expire ).with( "key1", "expire_time" )
|
29
29
|
|
30
|
-
wrapper.client.expects( :
|
30
|
+
wrapper.client.expects( :incrby ).with( "key2", 10 )
|
31
31
|
wrapper.client.expects( :expire ).with( "key2", "expire_time" )
|
32
32
|
|
33
|
-
wrapper.incr( ["key1", "key2"], "expire_time" )
|
33
|
+
wrapper.incr( ["key1", "key2"], "expire_time", 10 )
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_incr_agregates_commands_under_pipelined
|
@@ -39,7 +39,7 @@ class RedisWrapperTest < Test::Unit::TestCase
|
|
39
39
|
|
40
40
|
wrapper.client.expects( :pipelined )
|
41
41
|
|
42
|
-
wrapper.incr( nil, nil )
|
42
|
+
wrapper.incr( nil, nil, nil )
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_get
|
data/test/storage_test.rb
CHANGED
@@ -37,11 +37,18 @@ class StorageTest < Test::Unit::TestCase
|
|
37
37
|
|
38
38
|
def test_incr
|
39
39
|
@storage.expects( :timestamp_key_multi ).with( ["keys"] ).returns( "timestamp_keys" )
|
40
|
-
@wrapper.expects( :incr ).with( "timestamp_keys", 600 )
|
40
|
+
@wrapper.expects( :incr ).with( "timestamp_keys", 600, 1 )
|
41
41
|
|
42
42
|
@storage.incr( ["keys"] )
|
43
43
|
end
|
44
44
|
|
45
|
+
def test_incr_with_val
|
46
|
+
@storage.expects( :timestamp_key_multi ).with( ["keys"] ).returns( "timestamp_keys" )
|
47
|
+
@wrapper.expects( :incr ).with( "timestamp_keys", 600, 30.5 )
|
48
|
+
|
49
|
+
@storage.incr( ["keys"], 30.5 )
|
50
|
+
end
|
51
|
+
|
45
52
|
def test_count
|
46
53
|
@storage.expects( :window_keys_multi ).with( "keys" ).returns( "window_keys" )
|
47
54
|
@wrapper.expects( :get ).with( "window_keys" ).returns( "keys_values" )
|
@@ -33,7 +33,7 @@ class TimeWindowDropCollectorTest < Test::Unit::TestCase
|
|
33
33
|
|
34
34
|
def test_drop
|
35
35
|
storage = mock()
|
36
|
-
storage.expects( :incr ).with( ["key"] )
|
36
|
+
storage.expects( :incr ).with( ["key"], 1 )
|
37
37
|
|
38
38
|
twdc = TimeWindowDropCollector.new
|
39
39
|
twdc.stubs( :storage ).returns( storage )
|
@@ -41,6 +41,16 @@ class TimeWindowDropCollectorTest < Test::Unit::TestCase
|
|
41
41
|
twdc.drop( "key" )
|
42
42
|
end
|
43
43
|
|
44
|
+
def test_drop_with_custom_amount
|
45
|
+
storage = mock()
|
46
|
+
storage.expects( :incr ).with( ["key"], 15 )
|
47
|
+
|
48
|
+
twdc = TimeWindowDropCollector.new
|
49
|
+
twdc.stubs( :storage ).returns( storage )
|
50
|
+
|
51
|
+
twdc.drop( "key", 15 )
|
52
|
+
end
|
53
|
+
|
44
54
|
def test_count
|
45
55
|
storage = mock()
|
46
56
|
storage.expects( :count ).with( ["key"] ).returns( { "key" => 10 } )
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split( "\n" ).map{ |f| File.basename( f ) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_development_dependency "bundler"
|
21
|
+
s.add_development_dependency "bundler"
|
22
22
|
s.add_development_dependency "rake", "0.9.2.2"
|
23
23
|
s.add_development_dependency "mocha", "0.10.0"
|
24
24
|
s.add_development_dependency "delorean", "1.2.0"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_window_drop_collector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,22 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-12-19 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
|
-
requirement: &
|
17
|
+
requirement: &70353016535360 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
|
-
- -
|
20
|
+
- - ! '>='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70353016535360
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rake
|
28
|
-
requirement: &
|
28
|
+
requirement: &70353016534860 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - =
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 0.9.2.2
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70353016534860
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: mocha
|
39
|
-
requirement: &
|
39
|
+
requirement: &70353016534360 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - =
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 0.10.0
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70353016534360
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: delorean
|
50
|
-
requirement: &
|
50
|
+
requirement: &70353016533900 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - =
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 1.2.0
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70353016533900
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: memcache_mock
|
61
|
-
requirement: &
|
61
|
+
requirement: &70353016533440 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - =
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: 0.0.1
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70353016533440
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: dalli
|
72
|
-
requirement: &
|
72
|
+
requirement: &70353016533060 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70353016533060
|
81
81
|
description: Counter storage system for a concrete time window
|
82
82
|
email:
|
83
83
|
- fguillen.mail@gmail.com
|