fluent-plugin-norikra 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,81 @@
1
+ require 'helper'
2
+ require 'fluent/plugin/norikra_target'
3
+
4
+ class RecordFilterTest < Test::Unit::TestCase
5
+ def setup
6
+ @this = Fluent::NorikraOutput::RecordFilter
7
+ end
8
+
9
+ def test_errors
10
+ assert_raise(Fluent::ConfigError){ @this.new('*', '', '*', '') }
11
+ assert_raise(Fluent::ConfigError){ @this.new('x', 'y', 'z', 'p') }
12
+ assert_raise(Fluent::ConfigError){ @this.new('','', '*','') }
13
+ end
14
+
15
+ def test_init
16
+ f = @this.new()
17
+ assert_equal :include, f.default_policy
18
+ assert_equal [], f.exclude_fields
19
+ assert_nil f.exclude_regexp
20
+ end
21
+
22
+ def test_filter_default # return record itself
23
+ f = @this.new(nil,nil,nil,nil)
24
+ r = {'x'=>1,'y'=>2,'z'=>'3'}
25
+ assert_equal r, f.filter(r)
26
+ assert_equal r.object_id, f.filter(r).object_id
27
+
28
+ f = @this.new('','','','')
29
+ r = {'x'=>1,'y'=>2,'z'=>'3'}
30
+ assert_equal r, f.filter(r)
31
+ assert_equal r.object_id, f.filter(r).object_id
32
+ end
33
+
34
+ def test_filter_exclude_keys
35
+ f = @this.new('*',nil,'x,y,z')
36
+ r = {'a'=>'1','b'=>'2','c'=>'3','x'=>1,'y'=>2,'z'=>3}
37
+ assert_equal 3, f.filter(r).size
38
+ assert_equal({'a'=>'1','b'=>'2','c'=>'3'}, f.filter(r))
39
+ assert_equal 6, r.size # check original record not to be broken
40
+ end
41
+
42
+ def test_filter_exclude_regexp
43
+ f = @this.new('*',nil,nil,'f_.*')
44
+ r = {'a'=>'1','b'=>'2','c'=>'3','f_x'=>1,'f_y'=>2,'f_z'=>3}
45
+ assert_equal 3, f.filter(r).size
46
+ assert_equal({'a'=>'1','b'=>'2','c'=>'3'}, f.filter(r))
47
+ assert_equal 6, r.size # check original record not to be broken
48
+ end
49
+
50
+ def test_filter_excludes
51
+ f = @this.new('*',nil,'b,c','f_.*')
52
+ r = {'a'=>'1','b'=>'2','c'=>'3','f_x'=>1,'f_y'=>2,'f_z'=>3}
53
+ assert_equal 1, f.filter(r).size
54
+ assert_equal({'a'=>'1'}, f.filter(r))
55
+ assert_equal 6, r.size # check original record not to be broken
56
+ end
57
+
58
+ def test_filter_include_keys
59
+ f = @this.new('a,b,c',nil,'*','')
60
+ r = {'a'=>'1','b'=>'2','c'=>'3','x'=>1,'y'=>2,'z'=>3}
61
+ assert_equal 3, f.filter(r).size
62
+ assert_equal({'a'=>'1','b'=>'2','c'=>'3'}, f.filter(r))
63
+ assert_equal 6, r.size # check original record not to be broken
64
+ end
65
+
66
+ def test_filter_include_regexp
67
+ f = @this.new('','f_','*','')
68
+ r = {'f_a'=>'1','f_b'=>'2','f_c'=>'3','x'=>1,'y'=>2,'z'=>3}
69
+ assert_equal 3, f.filter(r).size
70
+ assert_equal({'f_a'=>'1','f_b'=>'2','f_c'=>'3'}, f.filter(r))
71
+ assert_equal 6, r.size # check original record not to be broken
72
+ end
73
+
74
+ def test_filter_includes
75
+ f = @this.new('y,z','f_','*','')
76
+ r = {'f_a'=>'1','f_b'=>'2','f_c'=>'3','x'=>1,'y'=>2,'z'=>3}
77
+ assert_equal 5, f.filter(r).size
78
+ assert_equal({'f_a'=>'1','f_b'=>'2','f_c'=>'3','y'=>2,'z'=>3}, f.filter(r))
79
+ assert_equal 6, r.size # check original record not to be broken
80
+ end
81
+ end
@@ -0,0 +1,66 @@
1
+ require 'helper'
2
+ require 'fluent/plugin/norikra_target'
3
+
4
+ class TargetTest < Test::Unit::TestCase
5
+ def setup
6
+ @this = Fluent::NorikraOutput::Target
7
+ end
8
+
9
+ def test_instanciate
10
+ q1 = Fluent::Config::Element.new('query', nil, {
11
+ 'name' => 'q1_${target}',
12
+ 'expression' => 'SELECT * FROM ${target}.win:time_batch(10 min) WHERE q1',
13
+ 'tag' => 'q1.${target}'
14
+ }, [])
15
+ q2 = Fluent::Config::Element.new('query', nil, {
16
+ 'name' => 'q2_${target}',
17
+ 'expression' => 'SELECT * FROM ${target}.win:time_batch(50 min) WHERE q2.length() > 0',
18
+ 'tag' => 'q2.${target}'
19
+ }, [])
20
+ c1 = Fluent::Config::Element.new('default', nil, {
21
+ 'include' => '*',
22
+ 'exclude' => 'flag',
23
+ 'exclude_regexp' => 'f_.*',
24
+ 'field_string' => 's1,s2,s3',
25
+ 'field_boolean' => 'bool1,bool2',
26
+ 'field_int' => 'i1,i2,i3,i4',
27
+ 'field_long' => 'num1,num2',
28
+ 'field_float' => 'f1,f2',
29
+ 'field_double' => 'd'
30
+ }, [q1,q2])
31
+ s1 = Fluent::NorikraOutput::ConfigSection.new(c1)
32
+
33
+ q3 = Fluent::Config::Element.new('query', nil, {
34
+ 'name' => 'q3_test',
35
+ 'expression' => 'SELECT * FROM ${target}.win:time_batch(30 min) WHERE q3="/"',
36
+ 'tag' => 'q3.test'
37
+ }, [])
38
+ c2 = Fluent::Config::Element.new('target', 'test', {
39
+ 'exclude_regexp' => '(f|g)_.*',
40
+ 'field_double' => 'd1,d2,d3,d4'
41
+ }, [q3])
42
+ s2 = Fluent::NorikraOutput::ConfigSection.new(c2)
43
+
44
+ t = @this.new('test', s1 + s2)
45
+
46
+ assert_equal 'test', t.name
47
+ assert_equal({
48
+ :string => %w(s1 s2 s3), :boolean => %w(bool1 bool2), :int => %w(i1 i2 i3 i4), :long => %w(num1 num2),
49
+ :float => %w(f1 f2), :double => %w(d d1 d2 d3 d4)
50
+ }, t.fields)
51
+ assert_equal 3, t.queries.size
52
+
53
+ r = t.filter({'x'=>1,'y'=>'y','z'=>'zett','flag'=>true,'f_x'=>'true','g_1'=>'g'})
54
+ assert_equal 3, r.size
55
+ assert_equal({'x'=>1,'y'=>'y','z'=>'zett'}, r)
56
+
57
+ # reserve_fields
58
+ assert_equal({
59
+ 's1' => 'string', 's2' => 'string', 's3' => 'string',
60
+ 'bool1' => 'boolean', 'bool2' => 'boolean',
61
+ 'i1' => 'int', 'i2' => 'int', 'i3' => 'int', 'i4' => 'int', 'num1' => 'long', 'num2' => 'long',
62
+ 'f1' => 'float', 'f2' => 'float',
63
+ 'd' => 'double', 'd1' => 'double', 'd2' => 'double', 'd3' => 'double', 'd4' => 'double'
64
+ }, t.reserve_fields)
65
+ end
66
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-norikra
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - TAGOMORI Satoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: norikra-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: fluentd
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: process events on fluentd with SQL like query, with built-in Norikra
70
+ server if needed.
71
+ email:
72
+ - tagomoris@gmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .gitignore
78
+ - Gemfile
79
+ - LICENSE.txt
80
+ - README.md
81
+ - Rakefile
82
+ - example/blank.conf
83
+ - example/example1.conf
84
+ - example/test1.conf
85
+ - fluent-plugin-norikra.gemspec
86
+ - lib/fluent/plugin/norikra_target.rb
87
+ - lib/fluent/plugin/out_norikra.rb
88
+ - test/helper.rb
89
+ - test/test_config_section.rb
90
+ - test/test_query.rb
91
+ - test/test_query_generator.rb
92
+ - test/test_record_filter.rb
93
+ - test/test_target.rb
94
+ homepage: https://github.com/tagomoris/fluent-plugin-norikra
95
+ licenses:
96
+ - APLv2
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.0.0
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: Fluentd plugin to do CEP with norikra
118
+ test_files:
119
+ - test/helper.rb
120
+ - test/test_config_section.rb
121
+ - test/test_query.rb
122
+ - test/test_query_generator.rb
123
+ - test/test_record_filter.rb
124
+ - test/test_target.rb