fluent-plugin-rename-key 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![Gem Version](https://badge.fury.io/rb/fluent-plugin-rename-key.
|
5
|
-
[![Build Status](https://travis-ci.org/shunwen/fluent-plugin-rename-key.
|
6
|
-
[![Coverage Status](https://coveralls.io/repos/shunwen/fluent-plugin-rename-key/badge.
|
7
|
-
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/shunwen/fluent-plugin-rename-key/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/fluent-plugin-rename-key.svg)](https://badge.fury.io/rb/fluent-plugin-rename-key)
|
5
|
+
[![Build Status](https://travis-ci.org/shunwen/fluent-plugin-rename-key.svg?branch=master)](https://travis-ci.org/shunwen/fluent-plugin-rename-key)
|
6
|
+
[![Coverage Status](https://coveralls.io/repos/shunwen/fluent-plugin-rename-key/badge.svg?branch=master)](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: []
|