fluent-plugin-rewrite-tag-filter 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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
- Format
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\.google\.com$ site.GoogleMap
41
- rewriterule3 domain ^news\.google\.com$ site.GoogleNews
42
- rewriterule4 domain ^mail\.google\.com$ site.GoogleMail
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.6
69
+ MongoDB shell version: 2.2.0
64
70
  > use apache_access
65
71
  switched to db apache_access
66
72
  > show collections
67
- GoogleMap
68
- GoogleNews
69
- GoogleMail
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 "Mac OS X" clear
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.7"
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}):" + invalids.join(",")
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}"].split(/^(\S+) "?([\S\s]+?)"? (\S+)$/).reject(&:empty?)
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 " + "rewriterule#{i} " + conf["rewriterule#{i}"].inspect
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" + @rewriterules.inspect
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" + @rewriterules.inspect
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 "Mac OS X" agent.MacOSX
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 3, emits.length
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.7
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-07-28 00:00:00.000000000 Z
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: &20535320 !ruby/object:Gem::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: *20535320
24
+ version_requirements: *20127680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: fluentd
27
- requirement: &20534460 !ruby/object:Gem::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: *20534460
35
+ version_requirements: *20126860
36
36
  description:
37
37
  email:
38
38
  - y.ken.studio@gmail.com