fluent-plugin-rewrite 0.0.13 → 0.1.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/.travis.yml +9 -0
- data/Appraisals +3 -0
- data/README.md +50 -1
- data/fluent-plugin-rewrite.gemspec +3 -3
- data/gemfiles/fluentd_0.14.gemfile +7 -0
- data/lib/fluent/plugin/filter_rewrite.rb +26 -0
- data/lib/fluent/plugin/out_rewrite.rb +14 -71
- data/lib/fluent/plugin/rewrite_rule.rb +73 -0
- data/test/plugin/test_filter_rewrite.rb +213 -0
- data/test/plugin/test_out_rewrite.rb +55 -54
- data/test/test_helper.rb +1 -0
- metadata +32 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab3e54318cc3b8fd6ddc45766eb8e035c60d18ea
|
4
|
+
data.tar.gz: e6dbbdb1e22264cc26980df004ff0b119f9d5ff7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ac903ed8fd460b43d625e2bcec91d45fc49fcce0dd27d1cb146881a6934d0764e1fa1244f6b5b0b14733708317e875b91cbf5387ac87e727ba3a34203d784a2
|
7
|
+
data.tar.gz: 1eb9034188bb8f0724363301e7f7700b5b531628371123ea4d912c7331d7774db720dc7f0887968f300341e70a2a795ea7c4100eb31b388f49b83c60ccd51756
|
data/.travis.yml
ADDED
data/Appraisals
ADDED
data/README.md
CHANGED
@@ -11,7 +11,7 @@ matching and re-emit them.
|
|
11
11
|
|
12
12
|
```
|
13
13
|
<match apache.log.**>
|
14
|
-
type rewrite
|
14
|
+
@type rewrite
|
15
15
|
|
16
16
|
remove_prefix apache.log
|
17
17
|
add_prefix filtered
|
@@ -220,6 +220,55 @@ will be replaced by the second rule as usual.
|
|
220
220
|
{ "path" => "/baz" }
|
221
221
|
```
|
222
222
|
|
223
|
+
### RewriteFilter
|
224
|
+
|
225
|
+
Filter plugin to modify messages' values along with pattern
|
226
|
+
matching and filter them.
|
227
|
+
|
228
|
+
Note that filter version of rewrite plugin does not have append/add tags functionality.
|
229
|
+
|
230
|
+
Thus, this filter version does not able to specify `append_to_tag`, `tag`, and `fallback` rules.
|
231
|
+
|
232
|
+
## Synopsis
|
233
|
+
|
234
|
+
```
|
235
|
+
<filter apache.log.**>
|
236
|
+
@type rewrite
|
237
|
+
|
238
|
+
<rule>
|
239
|
+
key path
|
240
|
+
pattern \\?.+$
|
241
|
+
replace
|
242
|
+
</rule>
|
243
|
+
<rule>
|
244
|
+
key path
|
245
|
+
pattern (/[^/]+)\\?([^=]+)=(\\d)
|
246
|
+
replace \\1/\\2/\\3
|
247
|
+
</rule>
|
248
|
+
<rule>
|
249
|
+
key status
|
250
|
+
pattern ^500$
|
251
|
+
ignore true
|
252
|
+
</rule>
|
253
|
+
</match>
|
254
|
+
```
|
255
|
+
|
256
|
+
## Configuration
|
257
|
+
|
258
|
+
Note: This filter version of rewrite plugin does not have `remove_prefix` and `add_prefix` configuration.
|
259
|
+
|
260
|
+
### rule: replace
|
261
|
+
|
262
|
+
Same as OutputRewrite section's [rule: replace](#rule-replace).
|
263
|
+
|
264
|
+
### rule: ignore
|
265
|
+
|
266
|
+
Same as OutputRewrite section's [rule: ignore](#rule-ignore).
|
267
|
+
|
268
|
+
### rule: last
|
269
|
+
|
270
|
+
Same as OutputRewrite section's [rule: last](#rule-last).
|
271
|
+
|
223
272
|
## Installation
|
224
273
|
|
225
274
|
Add this line to your application's Gemfile:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = "fluent-plugin-rewrite"
|
3
|
-
gem.version = '0.0
|
3
|
+
gem.version = '0.1.0'
|
4
4
|
gem.authors = ["Kentaro Kuribayashi"]
|
5
5
|
gem.email = ["kentarok@gmail.com"]
|
6
6
|
gem.homepage = "http://github.com/kentaro/fluent-plugin-rewrite"
|
@@ -15,6 +15,6 @@ Gem::Specification.new do |gem|
|
|
15
15
|
|
16
16
|
gem.add_development_dependency "rake"
|
17
17
|
gem.add_development_dependency "test-unit", "~> 3.1"
|
18
|
-
gem.
|
18
|
+
gem.add_development_dependency "appraisal"
|
19
|
+
gem.add_runtime_dependency "fluentd", [">= 0.14.8", "< 2"]
|
19
20
|
end
|
20
|
-
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Fluent::Plugin
|
2
|
+
class RewriteFilter < Filter
|
3
|
+
Fluent::Plugin.register_filter('rewrite', self)
|
4
|
+
|
5
|
+
attr_reader :rewrite_rule
|
6
|
+
|
7
|
+
def configure(conf)
|
8
|
+
require 'fluent/plugin/rewrite_rule'
|
9
|
+
|
10
|
+
super
|
11
|
+
|
12
|
+
@rewrite_rule = Fluent::RewriteRule.new(self, conf)
|
13
|
+
end
|
14
|
+
|
15
|
+
def filter_stream(tag, es)
|
16
|
+
new_es = Fluent::MultiEventStream.new
|
17
|
+
|
18
|
+
es.each do |time, record|
|
19
|
+
record = @rewrite_rule.rewrite(record)
|
20
|
+
new_es.add(time, record) if record
|
21
|
+
end
|
22
|
+
|
23
|
+
new_es
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,19 +1,22 @@
|
|
1
|
-
|
1
|
+
require 'fluent/plugin/output'
|
2
|
+
|
3
|
+
module Fluent::Plugin
|
2
4
|
class RewriteOutput < Output
|
3
5
|
Fluent::Plugin.register_output('rewrite', self)
|
4
6
|
|
5
|
-
|
6
|
-
unless method_defined?(:router)
|
7
|
-
define_method("router") { Engine }
|
8
|
-
end
|
7
|
+
helpers :event_emitter
|
9
8
|
|
10
|
-
config_param :remove_prefix, :string, :default => nil
|
11
|
-
|
9
|
+
config_param :remove_prefix, :string, :default => nil,
|
10
|
+
deprecated: "use @label instead for event routing"
|
11
|
+
config_param :add_prefix, :string, :default => nil,
|
12
|
+
deprecated: "use @label instead for event routing"
|
12
13
|
config_param :enable_warnings, :bool, :default => false
|
13
14
|
|
14
|
-
attr_reader :
|
15
|
+
attr_reader :rewrite_rule
|
15
16
|
|
16
17
|
def configure(conf)
|
18
|
+
require 'fluent/plugin/rewrite_rule'
|
19
|
+
|
17
20
|
super
|
18
21
|
|
19
22
|
if @remove_prefix
|
@@ -24,15 +27,7 @@ module Fluent
|
|
24
27
|
@added_prefix_string = @add_prefix + '.'
|
25
28
|
end
|
26
29
|
|
27
|
-
@
|
28
|
-
rule = {}
|
29
|
-
element.keys.each do |key|
|
30
|
-
# read and throw away to supress unread configuration warning
|
31
|
-
rule[key] = element[key]
|
32
|
-
end
|
33
|
-
rule["regex"] = Regexp.new(element["pattern"]) if element.has_key?("pattern")
|
34
|
-
rule
|
35
|
-
end
|
30
|
+
@rewrite_rule = Fluent::RewriteRule.new(self, conf)
|
36
31
|
end
|
37
32
|
|
38
33
|
def start
|
@@ -43,7 +38,7 @@ module Fluent
|
|
43
38
|
super
|
44
39
|
end
|
45
40
|
|
46
|
-
def
|
41
|
+
def process(tag, es)
|
47
42
|
_tag = tag.clone
|
48
43
|
|
49
44
|
if @remove_prefix and
|
@@ -56,7 +51,7 @@ module Fluent
|
|
56
51
|
end
|
57
52
|
|
58
53
|
es.each do |time, record|
|
59
|
-
filtered_tag, record = rewrite(tag, record)
|
54
|
+
filtered_tag, record = @rewrite_rule.rewrite(tag, record)
|
60
55
|
if filtered_tag && record && _tag != filtered_tag
|
61
56
|
router.emit(filtered_tag, time, record)
|
62
57
|
else
|
@@ -65,58 +60,6 @@ module Fluent
|
|
65
60
|
end
|
66
61
|
end
|
67
62
|
end
|
68
|
-
|
69
|
-
chain.next
|
70
|
-
end
|
71
|
-
|
72
|
-
def rewrite(tag, record)
|
73
|
-
rules.each do |rule|
|
74
|
-
tag, record, last = apply_rule(rule, tag, record)
|
75
|
-
|
76
|
-
break if last
|
77
|
-
return if !tag && !record
|
78
|
-
end
|
79
|
-
|
80
|
-
[tag, record]
|
81
|
-
end
|
82
|
-
|
83
|
-
def apply_rule(rule, tag, record)
|
84
|
-
tag_prefix = tag && tag.length > 0 ? "." : ""
|
85
|
-
key = rule["key"]
|
86
|
-
pattern = rule["pattern"]
|
87
|
-
last = nil
|
88
|
-
|
89
|
-
return [tag, record] if !key || !record.has_key?(key)
|
90
|
-
return [tag, record] unless pattern
|
91
|
-
|
92
|
-
if matched = record[key].match(rule["regex"])
|
93
|
-
return if rule["ignore"]
|
94
|
-
|
95
|
-
if rule["replace"]
|
96
|
-
replace = rule["replace"]
|
97
|
-
record[key] = record[key].gsub(rule["regex"], replace)
|
98
|
-
end
|
99
|
-
|
100
|
-
if rule["append_to_tag"]
|
101
|
-
if rule["tag"]
|
102
|
-
tag += (tag_prefix + rule["tag"])
|
103
|
-
else
|
104
|
-
matched.captures.each do |m|
|
105
|
-
tag += (tag_prefix + "#{m}")
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
if rule["last"]
|
111
|
-
last = true
|
112
|
-
end
|
113
|
-
else
|
114
|
-
if rule["append_to_tag"] && rule["fallback"]
|
115
|
-
tag += (tag_prefix + rule["fallback"])
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
[tag, record, last]
|
120
63
|
end
|
121
64
|
end
|
122
65
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Fluent
|
2
|
+
class RewriteRule
|
3
|
+
attr_reader :rules
|
4
|
+
|
5
|
+
def initialize(plugin, conf)
|
6
|
+
@plugin = plugin
|
7
|
+
@rules = conf.elements.select {|element| element.name == 'rule' }.map do |element|
|
8
|
+
rule = {}
|
9
|
+
element.keys.each do |key|
|
10
|
+
# read and throw away to supress unread configuration warning
|
11
|
+
rule[key] = element[key]
|
12
|
+
end
|
13
|
+
rule["regex"] = Regexp.new(element["pattern"]) if element.has_key?("pattern")
|
14
|
+
rule
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def rewrite(tag=nil, record)
|
19
|
+
@rules.each do |rule|
|
20
|
+
tag, record, last = apply_rule(rule, tag, record)
|
21
|
+
|
22
|
+
break if last
|
23
|
+
if @plugin.is_a?(Fluent::Plugin::Output)
|
24
|
+
return if !tag && !record
|
25
|
+
else
|
26
|
+
return if !record
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
return [record] if not @plugin.is_a?(Fluent::Plugin::Output)
|
31
|
+
return [tag, record] if @plugin.is_a?(Fluent::Plugin::Output)
|
32
|
+
end
|
33
|
+
|
34
|
+
def apply_rule(rule, tag=nil, record)
|
35
|
+
tag_prefix = tag && tag.length > 0 ? "." : ""
|
36
|
+
key = rule["key"]
|
37
|
+
pattern = rule["pattern"]
|
38
|
+
last = nil
|
39
|
+
|
40
|
+
return [tag, record] if !key || !record.has_key?(key)
|
41
|
+
return [tag, record] unless pattern
|
42
|
+
|
43
|
+
if matched = record[key].match(rule["regex"])
|
44
|
+
return if rule["ignore"]
|
45
|
+
|
46
|
+
if rule["replace"]
|
47
|
+
replace = rule["replace"]
|
48
|
+
record[key] = record[key].gsub(rule["regex"], replace)
|
49
|
+
end
|
50
|
+
|
51
|
+
if rule["append_to_tag"] && @plugin.is_a?(Fluent::Plugin::Output)
|
52
|
+
if rule["tag"]
|
53
|
+
tag += (tag_prefix + rule["tag"])
|
54
|
+
else
|
55
|
+
matched.captures.each do |m|
|
56
|
+
tag += (tag_prefix + "#{m}")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
if rule["last"]
|
62
|
+
last = true
|
63
|
+
end
|
64
|
+
else
|
65
|
+
if rule["append_to_tag"] && rule["fallback"] && @plugin.is_a?(Fluent::Plugin::Output)
|
66
|
+
tag += (tag_prefix + rule["fallback"])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
return [tag, record, last]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,213 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'fluent/test/driver/filter'
|
3
|
+
|
4
|
+
class RewriteFilterTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
Fluent::Test.setup
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_driver(conf)
|
10
|
+
Fluent::Test::Driver::Filter.new(Fluent::Plugin::RewriteFilter).configure(conf)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_configure
|
14
|
+
d = create_driver(%[
|
15
|
+
<rule>
|
16
|
+
key foo
|
17
|
+
</rule>
|
18
|
+
<to_be_ignored>
|
19
|
+
key bar
|
20
|
+
</to_be_ignored>
|
21
|
+
<rule>
|
22
|
+
key baz
|
23
|
+
</rule>
|
24
|
+
])
|
25
|
+
|
26
|
+
assert_equal 2, d.instance.rewrite_rule.rules.size
|
27
|
+
end
|
28
|
+
|
29
|
+
class TestRewrite < self
|
30
|
+
def test_replace
|
31
|
+
d = create_driver(%[
|
32
|
+
<rule>
|
33
|
+
key path
|
34
|
+
pattern \\?.+$
|
35
|
+
replace
|
36
|
+
</rule>
|
37
|
+
])
|
38
|
+
|
39
|
+
assert_equal(
|
40
|
+
[ { "path" => "/foo" } ],
|
41
|
+
d.instance.rewrite_rule.rewrite({ "path" => "/foo?bar=1" })
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_replace_with_capture
|
46
|
+
d = create_driver(%[
|
47
|
+
<rule>
|
48
|
+
key path
|
49
|
+
pattern (/[^/]+)\\?([^=]+)=(\\d)
|
50
|
+
replace \\1/\\2/\\3
|
51
|
+
</rule>
|
52
|
+
])
|
53
|
+
|
54
|
+
assert_equal(
|
55
|
+
[ { "path" => "/foo/bar/1" } ],
|
56
|
+
d.instance.rewrite_rule.rewrite({ "path" => "/foo?bar=1" })
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class TestRewriteIgnore < self
|
62
|
+
def test_pattern
|
63
|
+
d = create_driver(%[
|
64
|
+
<rule>
|
65
|
+
key status
|
66
|
+
pattern ^500$
|
67
|
+
ignore true
|
68
|
+
</rule>
|
69
|
+
])
|
70
|
+
|
71
|
+
assert_equal(
|
72
|
+
nil,
|
73
|
+
d.instance.rewrite_rule.rewrite({ "status" => "500" })
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_negate_pattern
|
78
|
+
d = create_driver(%[
|
79
|
+
<rule>
|
80
|
+
key status
|
81
|
+
pattern ^(?!200)\\d+$
|
82
|
+
ignore true
|
83
|
+
</rule>
|
84
|
+
])
|
85
|
+
|
86
|
+
assert_equal(
|
87
|
+
[ { "status" => "200" } ],
|
88
|
+
d.instance.rewrite_rule.rewrite({ "status" => "200" })
|
89
|
+
)
|
90
|
+
%w[301 404 500].each do |status|
|
91
|
+
assert_equal(
|
92
|
+
nil,
|
93
|
+
d.instance.rewrite_rule.rewrite({ "status" => status })
|
94
|
+
)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_entire_ignore
|
99
|
+
d = create_driver(%[
|
100
|
+
<rule>
|
101
|
+
key flag
|
102
|
+
pattern ^$
|
103
|
+
ignore true
|
104
|
+
</rule>
|
105
|
+
])
|
106
|
+
|
107
|
+
assert_equal(
|
108
|
+
nil,
|
109
|
+
d.instance.rewrite_rule.rewrite({ "flag" => "" })
|
110
|
+
)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_last
|
115
|
+
d = create_driver(%[
|
116
|
+
<rule>
|
117
|
+
key path
|
118
|
+
pattern ^/foo$
|
119
|
+
replace /bar
|
120
|
+
last true
|
121
|
+
</rule>
|
122
|
+
<rule>
|
123
|
+
key path
|
124
|
+
pattern ^/bar$
|
125
|
+
replace /baz
|
126
|
+
</rule>
|
127
|
+
])
|
128
|
+
|
129
|
+
assert_equal(
|
130
|
+
[ { "path" => "/bar" } ],
|
131
|
+
d.instance.rewrite_rule.rewrite({ "path" => "/foo" })
|
132
|
+
)
|
133
|
+
assert_equal(
|
134
|
+
[ { "path" => "/baz" } ],
|
135
|
+
d.instance.rewrite_rule.rewrite({ "path" => "/bar" })
|
136
|
+
)
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_rewrite_rules
|
140
|
+
d = create_driver(%[
|
141
|
+
<rule>
|
142
|
+
key path
|
143
|
+
pattern \\?.+$
|
144
|
+
replace
|
145
|
+
</rule>
|
146
|
+
<rule>
|
147
|
+
key status
|
148
|
+
pattern ^500$
|
149
|
+
ignore true
|
150
|
+
</rule>
|
151
|
+
])
|
152
|
+
|
153
|
+
assert_equal(
|
154
|
+
[ { "path" => "/foo" } ],
|
155
|
+
d.instance.rewrite_rule.rewrite({ "path" => "/foo?bar=1" })
|
156
|
+
)
|
157
|
+
assert_equal(
|
158
|
+
[ { "path" => "/users/antipop" } ],
|
159
|
+
d.instance.rewrite_rule.rewrite({ "path" => "/users/antipop?hoge=1" })
|
160
|
+
)
|
161
|
+
assert_equal(
|
162
|
+
nil,
|
163
|
+
d.instance.rewrite_rule.rewrite({ "path" => "/foo?bar=1", "status" => "500" })
|
164
|
+
)
|
165
|
+
end
|
166
|
+
|
167
|
+
class TestFilter < self
|
168
|
+
def test_with_multiple_rules
|
169
|
+
d = create_driver(%[
|
170
|
+
<rule>
|
171
|
+
key path
|
172
|
+
pattern \\?.+$
|
173
|
+
replace
|
174
|
+
</rule>
|
175
|
+
<rule>
|
176
|
+
key status
|
177
|
+
pattern ^500$
|
178
|
+
ignore true
|
179
|
+
</rule>
|
180
|
+
])
|
181
|
+
|
182
|
+
d.run(default_tag: 'test') do
|
183
|
+
d.feed({ "path" => "/foo?bar=1" })
|
184
|
+
d.feed({ "path" => "/foo?bar=1", "status" => "500" })
|
185
|
+
d.feed({ "path" => "/users/antipop" })
|
186
|
+
d.feed({ "path" => "/users/kentaro" })
|
187
|
+
end
|
188
|
+
filtered = d.filtered
|
189
|
+
|
190
|
+
assert_equal 3, filtered.size
|
191
|
+
assert_equal([{ "path" => "/foo" }], filtered[0][1])
|
192
|
+
assert_equal([{ "path" => "/users/antipop" }], filtered[1][1]) # nothing to do
|
193
|
+
assert_equal([{ "path" => "/users/kentaro" }], filtered[2][1]) # nothing to do
|
194
|
+
end
|
195
|
+
|
196
|
+
def test_remove_query_params
|
197
|
+
d = create_driver(%[
|
198
|
+
<rule>
|
199
|
+
key path
|
200
|
+
pattern \\?.+$
|
201
|
+
replace
|
202
|
+
</rule>
|
203
|
+
])
|
204
|
+
d.run(default_tag: 'test') do
|
205
|
+
d.feed({ "path" => "/foo?bar=1" })
|
206
|
+
end
|
207
|
+
filtered = d.filtered
|
208
|
+
|
209
|
+
assert_equal 1, filtered.size
|
210
|
+
assert_equal([{ "path" => "/foo" }], filtered[0][1])
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'fluent/test/driver/output'
|
2
3
|
|
3
4
|
class RewriteOutputTest < Test::Unit::TestCase
|
4
5
|
def setup
|
5
6
|
Fluent::Test.setup
|
6
7
|
end
|
7
8
|
|
8
|
-
def create_driver(conf
|
9
|
-
Fluent::Test::
|
9
|
+
def create_driver(conf)
|
10
|
+
Fluent::Test::Driver::Output.new(Fluent::Plugin::RewriteOutput).configure(conf)
|
10
11
|
end
|
11
12
|
|
12
13
|
def test_configure
|
@@ -27,7 +28,7 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
27
28
|
|
28
29
|
assert_equal "test", d.instance.remove_prefix
|
29
30
|
assert_equal "filtered", d.instance.add_prefix
|
30
|
-
assert_equal 2, d.instance.rules.size
|
31
|
+
assert_equal 2, d.instance.rewrite_rule.rules.size
|
31
32
|
end
|
32
33
|
|
33
34
|
def test_rewrite_replace
|
@@ -41,7 +42,7 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
41
42
|
|
42
43
|
assert_equal(
|
43
44
|
[ "test", { "path" => "/foo" } ],
|
44
|
-
d1.instance.rewrite("test", { "path" => "/foo?bar=1" })
|
45
|
+
d1.instance.rewrite_rule.rewrite("test", { "path" => "/foo?bar=1" })
|
45
46
|
)
|
46
47
|
|
47
48
|
d2 = create_driver(%[
|
@@ -54,7 +55,7 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
54
55
|
|
55
56
|
assert_equal(
|
56
57
|
[ "test", { "path" => "/foo/bar/1" } ],
|
57
|
-
d2.instance.rewrite("test", { "path" => "/foo?bar=1" })
|
58
|
+
d2.instance.rewrite_rule.rewrite("test", { "path" => "/foo?bar=1" })
|
58
59
|
)
|
59
60
|
end
|
60
61
|
|
@@ -69,7 +70,7 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
69
70
|
|
70
71
|
assert_equal(
|
71
72
|
nil,
|
72
|
-
d1.instance.rewrite("test", { "status" => "500" })
|
73
|
+
d1.instance.rewrite_rule.rewrite("test", { "status" => "500" })
|
73
74
|
)
|
74
75
|
|
75
76
|
d2 = create_driver(%[
|
@@ -82,12 +83,12 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
82
83
|
|
83
84
|
assert_equal(
|
84
85
|
[ "test", { "status" => "200" } ],
|
85
|
-
d2.instance.rewrite("test", { "status" => "200" })
|
86
|
+
d2.instance.rewrite_rule.rewrite("test", { "status" => "200" })
|
86
87
|
)
|
87
88
|
%w[301 404 500].each do |status|
|
88
89
|
assert_equal(
|
89
90
|
nil,
|
90
|
-
d2.instance.rewrite("test", { "status" => status })
|
91
|
+
d2.instance.rewrite_rule.rewrite("test", { "status" => status })
|
91
92
|
)
|
92
93
|
end
|
93
94
|
|
@@ -101,7 +102,7 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
101
102
|
|
102
103
|
assert_equal(
|
103
104
|
nil,
|
104
|
-
d3.instance.rewrite("test", { "flag" => "" })
|
105
|
+
d3.instance.rewrite_rule.rewrite("test", { "flag" => "" })
|
105
106
|
)
|
106
107
|
end
|
107
108
|
|
@@ -116,11 +117,11 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
116
117
|
|
117
118
|
assert_equal(
|
118
119
|
[ "test.users", { "path" => "/users/antipop" } ],
|
119
|
-
d1.instance.rewrite("test", { "path" => "/users/antipop" })
|
120
|
+
d1.instance.rewrite_rule.rewrite("test", { "path" => "/users/antipop" })
|
120
121
|
)
|
121
122
|
assert_equal(
|
122
123
|
[ "test", { "path" => "/unmatched/path" } ],
|
123
|
-
d1.instance.rewrite("test", { "path" => "/unmatched/path" })
|
124
|
+
d1.instance.rewrite_rule.rewrite("test", { "path" => "/unmatched/path" })
|
124
125
|
)
|
125
126
|
|
126
127
|
d2 = create_driver(%[
|
@@ -134,11 +135,11 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
134
135
|
|
135
136
|
assert_equal(
|
136
137
|
[ "test.users", { "path" => "/users/antipop" } ],
|
137
|
-
d2.instance.rewrite("test", { "path" => "/users/antipop" })
|
138
|
+
d2.instance.rewrite_rule.rewrite("test", { "path" => "/users/antipop" })
|
138
139
|
)
|
139
140
|
assert_equal(
|
140
141
|
[ "test.others", { "path" => "/unmatched/path" } ],
|
141
|
-
d2.instance.rewrite("test", { "path" => "/unmatched/path" })
|
142
|
+
d2.instance.rewrite_rule.rewrite("test", { "path" => "/unmatched/path" })
|
142
143
|
)
|
143
144
|
|
144
145
|
d3 = create_driver(%[
|
@@ -152,11 +153,11 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
152
153
|
|
153
154
|
assert_equal(
|
154
155
|
[ "test.user", { "is_logged_in" => "1" } ],
|
155
|
-
d3.instance.rewrite("test", { "is_logged_in" => "1" })
|
156
|
+
d3.instance.rewrite_rule.rewrite("test", { "is_logged_in" => "1" })
|
156
157
|
)
|
157
158
|
assert_equal(
|
158
159
|
[ "test", { "is_logged_in" => "0" } ],
|
159
|
-
d3.instance.rewrite("test", { "is_logged_in" => "0" })
|
160
|
+
d3.instance.rewrite_rule.rewrite("test", { "is_logged_in" => "0" })
|
160
161
|
)
|
161
162
|
|
162
163
|
d4 = create_driver(%[
|
@@ -169,7 +170,7 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
169
170
|
|
170
171
|
assert_equal(
|
171
172
|
[ "test.users", { "path" => "/users/antipop" } ],
|
172
|
-
d4.instance.rewrite("test", { "path" => "/users/antipop" })
|
173
|
+
d4.instance.rewrite_rule.rewrite("test", { "path" => "/users/antipop" })
|
173
174
|
)
|
174
175
|
|
175
176
|
d5 = create_driver(%[
|
@@ -183,7 +184,7 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
183
184
|
|
184
185
|
assert_equal(
|
185
186
|
[ "test.user", { "is_logged_in" => "1" } ],
|
186
|
-
d5.instance.rewrite("test", { "is_logged_in" => "1" })
|
187
|
+
d5.instance.rewrite_rule.rewrite("test", { "is_logged_in" => "1" })
|
187
188
|
)
|
188
189
|
end
|
189
190
|
|
@@ -204,11 +205,11 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
204
205
|
|
205
206
|
assert_equal(
|
206
207
|
[ "test", { "path" => "/bar" } ],
|
207
|
-
d.instance.rewrite("test", { "path" => "/foo" })
|
208
|
+
d.instance.rewrite_rule.rewrite("test", { "path" => "/foo" })
|
208
209
|
)
|
209
210
|
assert_equal(
|
210
211
|
[ "test", { "path" => "/baz" } ],
|
211
|
-
d.instance.rewrite("test", { "path" => "/bar" })
|
212
|
+
d.instance.rewrite_rule.rewrite("test", { "path" => "/bar" })
|
212
213
|
)
|
213
214
|
end
|
214
215
|
|
@@ -234,15 +235,15 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
234
235
|
|
235
236
|
assert_equal(
|
236
237
|
[ "test.others", { "path" => "/foo" } ],
|
237
|
-
d.instance.rewrite("test", { "path" => "/foo?bar=1" })
|
238
|
+
d.instance.rewrite_rule.rewrite("test", { "path" => "/foo?bar=1" })
|
238
239
|
)
|
239
240
|
assert_equal(
|
240
241
|
[ "test.users", { "path" => "/users/antipop" } ],
|
241
|
-
d.instance.rewrite("test", { "path" => "/users/antipop?hoge=1" })
|
242
|
+
d.instance.rewrite_rule.rewrite("test", { "path" => "/users/antipop?hoge=1" })
|
242
243
|
)
|
243
244
|
assert_equal(
|
244
245
|
nil,
|
245
|
-
d.instance.rewrite("test", { "path" => "/foo?bar=1", "status" => "500" })
|
246
|
+
d.instance.rewrite_rule.rewrite("test", { "path" => "/foo?bar=1", "status" => "500" })
|
246
247
|
)
|
247
248
|
end
|
248
249
|
|
@@ -269,24 +270,24 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
269
270
|
</rule>
|
270
271
|
])
|
271
272
|
|
272
|
-
d1.run do
|
273
|
-
d1.
|
274
|
-
d1.
|
275
|
-
d1.
|
276
|
-
d1.
|
277
|
-
d1.
|
273
|
+
d1.run(default_tag: 'test') do
|
274
|
+
d1.feed({ "path" => "/foo?bar=1" })
|
275
|
+
d1.feed({ "path" => "/foo?bar=1", "status" => "500" })
|
276
|
+
d1.feed({ "path" => "/users/antipop" })
|
277
|
+
d1.feed({ "path" => "/users/kentaro" })
|
278
|
+
d1.feed({ "path" => "/entries/1" })
|
278
279
|
end
|
279
|
-
|
280
|
-
|
281
|
-
assert_equal 4,
|
282
|
-
assert_equal('filtered.others',
|
283
|
-
assert_equal({ "path" => "/foo" },
|
284
|
-
assert_equal('filtered.users',
|
285
|
-
assert_equal({ "path" => "/users/antipop" },
|
286
|
-
assert_equal('filtered.users',
|
287
|
-
assert_equal({ "path" => "/users/kentaro" },
|
288
|
-
assert_equal('filtered.entries',
|
289
|
-
assert_equal({ "path" => "/entries/1" },
|
280
|
+
events = d1.events
|
281
|
+
|
282
|
+
assert_equal 4, events.size
|
283
|
+
assert_equal('filtered.others', events[0][0])
|
284
|
+
assert_equal({ "path" => "/foo" }, events[0][2])
|
285
|
+
assert_equal('filtered.users', events[1][0])
|
286
|
+
assert_equal({ "path" => "/users/antipop" }, events[1][2])
|
287
|
+
assert_equal('filtered.users', events[2][0])
|
288
|
+
assert_equal({ "path" => "/users/kentaro" }, events[2][2])
|
289
|
+
assert_equal('filtered.entries', events[3][0])
|
290
|
+
assert_equal({ "path" => "/entries/1" }, events[3][2])
|
290
291
|
|
291
292
|
d2 = create_driver(%[
|
292
293
|
add_prefix filtered
|
@@ -297,14 +298,14 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
297
298
|
replace
|
298
299
|
</rule>
|
299
300
|
])
|
300
|
-
d2.run do
|
301
|
-
d2.
|
301
|
+
d2.run(default_tag: 'test') do
|
302
|
+
d2.feed({ "path" => "/foo?bar=1" })
|
302
303
|
end
|
303
|
-
|
304
|
+
events = d2.events
|
304
305
|
|
305
|
-
assert_equal 1,
|
306
|
-
assert_equal('filtered.test',
|
307
|
-
assert_equal({ "path" => "/foo" },
|
306
|
+
assert_equal 1, events.size
|
307
|
+
assert_equal('filtered.test', events[0][0])
|
308
|
+
assert_equal({ "path" => "/foo" }, events[0][2])
|
308
309
|
|
309
310
|
# Test for not emit if the tag has not changed.
|
310
311
|
d3 = create_driver(%[
|
@@ -314,11 +315,11 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
314
315
|
replace
|
315
316
|
</rule>
|
316
317
|
])
|
317
|
-
d3.run do
|
318
|
-
d3.
|
318
|
+
d3.run(default_tag: 'test') do
|
319
|
+
d3.feed({ "path" => "/foo?bar=1" })
|
319
320
|
end
|
320
321
|
|
321
|
-
assert_equal 0, d3.
|
322
|
+
assert_equal 0, d3.events.size
|
322
323
|
|
323
324
|
# Emit message if the rewrite tag rules have been defined, even if (add|remove)_prefix option is not set.
|
324
325
|
d4 = create_driver(%[
|
@@ -328,13 +329,13 @@ class RewriteOutputTest < Test::Unit::TestCase
|
|
328
329
|
append_to_tag true
|
329
330
|
</rule>
|
330
331
|
])
|
331
|
-
d4.run do
|
332
|
-
d4.
|
332
|
+
d4.run(default_tag: 'test') do
|
333
|
+
d4.feed({ "path" => "/users/studio3104" })
|
333
334
|
end
|
334
|
-
|
335
|
+
events = d4.events
|
335
336
|
|
336
|
-
assert_equal 1,
|
337
|
-
assert_equal('test.users',
|
338
|
-
assert_equal({ "path" => "/users/studio3104" },
|
337
|
+
assert_equal 1, events.size
|
338
|
+
assert_equal('test.users', events[0][0])
|
339
|
+
assert_equal({ "path" => "/users/studio3104" }, events[0][2])
|
339
340
|
end
|
340
341
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-rewrite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kentaro Kuribayashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -39,19 +39,39 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: appraisal
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
-
type: :
|
48
|
+
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: fluentd
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.14.8
|
62
|
+
- - "<"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '2'
|
65
|
+
type: :runtime
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 0.14.8
|
72
|
+
- - "<"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '2'
|
55
75
|
description: Fluentd plugin to rewrite tags/values along with pattern matching and
|
56
76
|
re-emit them.
|
57
77
|
email:
|
@@ -61,12 +81,18 @@ extensions: []
|
|
61
81
|
extra_rdoc_files: []
|
62
82
|
files:
|
63
83
|
- ".gitignore"
|
84
|
+
- ".travis.yml"
|
85
|
+
- Appraisals
|
64
86
|
- Gemfile
|
65
87
|
- LICENSE
|
66
88
|
- README.md
|
67
89
|
- Rakefile
|
68
90
|
- fluent-plugin-rewrite.gemspec
|
91
|
+
- gemfiles/fluentd_0.14.gemfile
|
92
|
+
- lib/fluent/plugin/filter_rewrite.rb
|
69
93
|
- lib/fluent/plugin/out_rewrite.rb
|
94
|
+
- lib/fluent/plugin/rewrite_rule.rb
|
95
|
+
- test/plugin/test_filter_rewrite.rb
|
70
96
|
- test/plugin/test_out_rewrite.rb
|
71
97
|
- test/test_helper.rb
|
72
98
|
homepage: http://github.com/kentaro/fluent-plugin-rewrite
|
@@ -89,11 +115,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
115
|
version: '0'
|
90
116
|
requirements: []
|
91
117
|
rubyforge_project:
|
92
|
-
rubygems_version: 2.4.5
|
118
|
+
rubygems_version: 2.4.5.1
|
93
119
|
signing_key:
|
94
120
|
specification_version: 4
|
95
121
|
summary: Fluentd plugin to rewrite tags/values along with pattern matching and re-emit
|
96
122
|
them.
|
97
123
|
test_files:
|
124
|
+
- test/plugin/test_filter_rewrite.rb
|
98
125
|
- test/plugin/test_out_rewrite.rb
|
99
126
|
- test/test_helper.rb
|