Skip to content

Commit 6fb6c22

Browse files
committed
Change to config_section
1 parent 25c38dd commit 6fb6c22

File tree

3 files changed

+18
-25
lines changed

3 files changed

+18
-25
lines changed

README.md

-2
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,6 @@ If you want to replace specific value for keys you can use `replace` section.
156156
<filter pattern>
157157
@type record_modifier
158158
159-
# set replace to true, default false
160-
replace true
161159
# replace key key1
162160
<replace>
163161
# your key name

lib/fluent/plugin/filter_record_modifier.rb

+18-21
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,21 @@ class Plugin::RecordModifierFilter < Plugin::Filter
3131
This option is exclusive with `remove_keys`.
3232
DESC
3333

34-
config_param :replace, :bool, default: false,
35-
desc: <<-DESC
36-
Boolean flag to enable replace function. Default is false.
37-
DESC
34+
config_section :replace, param_name: :replaces, multi: true do
35+
desc"The field name to which the regular expression is applied"
36+
config_param :key, :string
37+
desc "The regular expression"
38+
config_param :expression do |value|
39+
if value.start_with?("/") && value.end_with?("/")
40+
Regexp.compile(value[1..-2])
41+
else
42+
$log.warn("You should use \"pattern /#{value}/\" instead of \"pattern #{value}\"")
43+
Regexp.compile(value)
44+
end
45+
end
46+
desc "The replacement string"
47+
config_param :replace, :string
48+
end
3849

3950
def configure(conf)
4051
super
@@ -71,20 +82,6 @@ def configure(conf)
7182
end
7283
end
7384

74-
@replace_keys = Array.new
75-
if @replace
76-
conf.elements.select { |element| element.name == 'replace' }.each do |element|
77-
expr = if element['expression'][0] == "/" && element['expression'][-1] == "/"
78-
element['expression'][1..-2]
79-
else
80-
element['expression']
81-
end
82-
@replace_keys.push("key" => element['key'],
83-
"expression" => Regexp.new(expr),
84-
"replace" => element['replace'])
85-
end
86-
end
87-
8885
if @remove_keys and @whitelist_keys
8986
raise Fluent::ConfigError, "remove_keys and whitelist_keys are exclusive with each other."
9087
elsif @remove_keys
@@ -116,9 +113,9 @@ def filter(tag, time, record)
116113
record = modified
117114
end
118115

119-
if @replace && @replace_keys
120-
@replace_keys.each {|rep|
121-
record[rep['key']] = record[rep['key']].gsub(rep['expression'], rep['replace']) if record.include?(rep['key']) && rep['expression'].match(record[rep['key']])
116+
if @replaces.any?
117+
@replaces.each {|replace|
118+
record[replace.key] = record[replace.key].gsub(replace.expression, replace.replace) if record.include?(replace.key) && replace.expression.match(record[replace.key])
122119
}
123120
end
124121

test/test_filter_record_modifier.rb

-2
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ def test_prepare_values
143143

144144
def test_replace_values
145145
d = create_driver %[
146-
replace true
147146
<replace>
148147
key k1
149148
expression /^(?<start>.+).{2}(?<end>.+)$/
@@ -165,7 +164,6 @@ def test_replace_values
165164

166165
def test_does_not_replace
167166
d = create_driver %[
168-
replace true
169167
<replace>
170168
key k1
171169
expression /^(?<start>.+).{2}(?<end>.+)$/

0 commit comments

Comments
 (0)