fluent-plugin-record-modifier 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 087c5bc2ce61f49e401036aed71936646a5d3675
4
- data.tar.gz: a717f25a685785416486c95cf0bcbba468a6d27c
3
+ metadata.gz: 344506e1d7deb2d3211df17f02386283fa8a30ab
4
+ data.tar.gz: 44e6d422823ddf0c686abe066b7da36fc96e4e19
5
5
  SHA512:
6
- metadata.gz: 4aadefcd8c62d51b31d68e6557961145676f58ead37f989f93b875a05f76c5394d32ec803337a9317f7b11ebe2a6a94b8bfff4a3fc756ad46749d162355c5fa7
7
- data.tar.gz: f29f6542bba329efb6afc28dd74d9d6506b64431ff229ea47d76f3d21150d8a764d3f635e806399384c946be3d085c5394759181dc2756641f221dd731aaf34e
6
+ metadata.gz: 45f15173d92fa1d91e20c62337ffe757852bf42bd006c7847459ca61521cd21cc63b604715489cfec05555f8ce95ba91d182816e470c64771bb3e81cecacad17
7
+ data.tar.gz: 7c63568717b13b17bdec90bf43c6edf30884639dd9d586efe85bd90f02787d99a7cbbd26484f6ab2676bdddb2facae032148307b0a35aec6c36428f0e602f3ca
data/ChangeLog CHANGED
@@ -1,3 +1,9 @@
1
+ Release 0.3.0 - 2015/06/09
2
+
3
+ * Add record_modifier filter
4
+ * Change fluentd dependency version
5
+
6
+
1
7
  Release 0.2.0 - 2014/09/29
2
8
 
3
9
  * Update fluent-mixin-config-placeholders to v0.3.0
data/Rakefile CHANGED
@@ -1,12 +1,11 @@
1
-
2
1
  require 'bundler'
3
- Bundler::GemHelper.install_tasks
2
+ require 'bundler/gem_tasks'
4
3
 
5
4
  require 'rake/testtask'
6
5
 
7
6
  Rake::TestTask.new(:test) do |test|
8
7
  test.libs << 'lib' << 'test'
9
- test.test_files = FileList['test/*.rb']
8
+ test.test_files = FileList['test/test_*.rb']
10
9
  test.verbose = true
11
10
  end
12
11
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  gem.require_paths = ['lib']
19
19
 
20
- gem.add_dependency "fluentd", "~> 0.10.17"
20
+ gem.add_dependency "fluentd", [">= 0.10.58", "< 2"]
21
21
  gem.add_dependency "fluent-mixin-config-placeholders", ">= 0.3.0"
22
22
  gem.add_development_dependency "rake", ">= 0.9.2"
23
23
  end
