fluent-plugin-map 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-eval-filter.gemspec
4
+ gemspec
data/README.markdown ADDED
@@ -0,0 +1,32 @@
1
+ # fluent-plugin-map
2
+
3
+ fluent-plugin-map(out\_map) is the non-buffered plugin that can convert an event log to different event log(s)
4
+
5
+ ## Example
6
+
7
+ This sample config output code file and time file.
8
+
9
+ <source>
10
+ type tail
11
+ format apache
12
+ path /var/log/httpd-access.log
13
+ tag tag
14
+ </source>
15
+ <match tag>
16
+ type map
17
+ map [["code." + tag, time, {"code" => record["code"].to_i}], ["time." + tag, time, {"time" => record["time"].to_i}]]
18
+ multi true
19
+ </match>
20
+ <match code.tag>
21
+ type file
22
+ path code.log
23
+ </match>
24
+ <match time.tag>
25
+ type file
26
+ path time.log
27
+ </match>
28
+
29
+
30
+ The parameter "map" can use 3 variables in event log; tag, time, record. The format of time is an integer number of seconds since the Epoch. The format of record is hash.
31
+ The config file parses # as the begin of comment. So the "map" value cannot use #{tag} operation.
32
+ This plugin can output multi logs by seting multi to true.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << 'lib' << 'test'
6
+ test.pattern = 'test/**/test_*.rb'
7
+ test.verbose = true
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "fluent-plugin-map"
6
+ s.version = "0.0.1"
7
+ s.authors = ["Kohei Tomita"]
8
+ s.email = ["tommy.fmale@gmail.com"]
9
+ s.homepage = ""
10
+ s.summary = %q{fluent-plugin-map is the non-buffered plugin that can convert an event log to different event log(s). }
11
+ s.description = %q{fluent-plugin-map is the non-buffered plugin that can convert an event log to different event log(s). }
12
+
13
+ s.rubyforge_project = "fluent-plugin-map"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ # specify any dependencies here; for example:
21
+ s.add_development_dependency "rake"
22
+ s.add_development_dependency "fluentd"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
@@ -0,0 +1,32 @@
1
+
2
+ module Fluent
3
+ class MapOutput < Fluent::Output
4
+ Fluent::Plugin.register_output('map', self)
5
+
6
+ config_param :map, :string
7
+ config_param :multi, :bool, :default => false
8
+
9
+ def configure(conf)
10
+ super
11
+ $log.debug { "map: #{@map}" }
12
+ end
13
+
14
+ def emit(tag, es, chain)
15
+ tuples = []
16
+ es.each {|time, record|
17
+ new_tuple = eval(@map)
18
+ if @multi
19
+ tuples.concat new_tuple
20
+ else
21
+ tuples << new_tuple
22
+ end
23
+ }
24
+ tuples.each do |tag, time, record|
25
+ $log.trace { [tag, time, record].inspect }
26
+ Fluent::Engine::emit(tag, time, record)
27
+ end
28
+ chain.next
29
+ tuples
30
+ end
31
+ end
32
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,25 @@
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_map"
@@ -0,0 +1,50 @@
1
+ require 'helper'
2
+
3
+ class MapOutputTest < Test::Unit::TestCase
4
+ def setup
5
+ Fluent::Test.setup
6
+ end
7
+
8
+ CONFIG = %[
9
+ map [tag, time, record]
10
+ multi false
11
+ ]
12
+
13
+ def create_driver(conf = CONFIG, tag='test.input')
14
+ Fluent::Test::OutputTestDriver.new(Fluent::MapOutput, tag).configure(conf)
15
+ end
16
+
17
+ def test_tag_convert
18
+ tag = 'tag'
19
+ time = Time.local(2012, 10, 10, 10, 10, 10)
20
+ record = {'code' => '300'}
21
+
22
+ d1 = create_driver %[
23
+ map ["newtag", time, record]
24
+ ], tag
25
+ d1.run do
26
+ d1.emit(record, time)
27
+ end
28
+ emits = d1.emits
29
+ assert_equal 1, emits.length
30
+ assert_equal ["newtag", time.to_i, record], emits[0]
31
+ end
32
+
33
+ def test_convert_multi_tag
34
+ tag = 'tag'
35
+ time = Time.local(2012, 10, 10, 10, 10, 10)
36
+ record = {'code' => '300'}
37
+
38
+ d1 = create_driver %[
39
+ map [["tag1", time, record], ["tag2", time, record]]
40
+ multi true
41
+ ], tag
42
+ d1.run do
43
+ d1.emit(record, time)
44
+ end
45
+ emits = d1.emits
46
+ assert_equal 2, emits.length
47
+ assert_equal ["tag1", time.to_i, record], emits[0]
48
+ assert_equal ["tag2", time.to_i, record], emits[1]
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-map
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kohei Tomita
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-10 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70350721521500 !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: *70350721521500
25
+ - !ruby/object:Gem::Dependency
26
+ name: fluentd
27
+ requirement: &70350721520660 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70350721520660
36
+ description: ! 'fluent-plugin-map is the non-buffered plugin that can convert an event
37
+ log to different event log(s). '
38
+ email:
39
+ - tommy.fmale@gmail.com
40
+ executables: []
41
+ extensions: []
42
+ extra_rdoc_files: []
43
+ files:
44
+ - .gitignore
45
+ - Gemfile
46
+ - README.markdown
47
+ - Rakefile
48
+ - fluent-plugin-map.gemspec
49
+ - lib/fluent/plugin/out_map.rb
50
+ - test/helper.rb
51
+ - test/plugin/test_out_map.rb
52
+ homepage: ''
53
+ licenses: []
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project: fluent-plugin-map
72
+ rubygems_version: 1.8.17
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: fluent-plugin-map is the non-buffered plugin that can convert an event log
76
+ to different event log(s).
77
+ test_files:
78
+ - test/helper.rb
79
+ - test/plugin/test_out_map.rb