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 +4 -4
- data/.github/workflows/linux.yml +8 -1
- data/ChangeLog +9 -0
- data/README.md +3 -1
- data/VERSION +1 -1
- data/fluent-plugin-record-modifier.gemspec +2 -2
- data/lib/fluent/plugin/filter_record_modifier.rb +10 -6
- data/lib/fluent/plugin/out_record_modifier.rb +2 -2
- data/test/test_filter_record_modifier.rb +31 -0
- data/test/test_out_record_modifier.rb +22 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0162d793dd9d7c24bb4e3ec50aabfd2aa1e094b389d7da5236a9c99a60360209
|
4
|
+
data.tar.gz: 0e4a332894d537696733f3b0cfd824d689a187187ec86987a8bf533ef4d4fff9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21a8f63aba701b8ffa5c77cf4b1bc6fc373b015a601e658abe77de4a1763de485e5e416b8958a6e9d0ace9b4dfc3ac401fc2ab9f07189b8452daea21153a0816
|
7
|
+
data.tar.gz: c5450f8d89ca5f9578947e49e2723620641658db0607a69ac8cceb19d1bcb3903562c380f0bc5f831c7fe5baeaa7a9c44a54dd485dd00719d3d05f31cedaee00
|
data/.github/workflows/linux.yml
CHANGED
@@ -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: ['
|
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
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
|
+
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.
|
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.
|
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, :
|
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.
|
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 { |
|
102
|
-
|
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.
|
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:
|
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.
|
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.
|
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:
|
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:
|
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.
|
98
|
+
rubygems_version: 3.4.1
|
99
99
|
signing_key:
|
100
100
|
specification_version: 4
|
101
101
|
summary: Filter plugin for modifying event record
|