fluent-plugin-redis-counter 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,3 +1,6 @@
1
+ ## 0.3.0
2
+ * count value can be picked up from JSON data contents.
3
+
1
4
  ## 0.2.0
2
5
  * count key can be built from JSON data contents.
3
6
 
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.2.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.2.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-02-19}
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.count_value
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
- @count_value = 1
111
- if conf_element.has_key?('count_value')
112
- begin
113
- @count_value = Integer(conf_element['count_value'])
114
- rescue
115
- raise RedisCounterException, 'invalid "count_value", integer required.'
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.2.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-02-19 00:00:00.000000000 Z
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: 1.8.25
77
+ rubygems_version: 2.0.3
84
78
  signing_key:
85
- specification_version: 3
79
+ specification_version: 4
86
80
  summary: Redis counter plugin for fluent
87
81
  test_files:
88
82
  - test/plugin/out_redis_counter.rb