fluent-plugin-record-modifier 1.0.1 → 1.0.2

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: 7f658bdc50758abb408ee1c2d61e3a982863564b
4
- data.tar.gz: 03a81b1c111ebcd9f937764e63a5ef9736877c5d
3
+ metadata.gz: 290bea3c616897ac2b1125aabcebb421b3099863
4
+ data.tar.gz: f81e3ec261a75b79fd0ea5bac81698ffc6d9f357
5
5
  SHA512:
6
- metadata.gz: 92bb89073f76c579f19c9fcc0af6bc1f2dabe67c367330fa178d69a6356c5fdc201cdc74c66ba1e3eb809fbc8bffcee289b95dc2d1f7434481c05c175f3b61d8
7
- data.tar.gz: 2b22a75549e3d017f3bb928ac6247ba0f162042c237569227bff03cab4ccf19120159c931811e39ea21210dfe3f4bb51a862f04e6ce8c25b2ba0a821521f002a
6
+ metadata.gz: 64ae991840fb9cb6eab3bc2be79ccbe3c368fd59110a400fa4329dcffa14b852e7c4df18e816458f0c3308bf3937ef679e1f2939e067e2dc354900383e9e7a64
7
+ data.tar.gz: e82a147fa6b1408bf49f21853d888a3b616df5bf474d675952767aeb003bcc58f3761f9a60a8d3f74a007abab6604fbe7725da85de3123d90a5ac70a4593a332
data/ChangeLog CHANGED
@@ -1,3 +1,9 @@
1
+ Release 1.0.2 - 2017/12/27
2
+
3
+ * Add prepare_value parameter
4
+ * Fix non-string object handling
5
+ * Remove deprecated code
6
+
1
7
  Release 1.0.1 - 2017/12/16
2
8
 
3
9
  * Fix fluentd dependency
data/README.md CHANGED
@@ -62,6 +62,20 @@ But unlike `record_transformer`, `record_modifier` doesn't support following fea
62
62
  - tag_suffix and tag_prefix
63
63
  - dynamic key placeholder
64
64
 
65
+ ### prepare_value
66
+
67
+ Prepare values for filtering. This ruby code is evaluated in `configure` phase and prepared values can be used in `<record>`. Here is an example:
68
+
69
+ <filter pattern>
70
+ @type record_modifier
71
+ prepare_value require 'foo'; @foo = Foo.new
72
+ <record>
73
+ key ${@foo.method1}
74
+ </record>
75
+ </filter>
76
+
77
+ This feature is useful for using external library.
78
+
65
79
  ### char_encoding
66
80
 
67
81
  Fluentd including some plugins treats logs as a BINARY by default to forward.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.0.2
@@ -4,6 +4,11 @@ module Fluent
4
4
  class Plugin::RecordModifierFilter < Plugin::Filter
5
5
  Fluent::Plugin.register_filter('record_modifier', self)
6
6
 
7
+ config_param :prepare_value, :string, default: nil,
8
+ desc: <<-DESC
9
+ Prepare values for filtering in configure phase. Prepared values can be used in <record>.
10
+ You can write any ruby code.
11
+ DESC
7
12
  config_param :char_encoding, :string, default: nil,
8
13
  desc: <<-DESC
9
14
  Fluentd including some plugins treats the logs as a BINARY by default to forward.
@@ -26,8 +31,6 @@ Modified events will have only specified keys (if exist in original events).
26
31
  This option is exclusive with `remove_keys`.
27
32
  DESC
28
33
 
29
- BUILTIN_CONFIGURATIONS = %W(type @type log_level @log_level id @id char_encoding remove_keys whitelist_keys)
30
-
31
34
  def configure(conf)
32
35
  super
33
36
 
@@ -36,15 +39,6 @@ DESC
36
39
  end
37
40
 
38
41
  @map = {}
39
- conf.each_pair { |k, v|
40
- unless BUILTIN_CONFIGURATIONS.include?(k)
41
- check_config_placeholders(k, v);
42
- conf.has_key?(k)
43
- $log.warn "top level definition is deprecated. Please put parameters inside <record>: '#{k} #{v}'"
44
- @map[k] = DynamicExpander.new(k, v)
45
- end
46
- }
47
-
48
42
  @to_enc = nil
49
43
  if @char_encoding
50
44
  from, to = @char_encoding.split(':', 2)
@@ -68,7 +62,7 @@ DESC
68
62
  check_config_placeholders(k, v)
69
63
  element.has_key?(k) # to suppress unread configuration warning
70
64
  @has_tag_parts = true if v.include?('tag_parts')
71
- @map[k] = DynamicExpander.new(k, v)
65
+ @map[k] = DynamicExpander.new(k, v, @prepare_value)
72
66
  end
73
67
  end
74
68
 
@@ -114,7 +108,7 @@ DESC
114
108
  value.force_encoding(@from_enc)
115
109
  elsif value.is_a?(Hash)
