fluent-plugin-record-modifier 2.1.1 → 2.2.1

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
  SHA256:
3
- metadata.gz: 5223ce121e04b41b661a2d575a7067f69295ea5d665656cb37a23acbd71d3624
4
- data.tar.gz: 00e6c78cf07e354ab0a0d77d42a5bc00f782a1bcb9ca56899440ac75dbd6f4b1
3
+ metadata.gz: 0162d793dd9d7c24bb4e3ec50aabfd2aa1e094b389d7da5236a9c99a60360209
4
+ data.tar.gz: 0e4a332894d537696733f3b0cfd824d689a187187ec86987a8bf533ef4d4fff9
5
5
  SHA512:
6
- metadata.gz: 79597158486f6da9646479758d981afc494da860653006d93428abf9d5c211008f60339ca39d238a04b77f2aadd38f459f70b4dccb46c23618614cbc75795894
7
- data.tar.gz: 8912416c324b79f0d4e4e6d29f8625105e1c983492e509a56484a81d5cb0c72b6270a915f087b4946d5d522b1817133a99341b9a91c241de01c4f7c501f3310b
6
+ metadata.gz: 21a8f63aba701b8ffa5c77cf4b1bc6fc373b015a601e658abe77de4a1763de485e5e416b8958a6e9d0ace9b4dfc3ac401fc2ab9f07189b8452daea21153a0816
7
+ data.tar.gz: c5450f8d89ca5f9578947e49e2723620641658db0607a69ac8cceb19d1bcb3903562c380f0bc5f831c7fe5baeaa7a9c44a54dd485dd00719d3d05f31cedaee00
@@ -5,12 +5,19 @@ on:
5
5
  jobs:
6
6
  build:
7
7
  runs-on: ${{ matrix.os }}
8
+ continue-on-error: ${{ matrix.experimental }}
8
9
  strategy:
9
10
  fail-fast: false
10
11
  matrix:
11
- ruby: ['2.6', '2.7', '3.0', '3.1']
12
+ ruby: ['3.1', '3.2', '3.3', '3.4']
12
13
  os:
13
14
  - ubuntu-latest
15
+ experimental: [false]
16
+ include:
17
+ - ruby: head
18
+ os: ubuntu-latest
19
+ experimental: true
20
+
14
21
  name: Ruby ${{ matrix.ruby }} unit testing on ${{ matrix.os }}
15
22
  steps:
16
23
  - uses: actions/checkout@v2
data/ChangeLog CHANGED
@@ -1,3 +1,12 @@
1
+ Release 2.2.1 - 2025/08/24
2
+
3
+ * Add `use_nil` support
4
+
5
+
6
+ Release 2.2.0 - 2023/12/08
7
+
8
+ * `remove_keys` parameter supports nested delete
9
+
1
10
  Release 2.1.1 - 2022/08/25
2
11
 
3
12
  * Improve whitelist_keys performance
data/README.md CHANGED
@@ -124,6 +124,8 @@ then you got new record like below:
124
124
  {"key3":"bar"}
125
125
  ```
126
126
 
127
+ Since v2.2.0, `remove_keys` supports nested key delete via [`record_accessor` syntax](https://docs.fluentd.org/plugin-helper-overview/api-plugin-helper-record_accessor).
128
+
127
129
  ### whitelist_keys
128
130
 
129
131
  If you want to handle the set of explicitly specified keys, you can use `whitelist_keys` of this plugin. It's exclusive with `remove_keys`.
@@ -202,7 +204,7 @@ If you need own complex logic in filter, writing filter plugin is better. But if
202
204
  <record>
203
205
  _dummy_ ${if record.has_key?('foo'); record['bar'] = 'Hi!'; end; nil}
204
206
  </record>
205
- </filter>}
207
+ </filter>
206
208
  ```
207
209
 
208
210
  ### record_modifier output
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.1
1
+ 2.2.1
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
17
  gem.require_paths = ['lib']
