fluent-plugin-flowcounter 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -59,6 +59,16 @@ Counts from field 'message', per hour, aggregates all tags, output with tag 'flu
59
59
  # output configurations where to send count results
60
60
  </match>
61
61
 
62
+ To count with all fields in messages, specify 'count_keys *'.
63
+
64
+ <match target.**>
65
+ type flowcounter
66
+ count_keys *
67
+ unit hour
68
+ aggregate all
69
+ tag fluentd.traffic
70
+ </match>
71
+
62
72
  == TODO
63
73
 
64
74
  - consider what to do next
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fluent-plugin-flowcounter"
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["TAGOMORI Satoshi"]
12
- s.date = "2012-03-29"
12
+ s.date = "2012-04-24"
13
13
  s.description = "Plugin to counts messages/bytes that matches, per minutes/hours/days"
14
14
  s.email = "tagomoris@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  ]
33
33
  s.homepage = "http://github.com/tagomoris/fluent-plugin-flowcounter"
34
34
  s.require_paths = ["lib"]
35
- s.rubygems_version = "1.8.19"
35
+ s.rubygems_version = "1.8.21"
36
36
  s.summary = "Plugin to counts messages/bytes that matches, per minutes/hours/days"
37
37
  s.test_files = ["test/helper.rb", "test/plugin/test_out_flowcounter.rb"]
38
38
 
@@ -9,6 +9,7 @@ class Fluent::FlowCounterOutput < Fluent::Output
9
9
 
10
10
  attr_accessor :counts
11
11
  attr_accessor :last_checked
12
+ attr_accessor :count_all
12
13
 
13
14
  def configure(conf)
14
15
  super
@@ -31,6 +32,7 @@ class Fluent::FlowCounterOutput < Fluent::Output
31
32
  @removed_length = @removed_prefix_string.length
32
33
  end
33
34
  @count_keys = @count_keys.split(',')
35
+ @count_all = (@count_keys == ['*'])
34
36
 
35
37
  @counts = count_initialized
36
38
  @mutex = Mutex.new
@@ -120,10 +122,17 @@ class Fluent::FlowCounterOutput < Fluent::Output
120
122
  name = tag[@removed_length..-1]
121
123
  end
122
124
  c,b = 0,0
123
- es.each {|time,record|
124
- c += 1
125
- b += @count_keys.inject(0){|s,k| s + record[k].bytesize}
126
- }
125
+ if @count_all
126
+ es.each {|time,record|
127
+ c += 1
128
+ b += record.keys.inject(0){|s,k| s + record[k].bytesize}
129
+ }
130
+ else
131
+ es.each {|time,record|
132
+ c += 1
133
+ b += @count_keys.inject(0){|s,k| s + record[k].bytesize}
134
+ }
135
+ end
127
136
  countup(name, c, b)
128
137
 
129
138
  chain.next
@@ -67,6 +67,19 @@ count_keys message
67
67
  assert_equal 'test.flowcount', d.instance.tag
68
68
  assert_equal 'test', d.instance.input_tag_remove_prefix
69
69
  assert_equal ['message'], d.instance.count_keys
70
+
71
+ d = create_driver %[
72
+ unit day
73
+ aggregate all
74
+ tag test.flowcount
75
+ input_tag_remove_prefix test
76
+ count_keys *
77
+ ]
78
+ assert_equal :day, d.instance.unit
79
+ assert_equal :all, d.instance.aggregate
80
+ assert_equal 'test.flowcount', d.instance.tag
81
+ assert_equal 'test', d.instance.input_tag_remove_prefix
82
+ assert d.instance.count_all
70
83
  end
71
84
 
72
85
  def test_count_initialized
@@ -190,7 +203,33 @@ count_keys message
190
203
  d2.instance.flush_emit(60)
191
204
  emits = d2.emits
192
205
  assert_equal 1, emits.length
193
- p emits[0].to_json
206
+ data = emits[0]
207
+ assert_equal 'flowcount', data[0] # tag
208
+ assert_equal 60*5, data[2]['count']
209
+ assert_equal 60*5*20, data[2]['bytes']
210
+ end
211
+
212
+ def test_emit3
213
+ d3 = create_driver( %[
214
+ unit minute
215
+ aggregate all
216
+ tag flowcount
217
+ input_tag_remove_prefix test
218
+ count_keys *
219
+ ], 'test.tag3')
220
+ time = Time.now.to_i
221
+ d3.run do
222
+ 60.times do
223
+ d3.emit({'f1' => 'abcde', 'f2' => 'vwxyz', 'f3' => '0123456789'})
224
+ d3.emit({'f1' => 'abcde', 'f2' => 'vwxyz', 'f3' => '0123456789'})
225
+ d3.emit({'f1' => 'abcde', 'f2' => 'vwxyz', 'f3' => '0123456789'})
226
+ d3.emit({'f1' => 'abcde', 'f2' => 'vwxyz', 'f3' => '0123456789'})
227
+ d3.emit({'f1' => 'abcde', 'f2' => 'vwxyz', 'f3' => '0123456789'})
228
+ end
229
+ end
230
+ d3.instance.flush_emit(60)
231
+ emits = d3.emits
232
+ assert_equal 1, emits.length
194
233
  data = emits[0]
195
234
  assert_equal 'flowcount', data[0] # tag
196
235
  assert_equal 60*5, data[2]['count']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-flowcounter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-29 00:00:00.000000000 Z
12
+ date: 2012-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -189,7 +189,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
189
  version: '0'
190
190
  segments:
191
191
  - 0
192
- hash: 3181497759668816793
192
+ hash: 3237314410143149168
193
193
  required_rubygems_version: !ruby/object:Gem::Requirement
194
194
  none: false
195
195
  requirements:
@@ -198,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
198
  version: '0'
199
199
  requirements: []
200
200
  rubyforge_project:
201
- rubygems_version: 1.8.19
201
+ rubygems_version: 1.8.21
202
202
  signing_key:
203
203
  specification_version: 3
204
204
  summary: Plugin to counts messages/bytes that matches, per minutes/hours/days