fluent-plugin-rewrite-tag-filter 1.0.0 → 1.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.
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