fluent-plugin-rewrite-tag-filter 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -22,7 +22,7 @@ user-agent, request-uri, regex-backreference and so on with regular expression.
22
22
 
23
23
  rewruterule<num:1-200> <attribute> <regex_pattern> <new_tag>
24
24
 
25
- # Capitalize every matched regex backreference. (ex: $1, $2)
25
+ # Optional: Capitalize every matched regex backreference. (ex: $1, $2)
26
26
  capitalize_regex_backreference <yes/no(default)>
27
27
 
28
28
  === Usage
@@ -87,6 +87,15 @@ On starting td-agent, Logging supported like below.
87
87
  2012-09-16 18:10:51 +0900: adding rewrite_tag_filter rule: [4, "domain", /^(mail)\.(example)\.com$/, "site.$2$1"]
88
88
  2012-09-16 18:10:51 +0900: adding rewrite_tag_filter rule: [5, "domain", /.+/, "site.unmatched"]
89
89
 
90
+ === Tag placeholder
91
+
92
+ Supporing these placeholder for rewrite tag.
93
+
94
+ * ${hostname}
95
+ * __HOSTNAME__
96
+ * ${tag}
97
+ * __TAG__
98
+
90
99
  == Example
91
100
 
92
101
  - Example1: how to analyze response_time, response_code and user_agent for each virtual domain websites.
@@ -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 = "1.0.0"
6
+ s.version = "1.1.0"
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"
@@ -14,6 +14,7 @@ class Fluent::RewriteTagFilterOutput < Fluent::Output
14
14
 
15
15
  @rewriterules = []
16
16
  rewriterule_names = []
17
+ @hostname = `hostname`.chomp
17
18
 
18
19
  invalids = conf.keys.select{|k| k =~ /^rewriterule(\d+)$/}.select{|arg| arg =~ /^rewriterule(\d+)/ and not (1..PATTERN_MAX_NUM).include?($1.to_i)}
19
20
  if invalids.size > 0
@@ -39,18 +40,17 @@ class Fluent::RewriteTagFilterOutput < Fluent::Output
39
40
  end
40
41
 
41
42
  def emit(tag, es, chain)
43
+ placeholder = get_placeholder(tag)
42
44
  es.each do |time,record|
43
45
  rewrite = false
44
46
  @rewriterules.each do |index, rewritekey, regexp, rewritetag|
45
47
  rewritevalue = record[rewritekey]
46
48
  next if rewritevalue.nil?
47
49
  next unless (regexp && regexp.match(rewritevalue))
50
+ backreference_table = map_regex_table($~.captures)
48
51
  rewrite = true
49
- tag = if rewritetag.include?('$')
50
- rewritetag.gsub(/\$\d+/, map_regex_table($~.captures))
51
- else
52
- rewritetag
53
- end
52
+ rewritetag.gsub!(/(\${[a-z]+}|__[A-Z]+__)/, placeholder)
53
+ tag = rewritetag.gsub(/\$\d+/, backreference_table)
54
54
  break
55
55
  end
56
56
  Fluent::Engine.emit(tag, time, record) if (rewrite)
@@ -76,5 +76,14 @@ class Fluent::RewriteTagFilterOutput < Fluent::Output
76
76
  end
77
77
  return hash_table
78
78
  end
79
+
80
+ def get_placeholder(tag)
81
+ return {
82
+ '__HOSTNAME__' => @hostname,
83
+ '${hostname}' => @hostname,
84
+ '__TAG__' => tag,
85
+ '${tag}' => tag,
86
+ }
87
+ end
79
88
  end
80
89
 
@@ -10,6 +10,7 @@ class RewriteTagFilterOutputTest < Test::Unit::TestCase
10
10
  rewriterule2 domain ^news\.google\.com$ site.GoogleNews
11
11
  rewriterule3 agent .* Mac OS X .* agent.MacOSX
12
12
  rewriterule4 agent (Googlebot|CustomBot)-([a-zA-Z]+) agent.$1-$2
13
+ rewriterule5 domain ^(tagtest)\.google\.com$ site.${tag}.$1
13
14
  ]
14
15
 
15
16
  # aggresive test
@@ -48,9 +49,10 @@ class RewriteTagFilterOutputTest < Test::Unit::TestCase
48
49
  d1.emit({'domain' => 'news.google.com', 'path' => '/', 'agent' => 'Googlebot-Mobile', 'response_time' => 900000})
49
50
  d1.emit({'domain' => 'map.google.com', 'path' => '/', 'agent' => 'Macintosh; Intel Mac OS X 10_7_4', 'response_time' => 900000})
50
51
  d1.emit({'domain' => 'labs.google.com', 'path' => '/', 'agent' => 'Mozilla/5.0 Googlebot-FooBar/2.1', 'response_time' => 900000})
52
+ d1.emit({'domain' => 'tagtest.google.com', 'path' => '/', 'agent' => 'Googlebot', 'response_time' => 900000})
51
53
  end
52
54
  emits = d1.emits
53
- assert_equal 4, emits.length
55
+ assert_equal 5, emits.length
54
56
  p emits[0]
55
57
  assert_equal 'site.Google', emits[0][0] # tag
56
58
  p emits[1]
@@ -60,6 +62,8 @@ class RewriteTagFilterOutputTest < Test::Unit::TestCase
60
62
  assert_equal 'agent.MacOSX', emits[2][0] #tag
61
63
  p emits[3]
62
64
  assert_equal 'agent.Googlebot-FooBar', emits[3][0] #tag
65
+ p emits[4]
66
+ assert_equal 'site.input.access.tagtest', emits[4][0] #tag
63
67
  end
64
68
 
65
69
  def test_emit2
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: 1.0.0
4
+ version: 1.1.0
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-09-18 00:00:00.000000000 Z
12
+ date: 2012-11-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
16
- requirement: &11833100 !ruby/object:Gem::Requirement
16
+ requirement: &11336200 !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: *11833100
24
+ version_requirements: *11336200
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: fluentd
27
- requirement: &11832240 !ruby/object:Gem::Requirement
27
+ requirement: &11335760 !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: *11832240
35
+ version_requirements: *11335760
36
36
  description:
37
37
  email:
38
38
  - y.ken.studio@gmail.com