fluent-plugin-redis-counter 0.2.0 → 0.3.0
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 +15 -0
- data/CHANGELOG.md +3 -0
- data/README.md +8 -0
- data/VERSION +1 -1
- data/fluent-plugin-redis-counter.gemspec +2 -2
- data/lib/fluent/plugin/out_redis_counter.rb +23 -8
- data/test/plugin/out_redis_counter.rb +60 -0
- metadata +5 -11
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YjcyZmZkMWJmZWM1Y2IyMDg5YzY5OTc0Y2M2NDEyOWJjMDdlODBhNw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ODk1ZmUyNWRlNjQzMWI1OWJjZTYyMDdlN2Y1ZjBkOTI3MWVmNGMzMw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
M2FjODc0ZjUwNzU1M2E3M2VmYWIzYmUyOTE5N2U3ZWU0ZDAxZjRhMzhjM2Yw
|
10
|
+
ZjExNmE5OTVkNTk2YTZhODJiYTdhNjBhMmU0MzAwMDk0ZWU1ODZmNjBmMDUz
|
11
|
+
NDc3MGE0ODRkYzZhYTkwZWIyYWYzNWNjZDRhMjI2NjhlOWQxMjE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MjMyNmM4OWFmNzg4YmYzNGFlMWE5Yjk5OTBkYWQ0YzFmNTg5NTJlYTZmZDdh
|
14
|
+
ZDBlY2EwMzI0YjlkZDE5YjVjZWE2MDk1OTE2Mjc2MzI3ZjBlMGZlMzQ2MjZl
|
15
|
+
MThlNzQ2N2FhZmQyMTI1NzUyODUzNDIzMjA1NWI1YWFhOWM3NmE=
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -49,6 +49,14 @@ fluent-plugin-redis-counter is hosted by [RubyGems.org](https://rubygems.org/).
|
|
49
49
|
match_status ^2[0-9][0-9]$
|
50
50
|
count_key_format customer:%_{customer_id}:status2xx-%Y-%m-%d
|
51
51
|
</pattern>
|
52
|
+
|
53
|
+
# you can also sum up specified key with count_value_key option.
|
54
|
+
# for example, {"count": 321, "customer_id": 123 ... }.
|
55
|
+
# INCRBY item_count:123 321.
|
56
|
+
<pattern>
|
57
|
+
count_key_format item_count:%_{item_id}
|
58
|
+
count_value_key count
|
59
|
+
</pattern>
|
52
60
|
</match>
|
53
61
|
|
54
62
|
# Example
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -3,11 +3,11 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "fluent-plugin-redis-counter"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.3.0"
|
7
7
|
s.description = "fluent-plugin-redis-counter is a fluent plugin to count-up/down redis keys."
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Buntaro Okada"]
|
10
|
-
s.date = %q{2013-
|
10
|
+
s.date = %q{2013-05-06}
|
11
11
|
s.email = "kbinani.bt@gmail.com"
|
12
12
|
s.homepage = "https://github.com/kbinani/fluent-plugin-redis-counter"
|
13
13
|
s.summary = "Redis counter plugin for fluent"
|
@@ -52,7 +52,7 @@ module Fluent
|
|
52
52
|
@patterns.select { |pattern|
|
53
53
|
pattern.is_match?(record)
|
54
54
|
}.each{ |pattern|
|
55
|
-
table[pattern.get_count_key(time, record)] += pattern.
|
55
|
+
table[pattern.get_count_key(time, record)] += pattern.get_count_value(record)
|
56
56
|
}
|
57
57
|
}
|
58
58
|
rescue EOFError
|
@@ -84,7 +84,7 @@ module Fluent
|
|
84
84
|
end
|
85
85
|
|
86
86
|
class Pattern
|
87
|
-
attr_reader :matches, :count_value
|
87
|
+
attr_reader :matches, :count_value, :count_value_key
|
88
88
|
|
89
89
|
def initialize(conf_element)
|
90
90
|
if !conf_element.has_key?('count_key') && !conf_element.has_key?('count_key_format')
|
@@ -107,12 +107,16 @@ module Fluent
|
|
107
107
|
@count_key_format = [conf_element['count_key_format'], is_localtime]
|
108
108
|
end
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
110
|
+
if conf_element.has_key?('count_value_key')
|
111
|
+
@count_value_key = conf_element['count_value_key']
|
112
|
+
else
|
113
|
+
@count_value = 1
|
114
|
+
if conf_element.has_key?('count_value')
|
115
|
+
begin
|
116
|
+
@count_value = Integer(conf_element['count_value'])
|
117
|
+
rescue
|
118
|
+
raise RedisCounterException, 'invalid "count_value", integer required.'
|
119
|
+
end
|
116
120
|
end
|
117
121
|
end
|
118
122
|
|
@@ -143,6 +147,17 @@ module Fluent
|
|
143
147
|
formatter.format(time)
|
144
148
|
end
|
145
149
|
end
|
150
|
+
|
151
|
+
def get_count_value(record)
|
152
|
+
if @count_value_key
|
153
|
+
ret = record[@count_value_key] || 0
|
154
|
+
return ret.kind_of?(Integer) ? ret : 0
|
155
|
+
else
|
156
|
+
if @count_value
|
157
|
+
return @count_value
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
146
161
|
end
|
147
162
|
end
|
148
163
|
end
|
@@ -17,6 +17,7 @@ class RedisCounterTest < Test::Unit::TestCase
|
|
17
17
|
redis.del("a")
|
18
18
|
redis.del("b")
|
19
19
|
redis.del("foo-2012-06-21")
|
20
|
+
redis.del("item_sum_count:200")
|
20
21
|
redis.quit
|
21
22
|
end
|
22
23
|
|
@@ -152,6 +153,27 @@ class RedisCounterTest < Test::Unit::TestCase
|
|
152
153
|
end
|
153
154
|
end
|
154
155
|
|
156
|
+
def test_get_count_value_with_count_value_key
|
157
|
+
driver = create_driver %[
|
158
|
+
<pattern>
|
159
|
+
count_key_format %_{customer_id}
|
160
|
+
count_value_key count
|
161
|
+
</pattern>
|
162
|
+
]
|
163
|
+
record = {'count' => 123, 'customer_id' => 321}
|
164
|
+
assert_equal 123, driver.instance.patterns[0].get_count_value(record)
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_get_count_value_without_count_value_key
|
168
|
+
driver = create_driver %[
|
169
|
+
<pattern>
|
170
|
+
count_key_format %_{customer_id}
|
171
|
+
</pattern>
|
172
|
+
]
|
173
|
+
record = {'count' => 123, 'customer_id' => 321}
|
174
|
+
assert_equal 1, driver.instance.patterns[0].get_count_value(record)
|
175
|
+
end
|
176
|
+
|
155
177
|
def test_format
|
156
178
|
time = Time.parse('2012-06-21 01:55:00 UTC').to_i
|
157
179
|
@d.emit({"a" => 1}, time)
|
@@ -195,4 +217,42 @@ class RedisCounterTest < Test::Unit::TestCase
|
|
195
217
|
assert_equal '2', driver.instance.redis.get("foo-2012-06-21")
|
196
218
|
end
|
197
219
|
|
220
|
+
def test_write_with_count_value_key
|
221
|
+
driver = create_driver %[
|
222
|
+
db_number 1
|
223
|
+
<pattern>
|
224
|
+
count_key_format item_sum_count:%_{item_id}
|
225
|
+
count_value_key count
|
226
|
+
</pattern>
|
227
|
+
]
|
228
|
+
|
229
|
+
time = Time.parse('2012-06-21 03:01:00 UTC').to_i
|
230
|
+
driver.emit({"item_id" => 200, "count" => 123}, time)
|
231
|
+
driver.run
|
232
|
+
|
233
|
+
assert_equal '123', driver.instance.redis.get("item_sum_count:200")
|
234
|
+
|
235
|
+
driver = create_driver %[
|
236
|
+
db_number 1
|
237
|
+
<pattern>
|
238
|
+
count_key_format item_sum_count:%_{item_id}
|
239
|
+
count_value_key count
|
240
|
+
</pattern>
|
241
|
+
]
|
242
|
+
driver.emit({"item_id" => 200, }, time)
|
243
|
+
driver.run
|
244
|
+
assert_equal '123', driver.instance.redis.get("item_sum_count:200"), "it should be ignore when count_value_key does not exists."
|
245
|
+
|
246
|
+
driver = create_driver %[
|
247
|
+
db_number 1
|
248
|
+
<pattern>
|
249
|
+
count_key_format item_sum_count:%_{item_id}
|
250
|
+
count_value_key count
|
251
|
+
</pattern>
|
252
|
+
]
|
253
|
+
driver.emit({"item_id" => 200, "count" => "111aaa"}, time)
|
254
|
+
driver.run
|
255
|
+
assert_equal '123', driver.instance.redis.get("item_sum_count:200"), "it should be ignore when count_value_key is not number"
|
256
|
+
end
|
257
|
+
|
198
258
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-redis-counter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Buntaro Okada
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-05-06 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: fluentd
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: redis
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -62,27 +57,26 @@ files:
|
|
62
57
|
- test/plugin/out_redis_counter.rb
|
63
58
|
homepage: https://github.com/kbinani/fluent-plugin-redis-counter
|
64
59
|
licenses: []
|
60
|
+
metadata: {}
|
65
61
|
post_install_message:
|
66
62
|
rdoc_options: []
|
67
63
|
require_paths:
|
68
64
|
- lib
|
69
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
-
none: false
|
71
66
|
requirements:
|
72
67
|
- - ! '>='
|
73
68
|
- !ruby/object:Gem::Version
|
74
69
|
version: '0'
|
75
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
-
none: false
|
77
71
|
requirements:
|
78
72
|
- - ! '>='
|
79
73
|
- !ruby/object:Gem::Version
|
80
74
|
version: '0'
|
81
75
|
requirements: []
|
82
76
|
rubyforge_project:
|
83
|
-
rubygems_version:
|
77
|
+
rubygems_version: 2.0.3
|
84
78
|
signing_key:
|
85
|
-
specification_version:
|
79
|
+
specification_version: 4
|
86
80
|
summary: Redis counter plugin for fluent
|
87
81
|
test_files:
|
88
82
|
- test/plugin/out_redis_counter.rb
|