fluent-plugin-norikra 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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +13 -0
- data/README.md +179 -0
- data/Rakefile +10 -0
- data/example/blank.conf +15 -0
- data/example/example1.conf +68 -0
- data/example/test1.conf +36 -0
- data/fluent-plugin-norikra.gemspec +23 -0
- data/lib/fluent/plugin/norikra_target.rb +217 -0
- data/lib/fluent/plugin/out_norikra.rb +388 -0
- data/test/helper.rb +29 -0
- data/test/test_config_section.rb +179 -0
- data/test/test_query.rb +12 -0
- data/test/test_query_generator.rb +49 -0
- data/test/test_record_filter.rb +81 -0
- data/test/test_target.rb +66 -0
- metadata +124 -0
@@ -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
|
data/test/test_target.rb
ADDED
@@ -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
|