@@ -0,0 +1,86 @@
1
+ require 'fluent/mixin/config_placeholders'
2
+
3
+ module Fluent
4
+ class RecordModifierFilter < Filter
5
+ Fluent::Plugin.register_filter('record_modifier', self)
6
+
7
+ config_param :char_encoding, :string, :default => nil
8
+ config_param :remove_keys, :string, :default => nil
9
+
10
+ include SetTagKeyMixin
11
+ include Fluent::Mixin::ConfigPlaceholders
12
+
13
+ BUILTIN_CONFIGURATIONS = %W(type @type log_level @log_level id @id include_tag_key tag_key char_encoding remove_keys)
14
+
15
+ def configure(conf)
16
+ super
17
+
18
+ @map = {}
19
+ conf.each_pair { |k, v|
20
+ unless BUILTIN_CONFIGURATIONS.include?(k)
21
+ conf.has_key?(k)
22
+ @map[k] = v
23
+ end
24
+ }
25
+
26
+ if @char_encoding
27
+ from, to = @char_encoding.split(':', 2)
28
+ @from_enc = Encoding.find(from)
29
+ @to_enc = Encoding.find(to) if to
30
+
31
+ m = if @to_enc
32
+ method(:convert_encoding)
33
+ else
34
+ method(:set_encoding)
35
+ end
36
+
37
+ (class << self; self; end).module_eval do
38
+ define_method(:change_encoding, m)
39
+ end
40
+ end
41
+
42
+ if @remove_keys
43
+ @remove_keys = @remove_keys.split(',').map {|e| e.strip }
44
+ end
45
+ end
46
+
47
+ def filter(tag, time, record)
48
+ filter_record(tag, time, record)
49
+ modify_record(record)
50
+ end
51
+
52
+ private
53
+
54
+ def modify_record(record)
55
+ @map.each_pair { |k, v|
56
+ record[k] = v
57
+ }
58
+
59
+ if @remove_keys
60
+ @remove_keys.each { |v|
61
+ record.delete(v)
62
+ }
63
+ end
64
+
65
+ record = change_encoding(record) if @char_encoding
66
+ record
67
+ end
68
+
69
+ def set_encoding(record)
70
+ record.each_pair { |k, v|
71
+ if v.is_a?(String)
72
+ v.force_encoding(@from_enc)
73
+ end
74
+ }
75
+ end
76
+
77
+ def convert_encoding(record)
78
+ record.each_pair { |k, v|
79
+ if v.is_a?(String)
80
+ v.force_encoding(@from_enc) if v.encoding == Encoding::BINARY
81
+ v.encode!(@to_enc, @from_enc, :invalid => :replace, :undef => :replace)
82
+ end
83
+ }
84
+ end
85
+ end if defined?(Filter)
86
+ end
@@ -0,0 +1,111 @@
1
+ require 'fluent/test'
2
+ require 'fluent/plugin/filter_record_modifier'
3
+ require 'test/unit'
4
+
5
+ exit unless defined?(Fluent::Filter)
6
+
7
+ class RecordModifierFilterTest < Test::Unit::TestCase
8
+ def setup
9
+ Fluent::Test.setup
10
+ @tag = 'test.tag'
11
+ end
12
+
13
+ CONFIG = %[
14
+ type record_modifier
15
+
16
+ gen_host ${hostname}
17
+ foo bar
18
+ include_tag_key
19
+ tag_key included_tag
20
+ remove_keys hoge
21
+ ]
22
+
23
+ def create_driver(conf = CONFIG)
24
+ Fluent::Test::FilterTestDriver.new(Fluent::RecordModifierFilter, @tag).configure(conf)
25
+ end
26
+
27
+ def get_hostname
28
+ require 'socket'
29
+ Socket.gethostname.chomp
30
+ end
31
+
32
+ def test_configure
33
+ d = create_driver
34
+ map = d.instance.instance_variable_get(:@map)
35
+
36
+ assert_equal get_hostname, map['gen_host']
37
+ assert_equal 'bar', map['foo']
38
+ end
39
+
40
+ def test_format
41
+ d = create_driver
42
+
43
+ d.run do
44
+ d.emit("a" => 1)
45
+ d.emit("a" => 2)
46
+ end
47
+
48
+ mapped = {'gen_host' => get_hostname, 'foo' => 'bar', 'included_tag' => @tag}
49
+ assert_equal [
50
+ {"a" => 1}.merge(mapped),
51
+ {"a" => 2}.merge(mapped),
52
+ ], d.filtered_as_array.map { |e| e.last }
53
+ end
54
+
55
+ def test_set_char_encoding
56
+ d = create_driver %[
57
+ type record_modifier
58
+
59
+ char_encoding utf-8
60
+ ]
61
+
62
+
63
+ d.run do
64
+ d.emit("k" => 'v'.force_encoding('BINARY'))
65
+ end
66
+
67
+ assert_equal [{"k" => 'v'.force_encoding('UTF-8')}], d.filtered_as_array.map { |e| e.last }
68
+ end
69
+
70
+ def test_convert_char_encoding
71
+ d = create_driver %[
72
+ type record_modifier
73
+
74
+ char_encoding utf-8:cp932
75
+ ]
76
+
77
+ d.run do
78
+ d.emit("k" => 'v'.force_encoding('utf-8'))
79
+ end
80
+
81
+ assert_equal [{"k" => 'v'.force_encoding('cp932')}], d.filtered_as_array.map { |e| e.last }
82
+ end
83
+
84
+ def test_remove_one_key
85
+ d = create_driver %[
86
+ type record_modifier
87
+
88
+ remove_keys k1
89
+ ]
90
+
91
+ d.run do
92
+ d.emit("k1" => 'v', "k2" => 'v')
93
+ end
94
+
95
+ assert_equal [{"k2" => 'v'}], d.filtered_as_array.map { |e| e.last }
96
+ end
97
+
98
+ def test_remove_multiple_keys
99
+ d = create_driver %[
100
+ type record_modifier
101
+
102
+ remove_keys k1, k2, k3
103
+ ]
104
+
105
+ d.run do
106
+ d.emit("k1" => 'v', "k2" => 'v', "k4" => 'v')
107
+ end
108
+
109
+ assert_equal [{"k4" => 'v'}], d.filtered_as_array.map { |e| e.last }
110
+ end
111
+ end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-record-modifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro Nakagawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-29 00:00:00.000000000 Z
11
+ date: 2015-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.10.58
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: 0.10.17
22
+ version: '2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.10.58
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: 0.10.17
32
+ version: '2'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: fluent-mixin-config-placeholders
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -65,8 +71,10 @@ files:
65
71
  - Rakefile
66
72
  - VERSION
67
73
  - fluent-plugin-record-modifier.gemspec
74
+ - lib/fluent/plugin/filter_record_modifier.rb
68
75
  - lib/fluent/plugin/out_record_modifier.rb
69
- - test/out_record_modifier.rb
76
+ - test/test_filter_record_modifier.rb
77
+ - test/test_out_record_modifier.rb
70
78
  homepage: https://github.com/repeatedly/fluent-plugin-record-modifier
71
79
  licenses:
72
80
  - MIT
@@ -92,4 +100,5 @@ signing_key:
92
100
  specification_version: 4
93
101
  summary: Output filter plugin for modifying each event record
94
102
  test_files:
95
- - test/out_record_modifier.rb
103
+ - test/test_filter_record_modifier.rb
104
+ - test/test_out_record_modifier.rb