18
18
 
19
- gem.add_dependency "fluentd", [">= 1.0", "< 2"]
19
+ gem.add_dependency "fluentd", [">= 1.1", "< 2"]
20
20
  gem.add_development_dependency "rake", ">= 0.9.2"
21
- gem.add_development_dependency("test-unit", ["~> 3.3"])
21
+ gem.add_development_dependency("test-unit", ["~> 3.4.0"])
22
22
  end
@@ -4,6 +4,8 @@ module Fluent
4
4
  class Plugin::RecordModifierFilter < Plugin::Filter
5
5
  Fluent::Plugin.register_filter('record_modifier', self)
6
6
 
7
+ helpers :record_accessor
8
+
7
9
  config_param :prepare_value, :string, default: nil,
8
10
  desc: <<-DESC
9
11
  Prepare values for filtering in configure phase. Prepared values can be used in <record>.
@@ -17,7 +19,7 @@ e.g. handling char encoding correctly.
17
19
  In more detail, please refer this section:
18
20
  https://github.com/repeatedly/fluent-plugin-record-modifier#char_encoding.
19
21
  DESC
20
- config_param :remove_keys, :string, default: nil,
22
+ config_param :remove_keys, :array, default: nil,
21
23
  desc: <<-DESC
22
24
  The logs include needless record keys in some cases.
23
25
  You can remove it by using `remove_keys` parameter.
@@ -72,7 +74,7 @@ DESC
72
74
  conf.elements.select { |element| element.name == 'record' }.each do |element|
73
75
  element.each_pair do |k, v|
74
76
  element.has_key?(k) # to suppress unread configuration warning
75
- @has_tag_parts = true if v.include?('tag_parts')
77
+ @has_tag_parts = true if v && v.include?('tag_parts')
76
78
  @map[k] = DynamicExpander.new(k, v, @prepare_value)
77
79
  end
78
80
  end
@@ -80,7 +82,9 @@ DESC
80
82
  if @remove_keys and @whitelist_keys
81
83
  raise Fluent::ConfigError, "remove_keys and whitelist_keys are exclusive with each other."
82
84
  elsif @remove_keys
83
- @remove_keys = @remove_keys.split(',').map(&:strip)
85
+ @remove_keys = @remove_keys.map { |key|
86
+ record_accessor_create(key)
87
+ }
84
88
  elsif @whitelist_keys
85
89
  @whitelist_keys = @whitelist_keys.split(',').map(&:strip)
86
90
  @whitelist_keys.concat(@map.keys).uniq!
@@ -98,8 +102,8 @@ DESC
98
102
  }
99
103
 
100
104
  if @remove_keys
