fluent-plugin-select 0.0.2

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,28 @@
1
+ fluent-plugin-select-if rename to fluent-plugin-select
2
+
3
+ # fluent-plugin-select
4
+
5
+ fluent-plugin-select(out\_select) is the non-buffered output plugin that can filter event logs by using ruby script.
6
+
7
+ ## Example
8
+
9
+ This sample config outputs access logs that have status code 200.
10
+
11
+ <source>
12
+ type tail
13
+ format apache
14
+ path /var/log/httpd-access.log
15
+ tag tag
16
+ </source>
17
+ <match tag>
18
+ type select
19
+ select_if record["code"] == "200"
20
+ add_prefix filtered
21
+ </match>
22
+ <match filtered.tag>
23
+ type file
24
+ path output.log
25
+ </match>
26
+
27
+
28
+ The parameter "select" 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.
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,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "fluent-plugin-select"
6
+ s.version = "0.0.2"
7
+ s.authors = ["Kohei Tomita"]
8
+ s.email = ["tommy.fmale@gmail.com"]
9
+ s.homepage = "https://github.com/tomity/fluent-plugin-select"
10
+ s.summary = %q{fluent-plugin-select is the non-buffered plugin that can be filtered by ruby script. }
11
+ s.description = %q{fluent-plugin-select is the non-buffered plugin that can be filtered by ruby script. }
12
+
13
+ s.rubyforge_project = "fluent-plugin-select-if"
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
+ s.add_development_dependency "rake", "~> 0.9.2.2"
21
+ s.add_development_dependency "fluentd", "~> 0.10.24"
22
+ end
@@ -0,0 +1,33 @@
1
+
2
+ module Fluent
3
+ class SelectOutput < Fluent::Output
4
+ Fluent::Plugin.register_output('select', self)
5
+
6
+ config_param :select, :string
7
+ config_param :add_prefix, :string
8
+ config_param :timeout, :integer, :default => 1
9
+
10
+ def emit(tag, es, chain)
11
+ begin
12
+ time_records = []
13
+ es.each {|time, record|
14
+ if eval(@select)
15
+ $log.trace {"hoge"}
16
+ time_records << [time, record]
17
+ else
18
+ $log.trace {"filtered: #{Time.at(time)} #{tag} #{record.inspect}"}
19
+ end
20
+ }
21
+ time_records.each do |time, record|
22
+ Fluent::Engine::emit(@add_prefix + "." + tag, time, record)
23
+ end
24
+ chain.next
25
+ time_records #for test
26
+ rescue SyntaxError => e
27
+ chain.next
28
+ $log.error "Select command is syntax error: #{@select}"
29
+ e #for test
30
+ end
31
+ end
32
+ end
33
+ 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_select"
@@ -0,0 +1,89 @@
1
+ require 'helper'
2
+
3
+ class SelectOutputTest < Test::Unit::TestCase
4
+ def setup
5
+ Fluent::Test.setup
6
+ end
7
+
8
+ CONFIG = %[
9
+ select tag == "tag" or record["code"] == "200" or Time.at(time).sec == 0
10
+ add_prefix prefix
11
+ ]
12
+
13
+ def create_driver(conf = CONFIG, tag='test.input')
14
+ Fluent::Test::OutputTestDriver.new(Fluent::SelectOutput, tag).configure(conf)
15
+ end
16
+
17
+ def test_match_tag
18
+ tag = 'tag' #match
19
+ time = Time.local(2012, 10, 10, 10, 10, 10) #not match
20
+ record = {'code' => '300'} #not match
21
+
22
+ d1 = create_driver(CONFIG, tag)
23
+ d1.run do
24
+ d1.emit(record, time)
25
+ end
26
+ emits = d1.emits
27
+ assert_equal 1, emits.length
28
+ assert_equal ["prefix.#{tag}", time.to_i, record], emits[0]
29
+ end
30
+
31
+ def test_match_time
32
+ tag = 'test.tag1' #not match
33
+ time = Time.local(2012, 10, 10, 10, 10, 0) #match
34
+ record = {'code' => '300'} #not match
35
+
36
+ d1 = create_driver(CONFIG, tag)
37
+ d1.run do
38
+ d1.emit(record, time)
39
+ end
40
+ emits = d1.emits
41
+ assert_equal 1, emits.length
42
+ assert_equal ["prefix.#{tag}", time.to_i, record], emits[0]
43
+ end
44
+
45
+
46
+ def test_match_record
47
+ tag = 'test.tag1' #not match
48
+ time = Time.local(2012, 10, 10, 10, 10, 10) #not match
49
+ record = {'code' => '200'} #match
50
+
51
+ d1 = create_driver(CONFIG, tag)
52
+ d1.run do
53
+ d1.emit(record, time)
54
+ end
55
+ emits = d1.emits
56
+ assert_equal 1, emits.length
57
+ assert_equal ["prefix.#{tag}", time.to_i, record], emits[0]
58
+ end
59
+
60
+ def test_not_match
61
+ tag = 'test.tag1' #not match
62
+ time = Time.local(2012, 10, 10, 10, 10, 10) #not match
63
+ record = {'code' => '300'} #not match
64
+
65
+ d1 = create_driver(CONFIG, tag)
66
+ d1.run do
67
+ d1.emit(record, time)
68
+ end
69
+ emits = d1.emits
70
+ assert_equal 0, emits.length
71
+ end
72
+
73
+ def test_syntax_error
74
+ tag = "tag"
75
+ time = Time.local(2012, 10, 10, 10, 10, 0)
76
+ record = {'code' => '300'}
77
+
78
+ #select_if is syntax error
79
+ syntax_error_config = %[
80
+ select tag.
81
+ add_prefix prefix
82
+ ]
83
+ d1 = create_driver(syntax_error_config, tag)
84
+ es = Fluent::OneEventStream.new(time.to_i, record)
85
+ chain = Fluent::Test::TestOutputChain.new
86
+ e = d1.instance.emit(tag, es, chain)
87
+ assert e.kind_of?(SyntaxError)
88
+ end
89
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-select
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kohei Tomita
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-11 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70228126073860 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.9.2.2
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70228126073860
25
+ - !ruby/object:Gem::Dependency
26
+ name: fluentd
27
+ requirement: &70228126071880 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 0.10.24
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70228126071880
36
+ description: ! 'fluent-plugin-select is the non-buffered plugin that can be filtered
37
+ by ruby script. '
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-select.gemspec
49
+ - lib/fluent/plugin/out_select.rb
50
+ - test/helper.rb
51
+ - test/plugin/test_out_select.rb
52
+ homepage: https://github.com/tomity/fluent-plugin-select
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-select-if
72
+ rubygems_version: 1.8.17
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: fluent-plugin-select is the non-buffered plugin that can be filtered by ruby
76
+ script.
77
+ test_files:
78
+ - test/helper.rb
79
+ - test/plugin/test_out_select.rb