fluent-plugin-record_splitter 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a19daed38b9a4be8b90350fd966c7b5c0eba4366
4
- data.tar.gz: e1fffed00204b7cda4cd9784c0bf62e3e12f782f
3
+ metadata.gz: cd96d0a95cd0fea74f83b3696a5f613a6317871f
4
+ data.tar.gz: 776b7ed3e78ebfc77ac57afe9ae1aac0080841d1
5
5
  SHA512:
6
- metadata.gz: 34402e3016d615bd6a390d086e0eb2d5ccdc470b28c2395d97215f4fd2aa83e039cb1e31b6837de00a2bf1a75bdc997a39a827b33f35843081bad42176bea42f
7
- data.tar.gz: 6ecdc6bdd392aac400b89630c3afa019800e1ae8e4bb82415a6bb14e95696a5182bf2d256714178def64d907fcde96af3fed387fe78dfc39198fa6139a30046a
6
+ metadata.gz: 40689124abcdb86913e46d1eae027a2527b908f3f67ce63f65ed5b7092b63dfc9e5e46d0a579621a550badbaba000764592ed8e34a8854e71fddb66b9f8f093f
7
+ data.tar.gz: e015c41e2be6f89c13e80fa671064946a0ee30a14b965dd2915be7bde0101dfce2aac6ede69fe58ef2b5af2f075f191873314953fe3290d79be3985e9e6994d6
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
data/README.md CHANGED
@@ -3,6 +3,13 @@ fluent-plugin-record_splitter
3
3
 
4
4
  Output split array plugin for fluentd.
5
5
 
6
+ ## Dependence
7
+
8
+ - td-agent v2(fluentd ~> 0.12.0)
9
+ - fluent-plugin-record_splitter < 0.1.6
10
+ - td-agnet v3(fluentd ~> 0.14.0)
11
+ - fluent-plugin-record_splitter >= 0.1.6
12
+
6
13
  ## Installation
7
14
 
