fluent-plugin-rename-key 0.1.4 → 0.2.0
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/README.md +8 -4
- data/fluent-plugin-rename-key.gemspec +12 -12
- data/lib/fluent/plugin/out_rename_key.rb +80 -11
- data/test/plugin/test_out_rename_key.rb +141 -37
- metadata +7 -8
- data/Guardfile +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe8b87f5ca1a68033f2d8d22ad283c097f63bca8
|
4
|
+
data.tar.gz: f7fd6a36cf2f4b85b02a3b626b28d2c986b40eb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd388ad6dd9c73618ee654dce8786dad13714f32cbf8f76706838050a4c28009c271faa90c73b82d57f5da52d4b1a27f16fd47fd8aba266f8ae07ddf7ca5abbc
|
7
|
+
data.tar.gz: c6eeab30ca1317114b157f9ddd6baf4041e330ed30ae289aeb44fad45ba72d8689af5041e0f6f79617d4def623d011a13c629d09201bcebbc8a6befc9f4208b1
|
data/README.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
# fluent-plugin-rename-key, a plugin for [Fluentd](http://fluentd.org)
|
2
2
|
|
3
3
|
## Status
|
4
|
-
[](https://bitdeli.com/free "Bitdeli Badge")
|
4
|
+
[](https://badge.fury.io/rb/fluent-plugin-rename-key)
|
5
|
+
[](https://travis-ci.org/shunwen/fluent-plugin-rename-key)
|
6
|
+
[](https://coveralls.io/r/shunwen/fluent-plugin-rename-key?branch=master)
|
8
7
|
|
9
8
|
## Overview
|
10
9
|
|
@@ -37,6 +36,11 @@ $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-rename-key
|
|
37
36
|
# <new_key> is the string with MatchData placeholder for creating the new key name, whitespace is allowed
|
38
37
|
rename_rule<num> <key_regexp> <new_key>
|
39
38
|
|
39
|
+
# <num> is an integer, used to sort and apply the rules
|
40
|
+
# <key_regexp> is the regular expression used to match the keys, whitespace is not allowed, use "\s" instead
|
41
|
+
# <new_key> is the string to replace the matches with, with MatchData placeholder for creating the new key name, whitespace is allowed. Optional, if missing then the matches are removed
|
42
|
+
replace_rule<num> <key_regexp> <new_key>
|
43
|
+
|
40
44
|
# Optional: remove tag prefix
|
41
45
|
remove_tag_prefix <string>
|
42
46
|
|
@@ -2,23 +2,23 @@
|
|
2
2
|
$:.push File.expand_path('../lib', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
|
-
s.name =
|
6
|
-
s.version =
|
7
|
-
s.date =
|
8
|
-
s.license =
|
9
|
-
s.authors = [
|
10
|
-
s.email =
|
11
|
-
s.homepage =
|
5
|
+
s.name = 'fluent-plugin-rename-key'
|
6
|
+
s.version = '0.2.0'
|
7
|
+
s.date = '2016-04-05'
|
8
|
+
s.license = 'Apache-2.0'
|
9
|
+
s.authors = ['Shunwen Hsiao', 'Julian Grinblat']
|
10
|
+
s.email = ['hsiaoshunwen@gmail.com']
|
11
|
+
s.homepage = 'https://github.com/shunwen/fluent-plugin-rename-key'
|
12
12
|
s.summary = %q[Fluentd output plugin. Rename keys which match given regular expressions, assign new tags and re-emit the records.]
|
13
|
-
s.has_rdoc = false
|
14
13
|
|
14
|
+
s.required_ruby_version = '>= 1.9.3'
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
|
-
s.test_files = `git ls-files -- {test
|
16
|
+
s.test_files = `git ls-files -- {test}/*`.split("\n")
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ['lib']
|
19
19
|
|
20
|
-
s.add_runtime_dependency
|
21
|
-
s.add_development_dependency
|
22
|
-
s.add_development_dependency
|
20
|
+
s.add_runtime_dependency 'fluentd'
|
21
|
+
s.add_development_dependency 'test-unit', '>= 3.1.0'
|
22
|
+
s.add_development_dependency 'rake'
|
23
23
|
s.add_development_dependency 'coveralls'
|
24
24
|
end
|
@@ -1,16 +1,33 @@
|
|
1
1
|
class Fluent::RenameKeyOutput < Fluent::Output
|
2
2
|
Fluent::Plugin.register_output 'rename_key', self
|
3
3
|
|
4
|
+
# To support Fluentd v0.10.57 or earlier
|
5
|
+
unless method_defined?(:router)
|
6
|
+
define_method("router") { Fluent::Engine }
|
7
|
+
end
|
8
|
+
|
9
|
+
# Define `log` method for v0.10.42 or earlier
|
10
|
+
unless method_defined?(:log)
|
11
|
+
define_method("log") { $log }
|
12
|
+
end
|
13
|
+
|
14
|
+
# For fluentd v0.12.16 or earlier
|
15
|
+
class << self
|
16
|
+
unless method_defined?(:desc)
|
17
|
+
def desc(description)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
4
22
|
DEFAULT_APPEND_TAG = 'key_renamed'
|
5
23
|
|
24
|
+
desc 'Specify and remove tag prefix.'
|
6
25
|
config_param :remove_tag_prefix, :string, default: nil
|
26
|
+
desc "Append custom tag postfix (default: #{DEFAULT_APPEND_TAG})."
|
7
27
|
config_param :append_tag, :string, default: DEFAULT_APPEND_TAG
|
28
|
+
desc 'Deep rename/replace operation.'
|
8
29
|
config_param :deep_rename, :bool, default: true
|
9
30
|
|
10
|
-
unless method_defined?(:router)
|
11
|
-
define_method("router") { Fluent::Engine }
|
12
|
-
end
|
13
|
-
|
14
31
|
def configure conf
|
15
32
|
super
|
16
33
|
|
@@ -28,10 +45,31 @@ class Fluent::RenameKeyOutput < Fluent::Output
|
|
28
45
|
end
|
29
46
|
|
30
47
|
@rename_rules << { key_regexp: /#{key_regexp}/, new_key: new_key }
|
31
|
-
|
48
|
+
log.info "Added rename key rule: #{r} #{@rename_rules.last}"
|
49
|
+
end
|
50
|
+
|
51
|
+
@replace_rules = []
|
52
|
+
conf_replace_rules = conf.keys.select { |k| k =~ /^replace_rule(\d+)$/ }
|
53
|
+
conf_replace_rules.sort_by { |r| r.sub('replace_rule', '').to_i }.each do |r|
|
54
|
+
key_regexp, replacement = parse_replace_rule conf[r]
|
55
|
+
|
56
|
+
if key_regexp.nil?
|
57
|
+
raise Fluent::ConfigError, "Failed to parse: #{r} #{conf[r]}"
|
58
|
+
end
|
59
|
+
|
60
|
+
if replacement.nil?
|
61
|
+
replacement = ""
|
62
|
+
end
|
63
|
+
|
64
|
+
if @replace_rules.map { |r| r[:key_regexp] }.include? /#{key_regexp}/
|
65
|
+
raise Fluent::ConfigError, "Duplicated rules for key #{key_regexp}: #{@replace_rules}"
|
66
|
+
end
|
67
|
+
|
68
|
+
@replace_rules << { key_regexp: /#{key_regexp}/, replacement: replacement }
|
69
|
+
log.info "Added replace key rule: #{r} #{@replace_rules.last}"
|
32
70
|
end
|
33
71
|
|
34
|
-
raise Fluent::ConfigError, "No rename rules are given" if @rename_rules.empty?
|
72
|
+
raise Fluent::ConfigError, "No rename or replace rules are given" if @rename_rules.empty? && @replace_rules.empty?
|
35
73
|
|
36
74
|
@remove_tag_prefix = /^#{Regexp.escape @remove_tag_prefix}\.?/ if @remove_tag_prefix
|
37
75
|
end
|
@@ -41,6 +79,7 @@ class Fluent::RenameKeyOutput < Fluent::Output
|
|
41
79
|
new_tag = @remove_tag_prefix ? tag.sub(@remove_tag_prefix, '') : tag
|
42
80
|
new_tag = "#{new_tag}.#{@append_tag}".sub(/^\./, '')
|
43
81
|
new_record = rename_key record
|
82
|
+
new_record = replace_key new_record
|
44
83
|
router.emit new_tag, time, new_record
|
45
84
|
end
|
46
85
|
|
@@ -50,9 +89,11 @@ class Fluent::RenameKeyOutput < Fluent::Output
|
|
50
89
|
# private
|
51
90
|
|
52
91
|
def parse_rename_rule rule
|
53
|
-
if rule.match /^([^\s]+)\s+(.+)$/
|
54
|
-
|
55
|
-
|
92
|
+
$~.captures if rule.match /^([^\s]+)\s+(.+)$/
|
93
|
+
end
|
94
|
+
|
95
|
+
def parse_replace_rule rule
|
96
|
+
$~.captures if rule.match /^([^\s]+)(?:\s+(.+))?$/
|
56
97
|
end
|
57
98
|
|
58
99
|
def rename_key record
|
@@ -65,7 +106,7 @@ class Fluent::RenameKeyOutput < Fluent::Output
|
|
65
106
|
next unless match_data # next rule
|
66
107
|
|
67
108
|
placeholder = get_placeholder match_data
|
68
|
-
key = rule[:new_key].gsub /\${\
|
109
|
+
key = rule[:new_key].gsub /\${md\[\d+\]}/, placeholder
|
69
110
|
break
|
70
111
|
end
|
71
112
|
|
@@ -83,11 +124,39 @@ class Fluent::RenameKeyOutput < Fluent::Output
|
|
83
124
|
new_record
|
84
125
|
end
|
85
126
|
|
127
|
+
def replace_key record
|
128
|
+
new_record = {}
|
129
|
+
|
130
|
+
record.each do |key, value|
|
131
|
+
|
132
|
+
@replace_rules.each do |rule|
|
133
|
+
match_data = key.match rule[:key_regexp]
|
134
|
+
next unless match_data # next rule
|
135
|
+
|
136
|
+
placeholder = get_placeholder match_data
|
137
|
+
key = key.gsub rule[:key_regexp], rule[:replacement].gsub(/\${md\[\d+\]}/, placeholder)
|
138
|
+
break
|
139
|
+
end
|
140
|
+
|
141
|
+
if @deep_rename
|
142
|
+
if value.is_a? Hash
|
143
|
+
value = replace_key value
|
144
|
+
elsif value.is_a? Array
|
145
|
+
value = value.map { |v| v.is_a?(Hash) ? replace_key(v) : v }
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
new_record[key] = value
|
150
|
+
end
|
151
|
+
|
152
|
+
new_record
|
153
|
+
end
|
154
|
+
|
86
155
|
def get_placeholder match_data
|
87
156
|
placeholder = {}
|
88
157
|
|
89
158
|
match_data.to_a.each_with_index do |e, idx|
|
90
|
-
placeholder
|
159
|
+
placeholder["${md[#{idx}]}"] = e
|
91
160
|
end
|
92
161
|
|
93
162
|
placeholder
|
@@ -2,13 +2,14 @@ require 'helper'
|
|
2
2
|
|
3
3
|
class RenameKeyOutputTest < Test::Unit::TestCase
|
4
4
|
MATCH_TAG = 'incoming_tag'
|
5
|
-
|
5
|
+
RENAME_RULE_CONFIG = 'rename_rule1 ^\$(.+) x$${md[1]}'
|
6
|
+
REPLACE_RULE_CONFIG = 'replace_rule1 ^\$ x'
|
6
7
|
|
7
8
|
def setup
|
8
9
|
Fluent::Test.setup
|
9
10
|
end
|
10
11
|
|
11
|
-
def create_driver(conf
|
12
|
+
def create_driver(conf, tag = MATCH_TAG)
|
12
13
|
Fluent::Test::OutputTestDriver.new(Fluent::RenameKeyOutput, tag).configure(conf)
|
13
14
|
end
|
14
15
|
|
@@ -44,9 +45,25 @@ class RenameKeyOutputTest < Test::Unit::TestCase
|
|
44
45
|
assert_equal '${md[1]} ${md[2]}', parsed[1]
|
45
46
|
end
|
46
47
|
|
48
|
+
def test_parse_replace_rule_with_replacement
|
49
|
+
# Replace hyphens with underscores
|
50
|
+
parsed = Fluent::RenameKeyOutput.new.parse_replace_rule '- _'
|
51
|
+
assert_equal 2, parsed.length
|
52
|
+
assert_equal '-', parsed[0]
|
53
|
+
assert_equal '_', parsed[1]
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_parse_replace_rule_without_replacement
|
57
|
+
# Remove all parethesis hyphens and spaces
|
58
|
+
parsed = Fluent::RenameKeyOutput.new.parse_replace_rule '[()-\s]'
|
59
|
+
assert_equal 2, parsed.length
|
60
|
+
assert_equal '[()-\s]', parsed[0]
|
61
|
+
assert parsed[1].nil?
|
62
|
+
end
|
63
|
+
|
47
64
|
def test_emit_default_append_tag
|
48
65
|
append_tag = Fluent::RenameKeyOutput::DEFAULT_APPEND_TAG
|
49
|
-
d = create_driver
|
66
|
+
d = create_driver RENAME_RULE_CONFIG
|
50
67
|
d.run do
|
51
68
|
d.emit '$key1' => 'value1', '%key2' => {'$key3'=>'123', '$key4'=> {'$key5' => 'value2'} }
|
52
69
|
end
|
@@ -54,13 +71,12 @@ class RenameKeyOutputTest < Test::Unit::TestCase
|
|
54
71
|
emits = d.emits
|
55
72
|
assert_equal 1, emits.length
|
56
73
|
assert_equal "#{MATCH_TAG}.#{append_tag}", emits[0][0]
|
57
|
-
assert_equal ['x$key1', '%key2'], emits[0][2].keys
|
58
74
|
end
|
59
75
|
|
60
76
|
def test_emit_append_custom_tag
|
61
77
|
custom_tag = 'custom_tag'
|
62
78
|
config = %Q[
|
63
|
-
#{
|
79
|
+
#{RENAME_RULE_CONFIG}
|
64
80
|
append_tag #{custom_tag}
|
65
81
|
]
|
66
82
|
d = create_driver config
|
@@ -72,67 +88,103 @@ class RenameKeyOutputTest < Test::Unit::TestCase
|
|
72
88
|
emits = d.emits
|
73
89
|
assert_equal 1, emits.length
|
74
90
|
assert_equal "#{MATCH_TAG}.#{custom_tag}", emits[0][0]
|
75
|
-
assert_equal ['x$key1', '%key2'], emits[0][2].keys
|
76
91
|
end
|
77
92
|
|
78
|
-
def
|
79
|
-
|
93
|
+
def test_remove_tag_prefix
|
94
|
+
append_tag = Fluent::RenameKeyOutput::DEFAULT_APPEND_TAG
|
95
|
+
|
96
|
+
config = %Q[
|
97
|
+
#{RENAME_RULE_CONFIG}
|
98
|
+
remove_tag_prefix #{MATCH_TAG}
|
99
|
+
]
|
100
|
+
|
101
|
+
d = create_driver config
|
80
102
|
d.run do
|
81
|
-
d.emit '
|
103
|
+
d.emit 'key1' => 'value1'
|
104
|
+
d.emit '$key2' => 'value2'
|
105
|
+
end
|
106
|
+
|
107
|
+
emits = d.emits
|
108
|
+
assert_equal 2, emits.length
|
109
|
+
assert_equal append_tag, emits[0][0]
|
110
|
+
assert_equal append_tag, emits[1][0]
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_rename_rule_emit_deep_rename_hash
|
114
|
+
d = create_driver RENAME_RULE_CONFIG
|
115
|
+
d.run do
|
116
|
+
d.emit '$key1' => 'value1', 'key2' => {'$key3' => 'value3', '$key4'=> {'$key5' => 'value5'} }
|
82
117
|
end
|
83
118
|
|
84
119
|
emits = d.emits
|
85
|
-
assert_equal [
|
86
|
-
assert_equal [
|
120
|
+
assert_equal %w[x$key1 key2], emits[0][2].keys
|
121
|
+
assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].keys
|
122
|
+
assert_equal ['x$key5'], emits[0][2]['key2']['x$key4'].keys
|
87
123
|
end
|
88
124
|
|
89
|
-
def
|
90
|
-
d = create_driver
|
125
|
+
def test_rename_rule_emit_deep_rename_array
|
126
|
+
d = create_driver RENAME_RULE_CONFIG
|
91
127
|
d.run do
|
92
|
-
d.emit '$key1' => 'value1', '
|
128
|
+
d.emit '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4'=> {'$key5' => 'value5'}}]
|
93
129
|
end
|
94
130
|
|
95
131
|
emits = d.emits
|
96
|
-
assert_equal [
|
97
|
-
assert_equal ['x$key5'], emits[0][2]['
|
132
|
+
assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].flat_map(&:keys)
|
133
|
+
assert_equal ['x$key5'], emits[0][2]['key2'][1]['x$key4'].keys
|
98
134
|
end
|
99
135
|
|
100
|
-
def
|
136
|
+
def test_rename_rule_emit_deep_rename_off
|
101
137
|
config = %Q[
|
102
|
-
#{
|
138
|
+
#{RENAME_RULE_CONFIG}
|
103
139
|
deep_rename false
|
104
140
|
]
|
105
141
|
|
106
142
|
d = create_driver config
|
107
143
|
d.run do
|
108
|
-
d.emit '$key1' => 'value1', '
|
144
|
+
d.emit '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
|
109
145
|
end
|
110
146
|
|
111
147
|
emits = d.emits
|
112
|
-
assert_equal [
|
148
|
+
assert_equal %w[$key3 $key4], emits[0][2]['key2'].keys
|
113
149
|
end
|
114
150
|
|
115
|
-
def
|
116
|
-
|
151
|
+
def test_rename_rule_emit_with_match_data
|
152
|
+
d = create_driver 'rename_rule1 (\w+)\s(\w+)\s(\w+) ${md[3]} ${md[2]} ${md[1]}'
|
153
|
+
d.run do
|
154
|
+
d.emit 'key1 key2 key3' => 'value'
|
155
|
+
end
|
156
|
+
emits = d.emits
|
157
|
+
assert_equal 1, emits.length
|
158
|
+
assert_equal ['key3 key2 key1'], emits[0][2].keys
|
159
|
+
end
|
117
160
|
|
118
|
-
|
119
|
-
|
120
|
-
|
161
|
+
def test_multiple_rename_rules_emit
|
162
|
+
config_multiple_rules = %q[
|
163
|
+
rename_rule1 ^(\w+)\s1 ${md[1]}_1
|
164
|
+
rename_rule2 ^(\w+)\s2 ${md[1]}_2
|
121
165
|
]
|
122
166
|
|
123
|
-
d = create_driver
|
167
|
+
d = create_driver config_multiple_rules
|
124
168
|
d.run do
|
125
|
-
d.emit '
|
126
|
-
d.emit '$key2' => 'value2'
|
169
|
+
d.emit 'key 1' => 'value1', 'key 2' => 'value2'
|
127
170
|
end
|
128
171
|
|
129
172
|
emits = d.emits
|
130
|
-
assert_equal
|
131
|
-
|
132
|
-
|
173
|
+
assert_equal %w[key_1 key_2], emits[0][2].keys
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_replace_rule_emit_deep_rename_hash
|
177
|
+
d = create_driver 'replace_rule1 ^(\$) x'
|
178
|
+
|
179
|
+
d.run do
|
180
|
+
d.emit '$key1' => 'value1', 'key2' => { 'key3' => 'value3', '$key4' => 'value4' }
|
181
|
+
end
|
182
|
+
emits = d.emits
|
183
|
+
assert_equal %w[xkey1 key2], emits[0][2].keys
|
184
|
+
assert_equal %w[key3 xkey4], emits[0][2]['key2'].keys
|
133
185
|
end
|
134
186
|
|
135
|
-
def
|
187
|
+
def test_replace_rule_emit_with_match_data
|
136
188
|
d = create_driver 'rename_rule1 (\w+)\s(\w+)\s(\w+) ${md[3]} ${md[2]} ${md[1]}'
|
137
189
|
d.run do
|
138
190
|
d.emit 'key1 key2 key3' => 'value'
|
@@ -142,18 +194,70 @@ class RenameKeyOutputTest < Test::Unit::TestCase
|
|
142
194
|
assert_equal ['key3 key2 key1'], emits[0][2].keys
|
143
195
|
end
|
144
196
|
|
145
|
-
def
|
197
|
+
def test_replace_rule_emit_deep_rename_array
|
198
|
+
d = create_driver 'replace_rule1 ^(\$) x${md[1]}'
|
199
|
+
|
200
|
+
d.run do
|
201
|
+
d.emit '$key1' => 'value1', 'key2' => [{'$key3' => 'value3'}, {'$key4' => {'$key5' => 'value5'}}]
|
202
|
+
end
|
203
|
+
|
204
|
+
emits = d.emits
|
205
|
+
assert_equal %w[x$key3 x$key4], emits[0][2]['key2'].flat_map(&:keys)
|
206
|
+
assert_equal %w[x$key5], emits[0][2]['key2'][1]['x$key4'].keys
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_replace_rule_emit_deep_rename_off
|
210
|
+
config = %Q[
|
211
|
+
#{REPLACE_RULE_CONFIG}
|
212
|
+
deep_rename false
|
213
|
+
]
|
214
|
+
|
215
|
+
d = create_driver config
|
216
|
+
d.run do
|
217
|
+
d.emit '$key1' => 'value1', 'key2' => {'$key3'=>'value3', '$key4'=> 'value4'}
|
218
|
+
end
|
219
|
+
|
220
|
+
emits = d.emits
|
221
|
+
assert_equal %w[$key3 $key4], emits[0][2]['key2'].keys
|
222
|
+
end
|
223
|
+
|
224
|
+
def test_replace_rule_emit_remove_matched_when_no_replacement
|
225
|
+
d = create_driver 'replace_rule1 [\s/()]'
|
226
|
+
d.run do
|
227
|
+
d.emit 'key (/1 )' => 'value1'
|
228
|
+
end
|
229
|
+
|
230
|
+
emits = d.emits
|
231
|
+
assert_equal %w[key1], emits[0][2].keys
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_multiple_replace_rules_emit
|
146
235
|
config_multiple_rules = %q[
|
147
|
-
|
148
|
-
|
236
|
+
replace_rule1 ^(\w+)\s(\d) ${md[1]}${md[2]}
|
237
|
+
replace_rule2 [\s()]
|
149
238
|
]
|
150
239
|
|
151
240
|
d = create_driver config_multiple_rules
|
152
241
|
d.run do
|
153
|
-
d.emit 'key 1' => 'value1', 'key 2' => 'value2'
|
242
|
+
d.emit 'key 1' => 'value1', 'key (2)' => 'value2'
|
243
|
+
end
|
244
|
+
|
245
|
+
emits = d.emits
|
246
|
+
assert_equal %w[key1 key2], emits[0][2].keys
|
247
|
+
end
|
248
|
+
|
249
|
+
def test_combined_rename_rule_and_replace_rule
|
250
|
+
config_combined_rules = %q[
|
251
|
+
rename_rule1 ^(.+)\s(one) ${md[1]}1
|
252
|
+
replace_rule2 [\s()]
|
253
|
+
]
|
254
|
+
|
255
|
+
d = create_driver config_combined_rules
|
256
|
+
d.run do
|
257
|
+
d.emit '(key) one (x)' => 'value1', 'key (2)' => 'value2'
|
154
258
|
end
|
155
259
|
|
156
260
|
emits = d.emits
|
157
|
-
assert_equal [
|
261
|
+
assert_equal %w[key1 key2], emits[0][2].keys
|
158
262
|
end
|
159
263
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-rename-key
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shunwen Hsiao
|
8
|
+
- Julian Grinblat
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
12
|
+
date: 2016-04-05 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: fluentd
|
@@ -67,7 +68,8 @@ dependencies:
|
|
67
68
|
- !ruby/object:Gem::Version
|
68
69
|
version: '0'
|
69
70
|
description:
|
70
|
-
email:
|
71
|
+
email:
|
72
|
+
- hsiaoshunwen@gmail.com
|
71
73
|
executables: []
|
72
74
|
extensions: []
|
73
75
|
extra_rdoc_files: []
|
@@ -75,7 +77,6 @@ files:
|
|
75
77
|
- ".gitignore"
|
76
78
|
- ".travis.yml"
|
77
79
|
- Gemfile
|
78
|
-
- Guardfile
|
79
80
|
- LICENSE.txt
|
80
81
|
- README.md
|
81
82
|
- Rakefile
|
@@ -95,7 +96,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
96
|
requirements:
|
96
97
|
- - ">="
|
97
98
|
- !ruby/object:Gem::Version
|
98
|
-
version:
|
99
|
+
version: 1.9.3
|
99
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
101
|
requirements:
|
101
102
|
- - ">="
|
@@ -108,6 +109,4 @@ signing_key:
|
|
108
109
|
specification_version: 4
|
109
110
|
summary: Fluentd output plugin. Rename keys which match given regular expressions,
|
110
111
|
assign new tags and re-emit the records.
|
111
|
-
test_files:
|
112
|
-
- test/helper.rb
|
113
|
-
- test/plugin/test_out_rename_key.rb
|
112
|
+
test_files: []
|