fluent-plugin-rewrite-tag-filter 0.0.7 → 0.0.8
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.
data/README.rdoc
CHANGED
@@ -14,13 +14,17 @@ user-agent, and request-uri and so on with regular expression.
|
|
14
14
|
gem install fluent-plugin-rewrite-tag-filter
|
15
15
|
|
16
16
|
# td-agent user
|
17
|
-
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-rewrite-tag-filter
|
17
|
+
/usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-rewrite-tag-filter
|
18
18
|
|
19
19
|
== Configuration
|
20
20
|
|
21
|
-
|
21
|
+
Syntax
|
22
22
|
|
23
23
|
rewruterule<num:1-200> <attribute> <regex_pattern> <new_tag>
|
24
|
+
|
25
|
+
# Option: Capitalize every matched regex backreference (ex: $1, $2).
|
26
|
+
# It has described on usage section below.
|
27
|
+
capitalize_regex_backreference <default:no>
|
24
28
|
|
25
29
|
Usage
|
26
30
|
|
@@ -36,10 +40,12 @@ Usage
|
|
36
40
|
|
37
41
|
<match td.apache.access>
|
38
42
|
type rewrite_tag_filter
|
43
|
+
capitalize_regex_backreference yes
|
39
44
|
rewriterule1 path \.(gif|jpe?g|png|pdf|zip)$ clear
|
40
|
-
rewriterule2 domain ^maps\.
|
41
|
-
rewriterule3 domain ^news\.
|
42
|
-
|
45
|
+
rewriterule2 domain ^maps\.example\.com$ site.ExampleMaps
|
46
|
+
rewriterule3 domain ^news\.example\.com$ site.ExampleNews
|
47
|
+
# "site.$2$1" to be "site.ExampleMail" by capitalize_regex_backreference option.
|
48
|
+
rewriterule4 domain ^(mail)\.(example)\.com$ site.$2$1
|
43
49
|
rewriterule5 domain .+ site.unmatched
|
44
50
|
</match>
|
45
51
|
|
@@ -60,13 +66,13 @@ Usage
|
|
60
66
|
Result
|
61
67
|
|
62
68
|
$ mongo
|
63
|
-
MongoDB shell version: 2.0
|
69
|
+
MongoDB shell version: 2.2.0
|
64
70
|
> use apache_access
|
65
71
|
switched to db apache_access
|
66
72
|
> show collections
|
67
|
-
|
68
|
-
|
69
|
-
|
73
|
+
ExampleMaps
|
74
|
+
ExampleNews
|
75
|
+
ExampleMail
|
70
76
|
unmatched
|
71
77
|
|
72
78
|
== Example
|
data/example2.conf
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
rewriterule1 path ^/(img|css|js|static|assets)/ clear
|
30
30
|
rewriterule2 status ^(?!200)$ clear
|
31
31
|
rewriterule3 method ^(?!GET)$ clear
|
32
|
-
rewriterule4 agent
|
32
|
+
rewriterule4 agent Mac\sOS\sX clear
|
33
33
|
rewriterule5 agent (spider|bot|crawler|\+http\:) clear
|
34
34
|
rewriterule6 path ^/(admin|api|backend) site.GoogleMap.backend
|
35
35
|
rewriterule7 path .+ site.GoogleMap.front
|
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "fluent-plugin-rewrite-tag-filter"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.8"
|
7
7
|
s.authors = ["Kentaro Yoshida"]
|
8
8
|
s.email = ["y.ken.studio@gmail.com"]
|
9
9
|
s.homepage = "https://github.com/y-ken/fluent-plugin-rewrite-tag-filter"
|
@@ -7,6 +7,7 @@ class Fluent::RewriteTagFilterOutput < Fluent::Output
|
|
7
7
|
(2..PATTERN_MAX_NUM).each do |i|
|
8
8
|
config_param ('rewriterule' + i.to_s).to_sym, :string, :default => nil # NAME REGEXP
|
9
9
|
end
|
10
|
+
config_param :capitalize_regex_backreference, :bool, :default => false
|
10
11
|
|
11
12
|
def configure(conf)
|
12
13
|
super
|
@@ -16,23 +17,24 @@ class Fluent::RewriteTagFilterOutput < Fluent::Output
|
|
16
17
|
|
17
18
|
invalids = conf.keys.select{|k| k =~ /^rewriterule(\d+)$/}.select{|arg| arg =~ /^rewriterule(\d+)/ and not (1..PATTERN_MAX_NUM).include?($1.to_i)}
|
18
19
|
if invalids.size > 0
|
19
|
-
$log.warn "invalid number rewriterules (valid rewriterule number:1-{PATTERN_MAX_NUM}):
|
20
|
+
$log.warn "invalid number rewriterules (valid rewriterule number:1-{PATTERN_MAX_NUM}): #{invalids.join(",")}"
|
20
21
|
end
|
21
22
|
(1..PATTERN_MAX_NUM).each do |i|
|
22
23
|
next unless conf["rewriterule#{i}"]
|
23
|
-
rewritekey,regexp,rewritetag = conf["rewriterule#{i}"].
|
24
|
+
rewritekey,regexp,rewritetag = conf["rewriterule#{i}"].match(/([^ ]+)\s(.+)\s([^ ]+)/).captures
|
24
25
|
unless regexp != nil && rewritetag != nil
|
25
|
-
raise Fluent::ConfigError, "missing values at
|
26
|
+
raise Fluent::ConfigError, "missing values at rewriterule#{i} " + conf["rewriterule#{i}"].inspect
|
26
27
|
end
|
27
28
|
@rewriterules.push([i, rewritekey, Regexp.new(regexp), rewritetag])
|
28
29
|
rewriterule_names.push(rewritekey + regexp)
|
30
|
+
$log.info "register rewrite_tag_filter rule: #{@rewriterules.last}"
|
29
31
|
end
|
30
32
|
rewriterule_index_list = conf.keys.select{|s| s =~ /^rewriterule\d$/}.map{|v| (/^rewriterule(\d)$/.match(v))[1].to_i}
|
31
33
|
unless rewriterule_index_list.reduce(true){|v,i| v and @rewriterules[i - 1]}
|
32
|
-
raise Fluent::ConfigError, "jump of rewriterule index found
|
34
|
+
raise Fluent::ConfigError, "jump of rewriterule index found #{@rewriterules.inspect}"
|
33
35
|
end
|
34
36
|
unless @rewriterules.length == rewriterule_names.uniq.length
|
35
|
-
raise Fluent::ConfigError, "duplicated rewriterules found
|
37
|
+
raise Fluent::ConfigError, "duplicated rewriterules found #{@rewriterules.inspect}"
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
@@ -45,6 +47,9 @@ class Fluent::RewriteTagFilterOutput < Fluent::Output
|
|
45
47
|
if (regexp && regexp.match(rewritevalue))
|
46
48
|
rewrite = true
|
47
49
|
tag = rewritetag
|
50
|
+
if rewritetag.include?('$')
|
51
|
+
tag = rewritetag.gsub(/\$\d+/, map_regex_table($~.captures))
|
52
|
+
end
|
48
53
|
break
|
49
54
|
end
|
50
55
|
end
|
@@ -53,5 +58,15 @@ class Fluent::RewriteTagFilterOutput < Fluent::Output
|
|
53
58
|
|
54
59
|
chain.next
|
55
60
|
end
|
61
|
+
|
62
|
+
def map_regex_table(elements)
|
63
|
+
hash_table = Hash.new
|
64
|
+
index = 1
|
65
|
+
elements.each do |value|
|
66
|
+
hash_table["$#{index}"] = @capitalize_regex_backreference ? value.capitalize : value
|
67
|
+
index += 1
|
68
|
+
end
|
69
|
+
return hash_table
|
70
|
+
end
|
56
71
|
end
|
57
72
|
|
@@ -4,11 +4,20 @@ class RewriteTagFilterOutputTest < Test::Unit::TestCase
|
|
4
4
|
def setup
|
5
5
|
Fluent::Test.setup
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
CONFIG = %[
|
9
9
|
rewriterule1 domain ^www\.google\.com$ site.Google
|
10
10
|
rewriterule2 domain ^news\.google\.com$ site.GoogleNews
|
11
|
-
rewriterule3 agent
|
11
|
+
rewriterule3 agent Mac\sOS\sX agent.MacOSX
|
12
|
+
rewriterule4 agent (Googlebot|CustomBot)-([a-zA-Z]+) agent.$1-$2
|
13
|
+
]
|
14
|
+
|
15
|
+
CONFIG2 = %[
|
16
|
+
capitalize_regex_backreference yes
|
17
|
+
rewriterule1 domain ^www\.google\.com$ site.Google
|
18
|
+
rewriterule2 domain ^(news)\.(google)\.com$ site.$2$1
|
19
|
+
rewriterule3 agent Mac\sOS\sX agent.MacOSX
|
20
|
+
rewriterule4 agent (Googlebot|CustomBot)-([a-zA-Z]+) agent.$1-$2
|
12
21
|
]
|
13
22
|
|
14
23
|
def create_driver(conf=CONFIG,tag='test')
|
@@ -35,13 +44,41 @@ class RewriteTagFilterOutputTest < Test::Unit::TestCase
|
|
35
44
|
d1.emit({'domain' => 'www.google.com', 'path' => '/foo/bar?key=value', 'agent' => 'Googlebot', 'response_time' => 1000000})
|
36
45
|
d1.emit({'domain' => 'news.google.com', 'path' => '/', 'agent' => 'Googlebot-Mobile', 'response_time' => 900000})
|
37
46
|
d1.emit({'domain' => 'map.google.com', 'path' => '/', 'agent' => 'Macintosh; Intel Mac OS X 10_7_4', 'response_time' => 900000})
|
47
|
+
d1.emit({'domain' => 'labs.google.com', 'path' => '/', 'agent' => 'Mozilla/5.0 Googlebot-FooBar/2.1', 'response_time' => 900000})
|
48
|
+
end
|
49
|
+
emits = d1.emits
|
50
|
+
assert_equal 4, emits.length
|
51
|
+
p emits[0]
|
52
|
+
assert_equal 'site.Google', emits[0][0] # tag
|
53
|
+
p emits[1]
|
54
|
+
assert_equal 'site.GoogleNews', emits[1][0] # tag
|
55
|
+
assert_equal 'news.google.com', emits[1][2]['domain']
|
56
|
+
p emits[2]
|
57
|
+
assert_equal 'agent.MacOSX', emits[2][0] #tag
|
58
|
+
p emits[3]
|
59
|
+
assert_equal 'agent.Googlebot-FooBar', emits[3][0] #tag
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_emit2
|
63
|
+
d1 = create_driver(CONFIG2, 'input.access')
|
64
|
+
time = Time.parse("2012-01-02 13:14:15").to_i
|
65
|
+
d1.run do
|
66
|
+
d1.emit({'domain' => 'www.google.com', 'path' => '/foo/bar?key=value', 'agent' => 'Googlebot', 'response_time' => 1000000})
|
67
|
+
d1.emit({'domain' => 'news.google.com', 'path' => '/', 'agent' => 'Googlebot-Mobile', 'response_time' => 900000})
|
68
|
+
d1.emit({'domain' => 'map.google.com', 'path' => '/', 'agent' => 'Macintosh; Intel Mac OS X 10_7_4', 'response_time' => 900000})
|
69
|
+
d1.emit({'domain' => 'labs.google.com', 'path' => '/', 'agent' => 'Mozilla/5.0 Googlebot-FooBar/2.1', 'response_time' => 900000})
|
38
70
|
end
|
39
71
|
emits = d1.emits
|
40
|
-
assert_equal
|
72
|
+
assert_equal 4, emits.length
|
73
|
+
p emits[0]
|
41
74
|
assert_equal 'site.Google', emits[0][0] # tag
|
75
|
+
p emits[1]
|
42
76
|
assert_equal 'site.GoogleNews', emits[1][0] # tag
|
43
77
|
assert_equal 'news.google.com', emits[1][2]['domain']
|
78
|
+
p emits[2]
|
44
79
|
assert_equal 'agent.MacOSX', emits[2][0] #tag
|
80
|
+
p emits[3]
|
81
|
+
assert_equal 'agent.Googlebot-Foobar', emits[3][0] #tag
|
45
82
|
end
|
46
83
|
end
|
47
84
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-rewrite-tag-filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|
16
|
-
requirement: &
|
16
|
+
requirement: &20127680 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *20127680
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: fluentd
|
27
|
-
requirement: &
|
27
|
+
requirement: &20126860 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *20126860
|
36
36
|
description:
|
37
37
|
email:
|
38
38
|
- y.ken.studio@gmail.com
|