fluent-plugin-amplifier-filter 0.3.0 → 1.0.0
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 +4 -4
- data/.travis.yml +0 -1
- data/README.md +26 -42
- data/fluent-plugin-amplifier-filter.gemspec +2 -2
- data/lib/fluent/plugin/filter_amplifier.rb +79 -0
- data/lib/fluent/plugin/filter_amplifier_filter.rb +1 -86
- data/lib/fluent/plugin/out_amplifier_filter.rb +15 -21
- data/test/plugin/test_filter_amplifier_filter.rb +21 -22
- data/test/plugin/test_out_amplifier_filter.rb +34 -33
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 206214436b2ba5533fe99bff1f9b9cb72ba325b1
|
4
|
+
data.tar.gz: 5b39b1c5aaea9698811df778e0ab86454ffc73ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39c06d2e15faedd4820469073d254d3dc094957e3e9b39997811b57bc2c6d46d926d74466523251909cb8b957d747247b9bc355eab68fac80fe54b04c5d80f9f
|
7
|
+
data.tar.gz: da14b083393b81e9150d07cbed550308d9d279a7d49e61fefa2aba2cccf4daff5defb8c586f2402d809f83b115fe6bb4f855e6c23179f5c6f52a126c9453dc94
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,15 +1,37 @@
|
|
1
1
|
# fluent-plugin-amplifier-filter
|
2
2
|
|
3
|
-
|
3
|
+
[Fluentd](http://fluentd.org) plugin to modify numeric values of specified fields. Useful for counting values of sampled data (by fluent-plugin-sampling-filter or etc).
|
4
4
|
|
5
|
-
|
5
|
+
## Configuration
|
6
6
|
|
7
|
-
|
7
|
+
### AmplifierFilter
|
8
8
|
|
9
|
-
|
9
|
+
To do 10x for count values from messages 1/10 sampled, and to do 100x for 1/100 sampled:
|
10
|
+
|
11
|
+
<label @sampled>
|
12
|
+
<filter big.service> # I know its logs are sampled into 1/10
|
13
|
+
@type amplifier
|
14
|
+
ratio 10
|
15
|
+
key_names count, rate
|
16
|
+
</filter>
|
17
|
+
|
18
|
+
<filter huge.service> # I know its logs are sampled into 1/100
|
19
|
+
@type amplifier
|
20
|
+
ratio 100
|
21
|
+
key_pattern .*_(count|rate)$
|
22
|
+
</filter>
|
23
|
+
|
24
|
+
<match **>
|
25
|
+
# output result to visualization tools, or ....
|
26
|
+
</match>
|
27
|
+
</label>
|
28
|
+
|
29
|
+
There is an option to `floor`(bool) the result of amplifying numeric values into integer. Its default value is `false`.
|
10
30
|
|
11
31
|
### AmplifierFilterOutput
|
12
32
|
|
33
|
+
**NOTE: This output plugin is deprecated. Use 'amplifier' filter plugin instead.**
|
34
|
+
|
13
35
|
To do x10 for messages 1/10 sampled, and to do x100 for messages 1/100 sampled:
|
14
36
|
|
15
37
|
<match sampled_10.**>
|
@@ -44,46 +66,8 @@ To do x10 for messages 1/10 sampled, and to do x100 for messages 1/100 sampled:
|
|
44
66
|
# output configurations where to send original/modified messages...
|
45
67
|
</match>
|
46
68
|
|
47
|
-
### AmplifierFilter
|
48
|
-
|
49
|
-
Filter version of AmplifierFilterOutput plugin.
|
50
|
-
It depends on Fluentd 0.12 or later.
|
51
|
-
|
52
|
-
<filter sampled_10.**>
|
53
|
-
@type amplifier_filter
|
54
|
-
ratio 10
|
55
|
-
key_names counts,rates
|
56
|
-
</filter>
|
57
|
-
|
58
|
-
<filter sampled_100.**>
|
59
|
-
@type amplifier_filter
|
60
|
-
ratio 100
|
61
|
-
key_names counts,rates
|
62
|
-
</filter>
|
63
|
-
|
64
|
-
<match sampled_10.**>
|
65
|
-
# output configurations where to send original/modified messages...
|
66
|
-
</match>
|
67
|
-
|
68
|
-
<match sampled_100.**>
|
69
|
-
# output configurations where to send original/modified messages...
|
70
|
-
</match>
|
71
|
-
|
72
|
-
`key_pattern`(regexp) useful insted of `key_names`, and `add_prefix` is also useful:
|
73
|
-
|
74
|
-
<filter sampled_10.**>
|
75
|
-
@type amplifier_filter
|
76
|
-
ratio 10
|
77
|
-
key_pattern .*_(count|rate)$
|
78
|
-
</filter>
|
79
|
-
|
80
|
-
<match sampled_10.**>
|
81
|
-
# output configurations where to send original/modified messages...
|
82
|
-
</match>
|
83
|
-
|
84
69
|
## TODO
|
85
70
|
|
86
|
-
* consider what to do next
|
87
71
|
* patches welcome!
|
88
72
|
|
89
73
|
## Copyright
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
Gem::Specification.new do |gem|
|
3
3
|
gem.name = "fluent-plugin-amplifier-filter"
|
4
|
-
gem.version = "0.
|
4
|
+
gem.version = "1.0.0"
|
5
5
|
gem.authors = ["TAGOMORI Satoshi"]
|
6
6
|
gem.email = ["tagomoris@gmail.com"]
|
7
7
|
gem.summary = %q{plugin to re-emit messages with amplified values}
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
|
17
|
-
gem.add_runtime_dependency "fluentd", "
|
17
|
+
gem.add_runtime_dependency "fluentd", ">= 0.14.0"
|
18
18
|
gem.add_development_dependency "bundler"
|
19
19
|
gem.add_development_dependency "rake"
|
20
20
|
gem.add_development_dependency "test-unit", "~> 3.1.0"
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'fluent/plugin/filter'
|
2
|
+
|
3
|
+
class Fluent::Plugin::AmplifierFilter < Fluent::Plugin::Filter
|
4
|
+
Fluent::Plugin.register_filter('amplifier', self)
|
5
|
+
Fluent::Plugin.register_filter('amplifier_filter', self)
|
6
|
+
|
7
|
+
config_param :ratio, :float
|
8
|
+
|
9
|
+
config_param :key_names, :array, value_type: :string, default: nil
|
10
|
+
config_param :key_pattern, :string, default: nil
|
11
|
+
|
12
|
+
config_param :floor, :bool, default: false
|
13
|
+
|
14
|
+
def configure(conf)
|
15
|
+
super
|
16
|
+
|
17
|
+
if @key_names.nil? && @key_pattern.nil?
|
18
|
+
raise Fluent::ConfigError, "missing both of key_names and key_pattern"
|
19
|
+
end
|
20
|
+
if @key_names && @key_pattern
|
21
|
+
raise Fluent::ConfigError, "cannot specify both of key_names and key_pattern"
|
22
|
+
end
|
23
|
+
if @key_pattern
|
24
|
+
@key_pattern = Regexp.new(@key_pattern)
|
25
|
+
end
|
26
|
+
|
27
|
+
amp = @floor ? :amp_with_floor : :amp_without_floor
|
28
|
+
self.define_singleton_method(:amp, method(amp))
|
29
|
+
|
30
|
+
filter_method = @key_names ? :filter_with_names : :filter_with_patterns
|
31
|
+
self.define_singleton_method(:filter, method(filter_method))
|
32
|
+
end
|
33
|
+
|
34
|
+
def amp_without_floor(value)
|
35
|
+
value.to_f * @ratio
|
36
|
+
end
|
37
|
+
|
38
|
+
def amp_with_floor(value)
|
39
|
+
(value.to_f * @ratio).floor
|
40
|
+
end
|
41
|
+
|
42
|
+
def filter(tag, time, record)
|
43
|
+
if @key_names
|
44
|
+
filter_with_names(tag, time, record)
|
45
|
+
else
|
46
|
+
filter_with_patterns(tag, time, record)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def filter_with_names(tag, time, record)
|
51
|
+
updated = {}
|
52
|
+
@key_names.each do |key|
|
53
|
+
val = record[key]
|
54
|
+
next unless val
|
55
|
+
updated[key] = amp(val)
|
56
|
+
end
|
57
|
+
log.trace "amplifier", tag: tag, floor: @floor, ratio: @ratio, updated: updated, original: record
|
58
|
+
if updated.size > 0
|
59
|
+
record.merge(updated)
|
60
|
+
else
|
61
|
+
record
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def filter_with_patterns(tag, time, record)
|
66
|
+
updated = {}
|
67
|
+
record.each_pair do |key, val|
|
68
|
+
next unless val
|
69
|
+
next unless @key_pattern.match(key)
|
70
|
+
updated[key] = amp(val)
|
71
|
+
end
|
72
|
+
log.trace "amplifier", tag: tag, floor: @floor, ratio: @ratio, updated: updated, original: record
|
73
|
+
if updated.size > 0
|
74
|
+
record.merge(updated)
|
75
|
+
else
|
76
|
+
record
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -1,86 +1 @@
|
|
1
|
-
|
2
|
-
Fluent::Plugin.register_filter('amplifier_filter', self)
|
3
|
-
|
4
|
-
config_param :ratio, :float
|
5
|
-
|
6
|
-
config_param :key_names, :string, default: nil
|
7
|
-
config_param :key_pattern, :string, default: nil
|
8
|
-
|
9
|
-
config_param :floor, :bool, default: false
|
10
|
-
|
11
|
-
# Define `log` method for v0.10.42 or earlier
|
12
|
-
unless method_defined?(:log)
|
13
|
-
define_method("log") { $log }
|
14
|
-
end
|
15
|
-
|
16
|
-
def configure(conf)
|
17
|
-
super
|
18
|
-
|
19
|
-
if @key_names.nil? and @key_pattern.nil?
|
20
|
-
raise Fluent::ConfigError, "missing both of key_names and key_pattern"
|
21
|
-
end
|
22
|
-
if not @key_names.nil? and not @key_pattern.nil?
|
23
|
-
raise Fluent::ConfigError, "cannot specify both of key_names and key_pattern"
|
24
|
-
end
|
25
|
-
if @key_names
|
26
|
-
@key_names = @key_names.split(',')
|
27
|
-
end
|
28
|
-
if @key_pattern
|
29
|
-
@key_pattern = Regexp.new(@key_pattern)
|
30
|
-
end
|
31
|
-
|
32
|
-
amp = if @floor
|
33
|
-
method(:amp_with_floor)
|
34
|
-
else
|
35
|
-
method(:amp_without_floor)
|
36
|
-
end
|
37
|
-
(class << self; self; end).module_eval do
|
38
|
-
define_method(:amp, amp)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def amp_without_floor(value)
|
43
|
-
value.to_f * @ratio
|
44
|
-
end
|
45
|
-
|
46
|
-
def amp_with_floor(value)
|
47
|
-
(value.to_f * @ratio).floor
|
48
|
-
end
|
49
|
-
|
50
|
-
def filter_stream(tag, es)
|
51
|
-
new_es = Fluent::MultiEventStream.new
|
52
|
-
if @key_names
|
53
|
-
es.each {|time,record|
|
54
|
-
updated = {}
|
55
|
-
@key_names.each {|key|
|
56
|
-
val = record[key]
|
57
|
-
next unless val
|
58
|
-
updated[key] = amp(val)
|
59
|
-
}
|
60
|
-
log.debug "amplifier tag:#{tag} floor:#{@floor} ratio:#{@ratio} updated:#{updated.to_json} record:#{record.to_json}"
|
61
|
-
if updated.size > 0
|
62
|
-
new_es.add(time, record.merge(updated))
|
63
|
-
else
|
64
|
-
new_es.add(time, record.dup)
|
65
|
-
end
|
66
|
-
}
|
67
|
-
else @key_pattern
|
68
|
-
es.each {|time,record|
|
69
|
-
updated = {}
|
70
|
-
record.keys.each {|key|
|
71
|
-
val = record[key]
|
72
|
-
next unless val
|
73
|
-
next unless @key_pattern.match(key)
|
74
|
-
updated[key] = amp(val)
|
75
|
-
}
|
76
|
-
log.debug "amplifier tag:#{tag} floor:#{@floor} ratio:#{@ratio} updated:#{updated.to_json} record:#{record.to_json}"
|
77
|
-
if updated.size > 0
|
78
|
-
new_es.add(time, record.merge(updated))
|
79
|
-
else
|
80
|
-
new_es.add(time, record.dup)
|
81
|
-
end
|
82
|
-
}
|
83
|
-
end
|
84
|
-
new_es
|
85
|
-
end
|
86
|
-
end if defined?(Fluent::Filter)
|
1
|
+
require_relative 'filter_amplifier'
|
@@ -1,33 +1,31 @@
|
|
1
|
-
|
1
|
+
require 'fluent/plugin/output'
|
2
|
+
|
3
|
+
class Fluent::Output::AmplifierFilterOutput < Fluent::Plugin::Output
|
2
4
|
Fluent::Plugin.register_output('amplifier_filter', self)
|
3
5
|
|
6
|
+
helpers :event_emitter
|
7
|
+
|
4
8
|
config_param :ratio, :float
|
5
9
|
|
6
|
-
config_param :key_names, :string, :
|
7
|
-
config_param :key_pattern, :string, :
|
10
|
+
config_param :key_names, :array, value_type: :string, default: nil
|
11
|
+
config_param :key_pattern, :string, default: nil
|
8
12
|
|
9
|
-
config_param :floor, :bool, :
|
13
|
+
config_param :floor, :bool, default: false
|
10
14
|
|
11
|
-
config_param :remove_prefix, :string, :
|
12
|
-
config_param :add_prefix, :string, :
|
13
|
-
|
14
|
-
# Define `log` method for v0.10.42 or earlier
|
15
|
-
unless method_defined?(:log)
|
16
|
-
define_method("log") { $log }
|
17
|
-
end
|
15
|
+
config_param :remove_prefix, :string, default: nil
|
16
|
+
config_param :add_prefix, :string, default: nil
|
18
17
|
|
19
18
|
def configure(conf)
|
20
19
|
super
|
21
20
|
|
21
|
+
log.warn "'amplifier_filter' output plugin is deprecated. use 'amplifier' filter plugin instead."
|
22
|
+
|
22
23
|
if @key_names.nil? and @key_pattern.nil?
|
23
24
|
raise Fluent::ConfigError, "missing both of key_names and key_pattern"
|
24
25
|
end
|
25
|
-
if
|
26
|
+
if @key_names && @key_pattern
|
26
27
|
raise Fluent::ConfigError, "cannot specify both of key_names and key_pattern"
|
27
28
|
end
|
28
|
-
if @key_names
|
29
|
-
@key_names = @key_names.split(',')
|
30
|
-
end
|
31
29
|
if @key_pattern
|
32
30
|
@key_pattern = Regexp.new(@key_pattern)
|
33
31
|
end
|
@@ -37,9 +35,7 @@ class Fluent::AmplifierFilterOutput < Fluent::Output
|
|
37
35
|
else
|
38
36
|
method(:amp_without_floor)
|
39
37
|
end
|
40
|
-
(
|
41
|
-
define_method(:amp, amp)
|
42
|
-
end
|
38
|
+
self.define_singleton_method(:amp, amp)
|
43
39
|
|
44
40
|
if not @remove_prefix and not @add_prefix
|
45
41
|
raise Fluent::ConfigError, "missing both of remove_prefix and add_prefix"
|
@@ -61,7 +57,7 @@ class Fluent::AmplifierFilterOutput < Fluent::Output
|
|
61
57
|
(value.to_f * @ratio).floor
|
62
58
|
end
|
63
59
|
|
64
|
-
def
|
60
|
+
def process(tag, es)
|
65
61
|
if @remove_prefix and
|
66
62
|
( (tag.start_with?(@removed_prefix_string) and tag.length > @removed_length) or tag == @remove_prefix)
|
67
63
|
tag = tag[@removed_length..-1]
|
@@ -108,7 +104,5 @@ class Fluent::AmplifierFilterOutput < Fluent::Output
|
|
108
104
|
}
|
109
105
|
end
|
110
106
|
router.emit_array(tag, pairs)
|
111
|
-
|
112
|
-
chain.next
|
113
107
|
end
|
114
108
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'helper'
|
2
|
+
require 'fluent/test/driver/filter'
|
2
3
|
|
3
4
|
class AmplifierFilterTest < Test::Unit::TestCase
|
4
5
|
def setup
|
@@ -26,27 +27,27 @@ class AmplifierFilterTest < Test::Unit::TestCase
|
|
26
27
|
key_pattern field.*
|
27
28
|
]
|
28
29
|
|
29
|
-
def create_driver(conf = CONFIG
|
30
|
-
Fluent::Test::
|
30
|
+
def create_driver(conf = CONFIG)
|
31
|
+
Fluent::Test::Driver::Filter.new(Fluent::Plugin::AmplifierFilter).configure(conf)
|
31
32
|
end
|
32
33
|
|
33
34
|
def test_configure
|
34
35
|
assert_raise(Fluent::ConfigError) {
|
35
|
-
|
36
|
+
create_driver('')
|
36
37
|
}
|
37
38
|
assert_raise(Fluent::ConfigError) {
|
38
|
-
|
39
|
+
create_driver(%[
|
39
40
|
ratio 1
|
40
41
|
])
|
41
42
|
}
|
42
43
|
assert_nothing_thrown {
|
43
|
-
|
44
|
+
create_driver(%[
|
44
45
|
ratio 1
|
45
46
|
key_names field1
|
46
47
|
])
|
47
48
|
}
|
48
49
|
assert_nothing_raised {
|
49
|
-
|
50
|
+
create_driver(%[
|
50
51
|
ratio 1
|
51
52
|
key_pattern field\d+
|
52
53
|
])
|
@@ -62,23 +63,22 @@ class AmplifierFilterTest < Test::Unit::TestCase
|
|
62
63
|
# ratio 1.5
|
63
64
|
# key_names foo,bar,baz
|
64
65
|
# ]
|
65
|
-
d1 = create_driver(CONFIG
|
66
|
-
d1.run do
|
67
|
-
d1.
|
68
|
-
d1.
|
66
|
+
d1 = create_driver(CONFIG)
|
67
|
+
d1.run(default_tag: 'test.service') do
|
68
|
+
d1.feed({'name' => 'first', 'foo' => 10, 'bar' => 1, 'baz' => 20, 'zap' => 50})
|
69
|
+
d1.feed({'name' => 'second', 'foo' => 10, 'bar' => 2, 'baz' => 40, 'zap' => 50})
|
69
70
|
end
|
70
|
-
filtered = d1.
|
71
|
+
filtered = d1.filtered.map{|e| e.last }
|
71
72
|
assert_equal 2, filtered.length
|
72
|
-
assert_equal 'test.service', filtered[0][0] # tag
|
73
73
|
|
74
|
-
first = filtered[0]
|
74
|
+
first = filtered[0]
|
75
75
|
assert_equal 'first', first['name']
|
76
76
|
assert_equal 15 , first['foo']
|
77
77
|
assert_equal 1.5 , first['bar']
|
78
78
|
assert_equal 30 , first['baz']
|
79
79
|
assert_equal 50 , first['zap']
|
80
80
|
|
81
|
-
second = filtered[1]
|
81
|
+
second = filtered[1]
|
82
82
|
assert_equal 'second', second['name']
|
83
83
|
assert_equal 15 , second['foo']
|
84
84
|
assert_equal 3 , second['bar']
|
@@ -92,23 +92,22 @@ class AmplifierFilterTest < Test::Unit::TestCase
|
|
92
92
|
# floor yes
|
93
93
|
# key_pattern field.*
|
94
94
|
# ]
|
95
|
-
d3 = create_driver(CONFIG2
|
96
|
-
d3.run do
|
97
|
-
d3.
|
98
|
-
d3.
|
95
|
+
d3 = create_driver(CONFIG2)
|
96
|
+
d3.run(default_tag: 'test.service') do
|
97
|
+
d3.feed({'name' => 'first', 'fieldfoo' => 10, 'fieldbar' => 1, 'fieldbaz' => 20, 'zap' => 50})
|
98
|
+
d3.feed({'name' => 'second', 'fieldfoo' => '10', 'fieldbar' => '2', 'fieldbaz' => '40', 'zap' => '50'})
|
99
99
|
end
|
100
|
-
filtered = d3.
|
100
|
+
filtered = d3.filtered.map {|e| e.last }
|
101
101
|
assert_equal 2, filtered.length
|
102
|
-
assert_equal 'test.service', filtered[0][0] # tag
|
103
102
|
|
104
|
-
first = filtered[0]
|
103
|
+
first = filtered[0]
|
105
104
|
assert_equal 'first', first['name']
|
106
105
|
assert_equal 7 , first['fieldfoo']
|
107
106
|
assert_equal 0 , first['fieldbar']
|
108
107
|
assert_equal 15 , first['fieldbaz']
|
109
108
|
assert_equal 50 , first['zap']
|
110
109
|
|
111
|
-
second = filtered[1]
|
110
|
+
second = filtered[1]
|
112
111
|
assert_equal 'second', second['name']
|
113
112
|
assert_equal 7 , second['fieldfoo']
|
114
113
|
assert_equal 1 , second['fieldbar']
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'helper'
|
2
|
+
require 'fluent/test/driver/output'
|
2
3
|
|
3
4
|
class AmplifierFilterOutputTest < Test::Unit::TestCase
|
4
5
|
def setup
|
@@ -25,40 +26,40 @@ class AmplifierFilterOutputTest < Test::Unit::TestCase
|
|
25
26
|
remove_prefix test
|
26
27
|
]
|
27
28
|
|
28
|
-
def create_driver(conf = CONFIG
|
29
|
-
Fluent::Test::
|
29
|
+
def create_driver(conf = CONFIG)
|
30
|
+
Fluent::Test::Driver::Output.new(Fluent::Output::AmplifierFilterOutput).configure(conf)
|
30
31
|
end
|
31
32
|
|
32
33
|
def test_configure
|
33
34
|
assert_raise(Fluent::ConfigError) {
|
34
|
-
|
35
|
+
create_driver('')
|
35
36
|
}
|
36
37
|
assert_raise(Fluent::ConfigError) {
|
37
|
-
|
38
|
+
create_driver(%[
|
38
39
|
ratio 1
|
39
40
|
])
|
40
41
|
}
|
41
42
|
assert_raise(Fluent::ConfigError) {
|
42
|
-
|
43
|
+
create_driver(%[
|
43
44
|
ratio 1
|
44
45
|
key_names field1
|
45
46
|
])
|
46
47
|
}
|
47
48
|
assert_raise(Fluent::ConfigError) {
|
48
|
-
|
49
|
+
create_driver(%[
|
49
50
|
ratio 1
|
50
51
|
add_prefix modified
|
51
52
|
])
|
52
53
|
}
|
53
54
|
assert_nothing_thrown {
|
54
|
-
|
55
|
+
create_driver(%[
|
55
56
|
ratio 1
|
56
57
|
key_names field1
|
57
58
|
add_prefix modified
|
58
59
|
])
|
59
60
|
}
|
60
61
|
assert_nothing_raised {
|
61
|
-
|
62
|
+
create_driver(%[
|
62
63
|
ratio 1
|
63
64
|
key_pattern field\d+
|
64
65
|
remove_prefix sampled
|
@@ -77,37 +78,37 @@ class AmplifierFilterOutputTest < Test::Unit::TestCase
|
|
77
78
|
# remove_prefix test
|
78
79
|
# add_prefix modified
|
79
80
|
# ]
|
80
|
-
d1 = create_driver(CONFIG
|
81
|
-
d1.run do
|
82
|
-
d1.
|
83
|
-
d1.
|
81
|
+
d1 = create_driver(CONFIG)
|
82
|
+
d1.run(default_tag: 'test.service') do
|
83
|
+
d1.feed({'name' => 'first', 'foo' => 10, 'bar' => 1, 'baz' => 20, 'zap' => 50})
|
84
|
+
d1.feed({'name' => 'second', 'foo' => 10, 'bar' => 2, 'baz' => 40, 'zap' => 50})
|
84
85
|
end
|
85
|
-
|
86
|
-
assert_equal 2,
|
87
|
-
assert_equal 'modified.service',
|
86
|
+
events = d1.events
|
87
|
+
assert_equal 2, events.length
|
88
|
+
assert_equal 'modified.service', events[0][0] # tag
|
88
89
|
|
89
|
-
first =
|
90
|
+
first = events[0][2]
|
90
91
|
assert_equal 'first', first['name']
|
91
92
|
assert_equal 15 , first['foo']
|
92
93
|
assert_equal 1.5 , first['bar']
|
93
94
|
assert_equal 30 , first['baz']
|
94
95
|
assert_equal 50 , first['zap']
|
95
96
|
|
96
|
-
second =
|
97
|
+
second = events[1][2]
|
97
98
|
assert_equal 'second', second['name']
|
98
99
|
assert_equal 15 , second['foo']
|
99
100
|
assert_equal 3 , second['bar']
|
100
101
|
assert_equal 60 , second['baz']
|
101
102
|
assert_equal 50 , second['zap']
|
102
103
|
|
103
|
-
d2 = create_driver(CONFIG
|
104
|
-
d2.run do
|
105
|
-
d2.
|
106
|
-
d2.
|
104
|
+
d2 = create_driver(CONFIG)
|
105
|
+
d2.run(default_tag: 'test') do
|
106
|
+
d2.feed({'name' => 'first', 'foo' => 10, 'bar' => 1, 'baz' => 20, 'zap' => 50})
|
107
|
+
d2.feed({'name' => 'second', 'foo' => 10, 'bar' => 2, 'baz' => 40, 'zap' => 50})
|
107
108
|
end
|
108
|
-
|
109
|
-
assert_equal 2,
|
110
|
-
assert_equal 'modified',
|
109
|
+
events = d2.events
|
110
|
+
assert_equal 2, events.length
|
111
|
+
assert_equal 'modified', events[0][0] # tag
|
111
112
|
|
112
113
|
# CONFIG2 = %[
|
113
114
|
# ratio 0.75
|
@@ -115,23 +116,23 @@ class AmplifierFilterOutputTest < Test::Unit::TestCase
|
|
115
116
|
# key_pattern field.*
|
116
117
|
# remove_prefix test
|
117
118
|
# ]
|
118
|
-
d3 = create_driver(CONFIG2
|
119
|
-
d3.run do
|
120
|
-
d3.
|
121
|
-
d3.
|
119
|
+
d3 = create_driver(CONFIG2)
|
120
|
+
d3.run(default_tag: 'test.service') do
|
121
|
+
d3.feed({'name' => 'first', 'fieldfoo' => 10, 'fieldbar' => 1, 'fieldbaz' => 20, 'zap' => 50})
|
122
|
+
d3.feed({'name' => 'second', 'fieldfoo' => '10', 'fieldbar' => '2', 'fieldbaz' => '40', 'zap' => '50'})
|
122
123
|
end
|
123
|
-
|
124
|
-
assert_equal 2,
|
125
|
-
assert_equal 'service',
|
124
|
+
events = d3.events
|
125
|
+
assert_equal 2, events.length
|
126
|
+
assert_equal 'service', events[0][0] # tag
|
126
127
|
|
127
|
-
first =
|
128
|
+
first = events[0][2]
|
128
129
|
assert_equal 'first', first['name']
|
129
130
|
assert_equal 7 , first['fieldfoo']
|
130
131
|
assert_equal 0 , first['fieldbar']
|
131
132
|
assert_equal 15 , first['fieldbaz']
|
132
133
|
assert_equal 50 , first['zap']
|
133
134
|
|
134
|
-
second =
|
135
|
+
second = events[1][2]
|
135
136
|
assert_equal 'second', second['name']
|
136
137
|
assert_equal 7 , second['fieldfoo']
|
137
138
|
assert_equal 1 , second['fieldbar']
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-amplifier-filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TAGOMORI Satoshi
|
@@ -14,14 +14,14 @@ dependencies:
|
|
14
14
|
name: fluentd
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.14.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.14.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- README.md
|
81
81
|
- Rakefile
|
82
82
|
- fluent-plugin-amplifier-filter.gemspec
|
83
|
+
- lib/fluent/plugin/filter_amplifier.rb
|
83
84
|
- lib/fluent/plugin/filter_amplifier_filter.rb
|
84
85
|
- lib/fluent/plugin/out_amplifier_filter.rb
|
85
86
|
- test/helper.rb
|