101
- @remove_keys.each { |v|
102
- record.delete(v)
105
+ @remove_keys.each { |ra|
106
+ ra.delete(record)
103
107
  }
104
108
  elsif @whitelist_keys
105
109
  modified = {}
@@ -163,7 +167,7 @@ DESC
163
167
 
164
168
  class DynamicExpander
165
169
  def initialize(param_key, param_value, prepare_value)
166
- if param_value.include?('${')
170
+ if param_value && param_value.include?('${')
167
171
  __str_eval_code__ = parse_parameter(param_value)
168
172
 
169
173
  # Use class_eval with string instead of define_method for performance.
@@ -77,7 +77,7 @@ DESC
77
77
  conf.elements.select { |element| element.name == 'record' }.each do |element|
78
78
  element.each_pair do |k, v|
79
79
  element.has_key?(k) # to suppress unread configuration warning
80
- @has_tag_parts = true if v.include?('tag_parts')
80
+ @has_tag_parts = true if v && v.include?('tag_parts')
81
81
  @map[k] = DynamicExpander.new(k, v, @prepare_value)
82
82
  end
83
83
  end
@@ -198,7 +198,7 @@ DESC
198
198
  attr_reader :param_value
199
199
 
200
200
  def initialize(param_key, param_value, prepare_value)
201
- if param_value.include?('${')
201
+ if param_value && param_value.include?('${')
202
202
  __str_eval_code__ = parse_parameter(param_value)
203
203
 
204
204
  # Use class_eval with string instead of define_method for performance.
@@ -114,6 +114,18 @@ class RecordModifierFilterTest < Test::Unit::TestCase
114
114
  assert_equal [{"k4" => 'v'}], d.filtered.map { |e| e.last }
115
115
  end
116
116
 
117
+ def test_remove_nested_keys
118
+ d = create_driver %[
119
+ remove_keys k1, $.kubernetes.test
120
+ ]
121
+
122
+ d.run(default_tag: @tag) do
123
+ d.feed("k1" => 'v', "kubernetes" => {"test" => 'v', "prod" => 'v'}, "k2" => 'v')
124
+ end
125
+
126
+ assert_equal [{"kubernetes" => {"prod" => 'v'}, "k2" => 'v'}], d.filtered.map { |e| e.last }
127
+ end
128
+
117
129
  def test_remove_non_whitelist_keys
118
130
  d = create_driver %[
119
131
  <record>
@@ -214,4 +226,23 @@ CONFIG
214
226
  ], d.filtered.map { |e| e.last }
215
227
  end
216
228
  end
229
+
230
+ def test_use_nil
231
+ require "fluent/version"
232
+ if Gem::Version.new(Fluent::VERSION) < Gem::Version.new("1.8.0")
233
+ omit "use_nil is only available in Fluentd 1.8.0 and higher"
234
+ end
235
+
236
+ d = create_driver %q[
237
+ <record>
238
+ test_key "#{use_nil}"
239
+ </record>
240
+ ]
241
+
242
+ d.run(default_tag: @tag) do
243
+ d.feed("k" => "v")
244
+ end
245
+
246
+ assert_equal [{"k" => "v", "test_key" => nil}], d.filtered.map(&:last)
247
+ end
217
248
  end
@@ -1,6 +1,7 @@
1
+ require 'fluent/test'
1
2
  require 'fluent/test/driver/output'
2
3
  require 'fluent/plugin/out_record_modifier'
3
-
4
+ require 'test/unit'
4
5
 
5
6
  class RecordModifierOutputTest < Test::Unit::TestCase
6
7
  def setup
@@ -139,4 +140,24 @@ class RecordModifierOutputTest < Test::Unit::TestCase
139
140
 
140
141
  assert_equal [{"k1" => 'v', "k2" => 'v', 'foo' => 'bar'}], d.events.map { |e| e.last }
141
142
  end
143
+
144
+ def test_use_nil
145
+ require "fluent/version"
146
+ if Gem::Version.new(Fluent::VERSION) < Gem::Version.new("1.8.0")
147
+ omit "use_nil is only available in Fluentd 1.8.0 and higher"
148
+ end
149
+
150
+ d = create_driver %q[
151
+ tag foo.filtered
152
+ <record>
153
+ test_key "#{use_nil}"
154
+ </record>
155
+ ]
156
+
157
+ d.run(default_tag: "test_tags") do
158
+ d.feed("k" => "v")
159
+ end
160
+
161
+ assert_equal [{"k" => "v", "test_key" => nil}], d.events.map(&:last)
162
+ end
142
163
  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: 2.1.1
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro Nakagawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-24 00:00:00.000000000 Z
11
+ date: 2025-08-23 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: '1.0'
19
+ version: '1.1'
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: '1.0'
29
+ version: '1.1'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '2'
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '3.3'
53
+ version: 3.4.0
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '3.3'
60
+ version: 3.4.0
61
61
  description: Filter plugin for modifying event record
62
62
  email: repeatedly@gmail.com
63
63
  executables: []
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  requirements: []
98
- rubygems_version: 3.3.7
98
+ rubygems_version: 3.4.1
99
99
  signing_key:
100
100
  specification_version: 4
101
101
  summary: Filter plugin for modifying event record