8
15
  ```
@@ -13,7 +20,7 @@ gem install fluent-plugin-record_splitter
13
20
 
14
21
  <match pattern>
15
22
  type record_splitter
16
- tag foo.splitted
23
+ tag foo.split
17
24
  split_key target_field
18
25
  keep_keys ["common","general"]
19
26
  </match>
@@ -35,7 +42,7 @@ another configuration
35
42
 
36
43
  <match pattern>
37
44
  type record_splitter
38
- tag foo.splitted
45
+ tag foo.split
39
46
  split_key target_field
40
47
  keep_other_key true
41
48
  remove_keys ["general"]
data/Rakefile CHANGED
@@ -9,5 +9,4 @@ Rake::TestTask.new(:test) do |test|
9
9
  test.verbose = true
10
10
  end
11
11
 
12
- task :default => [:build]
13
-
12
+ task default: [:build]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.2.0
@@ -1,23 +1,25 @@
1
1
  # encoding: utf-8
2
- $:.push File.expand_path('../lib', __FILE__)
2
+
3
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
4
 
4
5
  Gem::Specification.new do |gem|
5
- gem.name = "fluent-plugin-record_splitter"
6
- gem.description = "output split array plugin for fluentd"
7
- gem.homepage = "https://github.com/ixixi/fluent-plugin-record_splitter"
6
+ gem.name = 'fluent-plugin-record_splitter'
7
+ gem.description = 'output split array plugin for fluentd'
8
+ gem.homepage = 'https://github.com/ixixi/fluent-plugin-record_splitter'
8
9
  gem.summary = gem.description
9
- gem.version = File.read("VERSION").strip
10
- gem.authors = ["Yuri Odagiri"]
11
- gem.email = "ixixizko@gmail.com"
10
+ gem.version = File.read('VERSION').strip
11
+ gem.authors = ['Yuri Odagiri']
12
+ gem.email = 'ixixizko@gmail.com'
12
13
  gem.has_rdoc = false
13
14
  gem.license = 'MIT'
14
15
  gem.files = `git ls-files`.split("\n")
15
16
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
17
18
  gem.require_paths = ['lib']
18
19
 
19
- gem.add_dependency "fluentd", [">= 0.10.58", "< 2"]
20
- gem.add_dependency "fluent-mixin-config-placeholders", ">= 0.3.0"
21
- gem.add_dependency "fluent-mixin-rewrite-tag-name"
22
- gem.add_development_dependency "rake", ">= 0.9.2"
20
+ gem.add_dependency 'fluentd', ['>= 0.14.0', '< 2']
21
+ gem.add_dependency 'fluent-mixin-config-placeholders', '>= 0.3.0'
22
+ gem.add_dependency 'fluent-mixin-rewrite-tag-name'
23
+ gem.add_development_dependency 'rake', '>= 0.9.2'
24
+ gem.add_development_dependency 'test-unit'
23
25
  end
@@ -1,60 +1,70 @@
1
+ require 'fluent/plugin/output'
1
2
  require 'fluent/mixin/config_placeholders'
2
3
  require 'fluent/mixin/rewrite_tag_name'
3
4
 
4
5
  module Fluent
5
- class RecordSplitterOutput < Output
6
- Fluent::Plugin.register_output('record_splitter', self)
7
-
8
- config_param :tag, :string
9
- config_param :remove_prefix, :string, :default => nil
10
- config_param :add_prefix, :string, :default => nil
11
- config_param :split_key, :string
12
- config_param :keep_other_key, :bool, :default => false
13
- config_param :keep_keys, :array, :default => []
14
- config_param :remove_keys, :array, :default => []
15
-
16
- include SetTagKeyMixin
17
- include Fluent::Mixin::ConfigPlaceholders
18
- include Fluent::HandleTagNameMixin
19
- include Fluent::Mixin::RewriteTagName
20
-
21
- def configure(conf)
22
- super
23
- if not @keep_keys.empty? and not @remove_keys.empty?
24
- raise Fluent::ConfigError, 'Cannot set both keep_keys and remove_keys.'
25
- end
26
- if @keep_other_key and not @keep_keys.empty?
27
- raise Fluent::ConfigError, 'Cannot set keep_keys when keep_other_key is true.'
28
- end
29
- if not @keep_other_key and not @remove_keys.empty?
30
- raise Fluent::ConfigError, 'Cannot set remove_keys when keep_other_key is false.'
31
- end
32
- if not @tag and not @remove_prefix and not @add_prefix
33
- raise Fluent::ConfigError, "missing both of remove_prefix and add_prefix"
34
- end
35
- if @tag and (@remove_prefix or @add_prefix)
36
- raise Fluent::ConfigError, "both of tag and remove_prefix/add_prefix must not be specified"
6
+ module Plugin
7
+ class RecordSplitterOutput < Output
8
+ Fluent::Plugin.register_output('record_splitter', self)
9
+
10
+ config_param :tag, :string
11
+ config_param :remove_prefix, :string, default: nil
12
+ config_param :add_prefix, :string, default: nil
13
+ config_param :split_key, :string
14
+ config_param :keep_other_key, :bool, default: false
15
+ config_param :keep_keys, :array, default: []
16
+ config_param :remove_keys, :array, default: []
17
+
18
+ include SetTagKeyMixin
19
+ include Fluent::Mixin::ConfigPlaceholders
20
+ include Fluent::HandleTagNameMixin
21
+ include Fluent::Mixin::RewriteTagName
22
+
23
+ helpers :event_emitter
24
+
25
+ def multi_workers_ready?
26
+ true
37
27
  end
38
- end
39
28
 
40
- def emit(tag, es, chain)
41
- emit_tag = tag.dup
42
- es.each { |time, record|
43
- filter_record(emit_tag, time, record)
44
- if keep_other_key
45
- common = record.reject{|key, value| key == @split_key or @remove_keys.include?(key) }
46
- else
47
- common = record.select{|key, value| @keep_keys.include?(key) }
29
+ def configure(conf)
30
+ super
31
+ if !@keep_keys.empty? && !@remove_keys.empty?
32
+ raise Fluent::ConfigError, 'Cannot set both keep_keys and remove_keys.'
33
+ end
34
+ if @keep_other_key && !@keep_keys.empty?
35
+ raise Fluent::ConfigError, 'Cannot set keep_keys when keep_other_key is true.'
36
+ end
37
+ if !@keep_other_key && !@remove_keys.empty?
38
+ raise Fluent::ConfigError, 'Cannot set remove_keys when keep_other_key is false.'
48
39
  end
49
- if record.key?(@split_key)
50
- record[@split_key].each{|v|
40
+ if !@tag && !@remove_prefix && !@add_prefix
41
+ raise Fluent::ConfigError, 'missing both of remove_prefix and add_prefix'
42
+ end
43
+ if @tag && (@remove_prefix || @add_prefix)
44
+ raise Fluent::ConfigError, 'both of tag and remove_prefix/add_prefix must not be specified'
45
+ end
46
+ end
47
+
48
+ def process(tag, es)
49
+ emit_tag = tag.dup
50
+
51
+ es.each do |time, record|
52
+ filter_record(emit_tag, time, record)
53
+
54
+ if @keep_other_key
55
+ common = record.reject { |key, _value| key == @split_key || @remove_keys.include?(key) }
56
+ else
57
+ common = record.select { |key, _value| @keep_keys.include?(key) }
58
+ end
59
+
60
+ next unless record.key?(@split_key)
61
+
62
+ record[@split_key].each do |v|
51
63
  v.merge!(common) unless common.empty?
52
- router.emit(emit_tag, time, v.merge(common))
53
- }
64
+ router.emit(emit_tag, time, v)
65
+ end
54
66
  end
55
- }
56
- chain.next
67
+ end
57
68
  end
58
-
59
69
  end
60
70
  end
@@ -1,92 +1,106 @@
1
1
  require 'fluent/test'
2
+ require 'fluent/test/driver/output'
3
+ require 'test/unit'
2
4
  require 'fluent/plugin/out_record_splitter'
3
5
 
4
-
5
6
  class RecordSplitterOutputTest < Test::Unit::TestCase
6
7
  def setup
7
8
  Fluent::Test.setup
8
9
  end
9
10
 
10
- CONFIG = %[
11
- type record_splitter
12
- tag foo.splitted
13
- ]
11
+ CONFIG = %().freeze
14
12
 
15
13
  def create_driver(conf = CONFIG)
16
- Fluent::Test::OutputTestDriver.new(Fluent::RecordSplitterOutput, tag='test_tag').configure(conf)
14
+ Fluent::Test::Driver::Output
15
+ .new(Fluent::Plugin::RecordSplitterOutput)
16
+ .configure(conf)
17
+ end
18
+
19
+ def event_time
20
+ Time.parse('2017-06-01 00:11:22 UTC').to_i
17
21
  end
18
22
 
19
23
  def test_split_default
20
- d = create_driver %[
21
- type record_splitter
22
- tag foo.splitted
24
+ d = create_driver %(
25
+ @type record_splitter
26
+ tag foo.split
23
27
  split_key target_field
24
- ]
28
+ )
25
29
 
26
- d.run do
27
- d.emit('other'=>'foo','target_field' => [{'k1'=>'v1'},{'k2'=>'v2'}])
30
+ d.run(default_tag: 'test') do
31
+ d.feed(event_time,
32
+ 'other' => 'foo',
33
+ 'target_field' => [{ 'k1' => 'v1' }, { 'k2' => 'v2' }])
28
34
  end
29
35
 
30
36
  assert_equal [
31
- {'k1'=>'v1'},
32
- {'k2'=>'v2'},
33
- ], d.records
37
+ ['foo.split', event_time, { 'k1' => 'v1' }],
38
+ ['foo.split', event_time, { 'k2' => 'v2' }]
39
+ ], d.events
34
40
  end
35
41
 
36
-
37
42
  def test_split_with_keep_other_key
38
- d = create_driver %[
43
+ d = create_driver %(
39
44
  type record_splitter
40
- tag foo.splitted
45
+ tag foo.split
41
46
  split_key target_field
42
47
  keep_other_key true
43
- ]
48
+ )
44
49
 
45
- d.run do
46
- d.emit('common'=>'c','general'=>'g','other'=>'foo','target_field' => [{'k1'=>'v1'},{'k2'=>'v2'}])
50
+ d.run(default_tag: 'test') do
51
+ d.feed(event_time,
52
+ 'common' => 'c', 'general' => 'g', 'other' => 'foo',
53
+ 'target_field' => [{ 'k1' => 'v1' }, { 'k2' => 'v2' }])
47
54
  end
48
55
 
49
56
  assert_equal [
50
- {'common'=>'c','general'=>'g','other'=>'foo','k1'=>'v1'},
51
- {'common'=>'c','general'=>'g','other'=>'foo','k2'=>'v2'},
52
- ], d.records
57
+ ['foo.split', event_time,
58
+ { 'common' => 'c', 'general' => 'g', 'other' => 'foo', 'k1' => 'v1' }],
59
+ ['foo.split', event_time,
60
+ { 'common' => 'c', 'general' => 'g', 'other' => 'foo', 'k2' => 'v2' }]
61
+ ], d.events
53
62
  end
54
63
 
55
64
  def test_split_with_keep_other_key_and_remove_key
56
- d = create_driver %[
65
+ d = create_driver %(
57
66
  type record_splitter
58
- tag foo.splitted
67
+ tag foo.split
59
68
  split_key target_field
60
69
  keep_other_key true
61
70
  remove_keys ["general","other"]
62
- ]
71
+ )
63
72
 
64
- d.run do
65
- d.emit('common'=>'c','general'=>'g','other'=>'foo','target_field' => [{'k1'=>'v1'},{'k2'=>'v2'}])
73
+ d.run(default_tag: 'test') do
74
+ d.feed(event_time,
75
+ 'common' => 'c', 'general' => 'g', 'other' => 'foo',
76
+ 'target_field' => [{ 'k1' => 'v1' }, { 'k2' => 'v2' }])
66
77
  end
67
78
 
68
79
  assert_equal [
69
- {'common'=>'c','k1'=>'v1'},
70
- {'common'=>'c','k2'=>'v2'},
71
- ], d.records
80
+ ['foo.split', event_time, { 'common' => 'c', 'k1' => 'v1' }],
81
+ ['foo.split', event_time, { 'common' => 'c', 'k2' => 'v2' }]
82
+ ], d.events
72
83
  end
73
84
 
74
85
  def test_split_with_keep_keys
75
- d = create_driver %[
86
+ d = create_driver %(
76
87
  type record_splitter
77
- tag foo.splitted
88
+ tag foo.split
78
89
  split_key target_field
79
90
  keep_keys ["common","general"]
80
- ]
91
+ )
81
92
 
82
- d.run do
83
- d.emit('common'=>'c','general'=>'g','other'=>'foo','target_field' => [{'k1'=>'v1'},{'k2'=>'v2'}])
93
+ d.run(default_tag: 'test') do
94
+ d.feed(event_time,
95
+ 'common' => 'c', 'general' => 'g', 'other' => 'foo',
96
+ 'target_field' => [{ 'k1' => 'v1' }, { 'k2' => 'v2' }])
84
97
  end
85
98
 
86
99
  assert_equal [
87
- {'common'=>'c','general'=>'g','k1'=>'v1'},
88
- {'common'=>'c','general'=>'g','k2'=>'v2'},
89
- ], d.records
100
+ ['foo.split', event_time,
101
+ { 'common' => 'c', 'general' => 'g', 'k1' => 'v1' }],
102
+ ['foo.split', event_time,
103
+ { 'common' => 'c', 'general' => 'g', 'k2' => 'v2' }]
104
+ ], d.events
90
105
  end
91
-
92
106
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-record_splitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuri Odagiri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-09 00:00:00.000000000 Z
11
+ date: 2017-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.10.58
19
+ version: 0.14.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '2'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.10.58
29
+ version: 0.14.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '2'
@@ -72,6 +72,20 @@ dependencies:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: 0.9.2
75
+ - !ruby/object:Gem::Dependency
76
+ name: test-unit
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
75
89
  description: output split array plugin for fluentd
76
90
  email: ixixizko@gmail.com
77
91
  executables: []
@@ -106,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
120
  version: '0'
107
121
  requirements: []
108
122
  rubyforge_project:
109
- rubygems_version: 2.4.1
123
+ rubygems_version: 2.6.11
110
124
  signing_key:
111
125
  specification_version: 4
112
126
  summary: output split array plugin for fluentd