fluent-plugin-record-modifier 0.1.1 → 0.1.2

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.
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.0.0
7
+ - rbx-19mode
8
+
9
+ branches:
10
+ only:
11
+ - master
12
+
13
+ script: bundle exec rake test
data/ChangeLog CHANGED
@@ -1,3 +1,9 @@
1
+ Release 0.1.2 - 2013/11/22
2
+
3
+ * Add char_encoding parameter to handle charactor encoding in event record
4
+ https://github.com/repeatedly/fluent-plugin-record-modifier#char_encoding
5
+
6
+
1
7
  Release 0.1.1 - 2013/04/24
2
8
 
3
9
  * Fix SetTagKeyMixin
data/README.md CHANGED
@@ -33,6 +33,25 @@ then you got new record like below:
33
33
  {"message":"hello world!", "gen_host":"oreore-mac.local", "foo":"bar"}
34
34
  ```
35
35
 
36
+ ### char_encoding
37
+
38
+ Fluentd including some plugins treats the logs as a BINARY by default to forward.
39
+ But an user sometimes processes the logs depends on their requirements, e.g. handling char encoding correctly.
40
+
41
+ `char_encoding` parameter is useful for this case.
42
+
43
+ ```conf
44
+ <match pattern>
45
+ type record_modifier
46
+
47
+ # set UTF-8 encoding information to string.
48
+ char_encoding utf-8
49
+
50
+ # change char encoding from 'UTF-8' to 'EUC-JP'
51
+ char_encoding utf-8:euc-jp
52
+ </match>
53
+ ```
54
+
36
55
  ### Mixins
37
56
 
38
57
  * [SetTagKeyMixin](https://github.com/fluent/fluentd/blob/master/lib/fluent/mixin.rb#L181)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -5,11 +5,12 @@ module Fluent
5
5
  Fluent::Plugin.register_output('record_modifier', self)
6
6
 
7
7
  config_param :tag, :string
8
+ config_param :char_encoding, :string, :default => nil
8
9
 
9
10
  include SetTagKeyMixin
10
11
  include Fluent::Mixin::ConfigPlaceholders
11
12
 
12
- BUILTIN_CONFIGURATIONS = %W(type tag include_tag_key tag_key)
13
+ BUILTIN_CONFIGURATIONS = %W(type tag include_tag_key tag_key char_encoding)
13
14
 
14
15
  def configure(conf)
15
16
  super
@@ -21,6 +22,22 @@ module Fluent
21
22
  @map[k] = v
22
23
  end
23
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
24
41
  end
25
42
 
26
43
  def emit(tag, es, chain)
@@ -39,7 +56,25 @@ module Fluent
39
56
  record[k] = v
40
57
  }
41
58
 
59
+ record = change_encoding(record) if @char_encoding
42
60
  record
43
61
  end
62
+
63
+ def set_encoding(record)
64
+ record.each_pair { |k, v|
65
+ if v.is_a?(String)
66
+ v.force_encoding(@from_enc)
67
+ end
68
+ }
69
+ end
70
+
71
+ def convert_encoding(record)
72
+ record.each_pair { |k, v|
73
+ if v.is_a?(String)
74
+ v.force_encoding(@from_enc) if v.encoding == Encoding::BINARY
75
+ v.encode!(@to_enc, @from_enc, :invalid => :replace, :undef => :replace)
76
+ end
77
+ }
78
+ end
44
79
  end
45
80
  end
@@ -48,4 +48,35 @@ class RecordModifierOutputTest < Test::Unit::TestCase
48
48
  {"a" => 2}.merge(mapped),
49
49
  ], d.records
50
50
  end
51
+
52
+ def test_set_char_encoding
53
+ d = create_driver %[
54
+ type record_modifier
55
+
56
+ tag foo.filtered
57
+ char_encoding utf-8
58
+ ]
59
+
60
+
61
+ d.run do
62
+ d.emit("k" => 'v'.force_encoding('BINARY'))
63
+ end
64
+
65
+ assert_equal [{"k" => 'v'.force_encoding('UTF-8')}], d.records
66
+ end
67
+
68
+ def test_convert_char_encoding
69
+ d = create_driver %[
70
+ type record_modifier
71
+
72
+ tag foo.filtered
73
+ char_encoding utf-8:cp932
74
+ ]
75
+
76
+ d.run do
77
+ d.emit("k" => 'v'.force_encoding('utf-8'))
78
+ end
79
+
80
+ assert_equal [{"k" => 'v'.force_encoding('cp932')}], d.records
81
+ end
51
82
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-record-modifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
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: 2013-04-24 00:00:00.000000000 Z
12
+ date: 2013-11-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -65,6 +65,7 @@ executables: []
65
65
  extensions: []
66
66
  extra_rdoc_files: []
67
67
  files:
68
+ - .travis.yml
68
69
  - ChangeLog
69
70
  - Gemfile
70
71
  - README.md
@@ -87,7 +88,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
88
  version: '0'
88
89
  segments:
89
90
  - 0
90
- hash: 2957918703603277385
91
+ hash: -3676841215308348521
91
92
  required_rubygems_version: !ruby/object:Gem::Requirement
92
93
  none: false
93
94
  requirements:
@@ -96,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
97
  version: '0'
97
98
  segments:
98
99
  - 0
99
- hash: 2957918703603277385
100
+ hash: -3676841215308348521
100
101
  requirements: []
101
102
  rubyforge_project:
102
103
  rubygems_version: 1.8.23