fluent-plugin-retag 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ vendor
19
+ *~
20
+ \#*
21
+ .\#*
22
+ *.swp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-retag.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2013- Masahiro Yamauchi
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # fluent-plugin-retag
2
+
3
+ ## Overview
4
+
5
+ Output plugin only retagging.
6
+
7
+ * simple retag
8
+ * remove tag prefix
9
+ * add tag prefix
10
+
11
+ ## Configuration
12
+
13
+ ### Simple Configuration
14
+
15
+ To retag foo.bar to hoge.fuga:
16
+
17
+ <match foo.bar>
18
+ type retag
19
+ tag hoge.fuga
20
+ </match>
21
+
22
+ To retag foo.bar.** to xyz.bar.**:
23
+
24
+ <match foo.bar>
25
+ type retag
26
+ remove_prefix foo
27
+ add_prefix xyz
28
+ </match>
29
+
30
+ ### Useful Configuration
31
+
32
+ If you want to use branch condition, it is useful to use out_copy with fluent-plugin-retag.
33
+
34
+ <match foo.bar.**>
35
+ type copy
36
+ <store>
37
+ type retag
38
+ add_prefix copied
39
+ </store>
40
+ <store>
41
+ ...
42
+ </store>
43
+ </match>
44
+
45
+ <match copied.foo.bar.**>
46
+ ...
47
+ </match>
48
+
49
+ ## Copyright
50
+
51
+ * Copyright (c) 2013- Masahiro Yamauchi
52
+ * License
53
+ * Apache License, Version 2.0
54
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+ Rake::TestTask.new(:test) do |test|
4
+ test.libs << 'lib' << 'test'
5
+ test.pattern = 'test/**/test_*.rb'
6
+ test.verbose = true
7
+ end
8
+
9
+ task :default => :test
10
+
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "fluent-plugin-retag"
7
+ gem.version = "0.0.1"
8
+ gem.authors = ["Masahiro Yamauchi"]
9
+ gem.email = ["sgt.yamauchi@gmail.com"]
10
+ gem.description = %q{Output filter plugin to retag}
11
+ gem.summary = %q{Output filter plugin to retag}
12
+ gem.homepage = "https://github.com/algas/fluent-plugin-retag"
13
+
14
+ gem.rubyforge_project = "fluent-plugin-retag"
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+ gem.add_development_dependency "fluentd"
20
+ gem.add_runtime_dependency "fluentd"
21
+ end
@@ -0,0 +1,48 @@
1
+ class Fluent::RetagOutput < Fluent::Output
2
+ Fluent::Plugin.register_output('retag', self)
3
+
4
+ config_param :tag, :string, :default => nil
5
+ config_param :remove_prefix, :string, :default => nil
6
+ config_param :add_prefix, :string, :default => nil
7
+
8
+ def configure(conf)
9
+ super
10
+ if not @tag and not @remove_prefix and not @add_prefix
11
+ raise Fluent::ConfigError, "missing both of remove_prefix and add_prefix"
12
+ end
13
+ if @tag and (@remove_prefix or @add_prefix)
14
+ raise Fluent::ConfigError, "both of tag and remove_prefix/add_prefix must not be specified"
15
+ end
16
+ if @remove_prefix
17
+ @removed_prefix_string = @remove_prefix + '.'
18
+ @removed_length = @removed_prefix_string.length
19
+ end
20
+ if @add_prefix
21
+ @added_prefix_string = @add_prefix + '.'
22
+ end
23
+ end
24
+
25
+ def emit(tag, es, chain)
26
+ tag = if @tag
27
+ @tag
28
+ else
29
+ if @remove_prefix and
30
+ ( (tag.start_with?(@removed_prefix_string) and tag.length > @removed_length) or tag == @remove_prefix)
31
+ tag = tag[@removed_length..-1]
32
+ end
33
+ if @add_prefix
34
+ tag = if tag and tag.length > 0
35
+ @added_prefix_string + tag
36
+ else
37
+ @add_prefix
38
+ end
39
+ end
40
+ tag
41
+ end
42
+ es.each do |time,record|
43
+ Fluent::Engine.emit(tag, time, record)
44
+ end
45
+ chain.next
46
+ end
47
+ end
48
+
data/test/helper.rb ADDED
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
14
+ require 'fluent/test'
15
+ unless ENV.has_key?('VERBOSE')
16
+ nulllogger = Object.new
17
+ nulllogger.instance_eval {|obj|
18
+ def method_missing(method, *args)
19
+ # pass
20
+ end
21
+ }
22
+ $log = nulllogger
23
+ end
24
+
25
+ require 'fluent/plugin/out_retag'
26
+
27
+ class Test::Unit::TestCase
28
+ end
29
+
@@ -0,0 +1,96 @@
1
+ require 'helper'
2
+
3
+ class RetagOutputTest < Test::Unit::TestCase
4
+ def setup
5
+ Fluent::Test.setup
6
+ end
7
+
8
+ CONFIG = %[
9
+ tag hoge
10
+ ]
11
+ CONFIG2 = %[
12
+ remove_prefix foo
13
+ ]
14
+ CONFIG3 = %[
15
+ remove_prefix foo
16
+ add_prefix head
17
+ ]
18
+
19
+ def create_driver(conf = CONFIG, tag='test')
20
+ Fluent::Test::OutputTestDriver.new(Fluent::RetagOutput, tag).configure(conf)
21
+ end
22
+
23
+ def test_configure
24
+ assert_raise(Fluent::ConfigError) {
25
+ create_driver ('')
26
+ }
27
+ assert_raise(Fluent::ConfigError) {
28
+ create_driver %[
29
+ tag a
30
+ remove_prefix b
31
+ ]
32
+ }
33
+ assert_raise(Fluent::ConfigError) {
34
+ create_driver %[
35
+ tag a
36
+ add_prefix c
37
+ ]
38
+ }
39
+ d1 = create_driver %[
40
+ tag a
41
+ ]
42
+ d1.instance.inspect
43
+ assert_equal 'a', d1.instance.tag
44
+ d2 = create_driver %[
45
+ remove_prefix b
46
+ add_prefix c
47
+ ]
48
+ d2.instance.inspect
49
+ assert_equal 'b', d2.instance.remove_prefix
50
+ assert_equal 'c', d2.instance.add_prefix
51
+ end
52
+
53
+ def test_emit
54
+ d = create_driver(CONFIG, 'foo.bar')
55
+ time = Time.parse('2011-03-11 14:46:01').to_i
56
+ d.run do
57
+ d.emit({'a' => 'b'})
58
+ d.emit({'c' => 'd'})
59
+ end
60
+ emits = d.emits
61
+ assert_equal 2, emits.length
62
+ p emits[0]
63
+ assert_equal 'hoge', emits[0][0]
64
+ assert_equal 'b', emits[0][2]['a']
65
+ end
66
+
67
+ def test_emit2
68
+ d = create_driver(CONFIG2, 'foo.bar')
69
+ time = Time.parse('2011-03-11 14:46:01').to_i
70
+ d.run do
71
+ d.emit({'a' => 'b'})
72
+ d.emit({'c' => 'd'})
73
+ end
74
+ emits = d.emits
75
+ assert_equal 2, emits.length
76
+ p emits[0]
77
+ assert_equal 'bar', emits[0][0]
78
+ assert_equal 'b', emits[0][2]['a']
79
+ end
80
+
81
+ def test_emit3
82
+ d = create_driver(CONFIG3, 'foo.bar')
83
+ time = Time.parse('2011-03-11 14:46:01').to_i
84
+ d.run do
85
+ d.emit({'a' => 'b'})
86
+ d.emit({'c' => 'd'})
87
+ end
88
+ emits = d.emits
89
+ assert_equal 2, emits.length
90
+ p emits[0]
91
+ assert_equal 'head.bar', emits[0][0]
92
+ assert_equal 'b', emits[0][2]['a']
93
+ end
94
+
95
+ end
96
+
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-retag
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Masahiro Yamauchi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fluentd
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: fluentd
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Output filter plugin to retag
47
+ email:
48
+ - sgt.yamauchi@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - LICENSE.txt
56
+ - README.md
57
+ - Rakefile
58
+ - fluent-plugin-retag.gemspec
59
+ - lib/fluent/plugin/out_retag.rb
60
+ - test/helper.rb
61
+ - test/plugin/test_out_retag.rb
62
+ homepage: https://github.com/algas/fluent-plugin-retag
63
+ licenses: []
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project: fluent-plugin-retag
82
+ rubygems_version: 1.8.23
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Output filter plugin to retag
86
+ test_files:
87
+ - test/helper.rb
88
+ - test/plugin/test_out_retag.rb