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