116
110
  value.each_pair { |k, v|
117
- if v.frozen?
111
+ if v.frozen? && v.is_a?(String)
118
112
  value[k] = set_encoding(v.dup)
119
113
  else
120
114
  set_encoding(v)
@@ -122,6 +116,8 @@ DESC
122
116
  }
123
117
  elsif value.is_a?(Array)
124
118
  value.each { |v| set_encoding(v) }
119
+ else
120
+ value
125
121
  end
126
122
  end
127
123
 
@@ -131,7 +127,7 @@ DESC
131
127
  value.encode!(@to_enc, @from_enc, :invalid => :replace, :undef => :replace)
132
128
  elsif value.is_a?(Hash)
133
129
  value.each_pair { |k, v|
134
- if v.frozen?
130
+ if v.frozen? && v.is_a?(String)
135
131
  value[k] = convert_encoding(v.dup)
136
132
  else
137
133
  convert_encoding(v)
@@ -139,6 +135,8 @@ DESC
139
135
  }
140
136
  elsif value.is_a?(Array)
141
137
  value.each { |v| convert_encoding(v) }
138
+ else
139
+ value
142
140
  end
143
141
  end
144
142
 
@@ -153,7 +151,7 @@ DESC
153
151
  end
154
152
 
155
153
  class DynamicExpander
156
- def initialize(param_key, param_value)
154
+ def initialize(param_key, param_value, prepare_value)
157
155
  if param_value.include?('${')
158
156
  __str_eval_code__ = parse_parameter(param_value)
159
157
 
@@ -169,6 +167,12 @@ DESC
169
167
  @param_value = param_value
170
168
  end
171
169
 
170
+ begin
171
+ eval prepare_value if prepare_value
172
+ rescue SyntaxError
173
+ raise ConfigError, "Pass invalid syntax parameter : key = prepare_value, value = #{prepare_value}"
174
+ end
175
+
172
176
  begin
173
177
  # check eval genarates wrong code or not
174
178
  expand(nil, nil, nil, nil)
@@ -126,6 +126,21 @@ class RecordModifierFilterTest < Test::Unit::TestCase
126
126
  assert_equal [{"k1" => 'v', "k2" => 'v'}], d.filtered.map(&:last)
127
127
  end
128
128
 
129
+ def test_prepare_values
130
+ d = create_driver %[
131
+ prepare_value @foo = 'foo'
132
+ <record>
133
+ test_key ${@foo}
134
+ </record>
135
+ ]
136
+
137
+ d.run(default_tag: @tag) do
138
+ d.feed("k1" => 'v')
139
+ end
140
+
141
+ assert_equal [{"k1" => 'v', "test_key" => 'foo'}], d.filtered.map(&:last)
142
+ end
143
+
129
144
  sub_test_case 'frozen check' do
130
145
  def test_set_char_encoding
131
146
  d = create_driver %[
@@ -133,13 +148,13 @@ class RecordModifierFilterTest < Test::Unit::TestCase
133
148
  ]
134
149
 
135
150
  d.run(default_tag: @tag) do
136
- d.feed("k" => 'v'.force_encoding('BINARY').freeze)
137
- d.feed("k" => {"l" => 'v'.force_encoding('BINARY').freeze})
151
+ d.feed("k" => 'v'.force_encoding('BINARY').freeze, 'n' => 1)
152
+ d.feed("k" => {"l" => 'v'.force_encoding('BINARY').freeze, 'n' => 1})
138
153
  end
139
154
 
140
155
  assert_equal [
141
- {"k" => 'v'.force_encoding('UTF-8')},
142
- {"k" => {"l" => 'v'.force_encoding('UTF-8')}},
156
+ {"k" => 'v'.force_encoding('UTF-8'), 'n' => 1},
157
+ {"k" => {"l" => 'v'.force_encoding('UTF-8'), 'n' => 1}},
143
158
  ], d.filtered.map { |e| e.last }
144
159
  end
145
160
 
@@ -149,13 +164,13 @@ class RecordModifierFilterTest < Test::Unit::TestCase
149
164
  ]
150
165
 
151
166
  d.run(default_tag: @tag) do
152
- d.feed("k" => 'v'.force_encoding('utf-8').freeze)
153
- d.feed("k" => {"l" => 'v'.force_encoding('utf-8').freeze})
167
+ d.feed("k" => 'v'.force_encoding('utf-8').freeze, 'n' => 1)
168
+ d.feed("k" => {"l" => 'v'.force_encoding('utf-8').freeze, 'n' => 1})
154
169
  end
155
170
 
156
171
  assert_equal [
157
- {"k" => 'v'.force_encoding('cp932')},
158
- {"k" => {"l" => 'v'.force_encoding('cp932')}},
172
+ {"k" => 'v'.force_encoding('cp932'), 'n' => 1},
173
+ {"k" => {"l" => 'v'.force_encoding('cp932'), 'n' => 1}},
159
174
  ], d.filtered.map { |e| e.last }
160
175
  end
161
176
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-record-modifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro Nakagawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-16 00:00:00.000000000 Z
11
+ date: 2017-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd