fluent-plugin-suppress 0.0.2 → 0.0.3
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/Changes +6 -0
- data/README.rdoc +12 -0
- data/fluent-plugin-supress.gemspec +1 -1
- data/lib/fluent/plugin/out_suppress.rb +8 -6
- data/test/plugin/test_out_suppress.rb +32 -0
- metadata +3 -2
data/Changes
ADDED
data/README.rdoc
CHANGED
@@ -42,6 +42,18 @@ Output messages:
|
|
42
42
|
2012-11-22T11:22:37 sp.foo.info {"id":5,"host":"app01","message":"error!!"}
|
43
43
|
2012-11-22T11:22:45 sp.foo.info {"id":9,"host":"web01","message":"error!!"}
|
44
44
|
|
45
|
+
attr_keys allows nested key name (eg. foo.bar).
|
46
|
+
|
47
|
+
<match foo.**>
|
48
|
+
type suppress
|
49
|
+
attr_keys data.host, data.message
|
50
|
+
</match>
|
51
|
+
|
52
|
+
Input messages will be suppressed by key data.host and data.message.
|
53
|
+
|
54
|
+
2012-11-22T11:22:33 foo.info {"id":1,"data":{"host":"web01","message":"error!!"}}
|
55
|
+
2012-11-22T11:22:34 foo.info {"id":2,"data":{"host":"web01","message":"error!!"}}
|
56
|
+
|
45
57
|
== TODO
|
46
58
|
|
47
59
|
- patches welcome!
|
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
14
|
gem.name = "fluent-plugin-suppress"
|
15
15
|
gem.require_paths = ["lib"]
|
16
|
-
gem.version = "0.0.
|
16
|
+
gem.version = "0.0.3"
|
17
17
|
|
18
18
|
gem.add_development_dependency "fluentd"
|
19
19
|
gem.add_runtime_dependency "fluentd"
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
module Fluent
|
3
3
|
class SuppressOutput < Output
|
4
|
-
Fluent::Plugin.register_output('suppress', self)
|
5
|
-
|
6
4
|
include Fluent::HandleTagNameMixin
|
7
5
|
|
6
|
+
Fluent::Plugin.register_output('suppress', self)
|
7
|
+
|
8
8
|
config_param :attr_keys, :string, :default => nil
|
9
9
|
config_param :num, :integer, :default => 3
|
10
10
|
config_param :interval, :integer, :default => 300
|
@@ -16,7 +16,7 @@ module Fluent
|
|
16
16
|
raise ConfigError, "out_suppress: attr_keys is required."
|
17
17
|
end
|
18
18
|
|
19
|
-
if ( !@remove_tag_prefix
|
19
|
+
if ( !@remove_tag_prefix && !@remove_tag_suffix && !@add_tag_prefix && !@add_tag_suffix )
|
20
20
|
raise ConfigError, "out_suppress: Set remove_tag_prefix, remove_tag_suffix, add_tag_prefix or add_tag_suffix."
|
21
21
|
end
|
22
22
|
|
@@ -34,13 +34,15 @@ module Fluent
|
|
34
34
|
|
35
35
|
def emit(tag, es, chain)
|
36
36
|
es.each do |time, record|
|
37
|
-
|
38
|
-
|
37
|
+
keys = @keys.map do |key|
|
38
|
+
key.split(/\./).inject(record) {|r, k| r[k] }
|
39
|
+
end
|
40
|
+
key = tag + "\0" + keys.join("\0")
|
39
41
|
slot = @slots[key] ||= []
|
40
42
|
|
41
43
|
# expire old records time
|
42
44
|
expired = time.to_f - @interval
|
43
|
-
while slot.first
|
45
|
+
while slot.first && (slot.first <= expired)
|
44
46
|
slot.shift
|
45
47
|
end
|
46
48
|
|
@@ -12,6 +12,13 @@ class SuppressOutputTest < Test::Unit::TestCase
|
|
12
12
|
add_tag_prefix sp.
|
13
13
|
]
|
14
14
|
|
15
|
+
CONFIG_WITH_NESTED_KEY = %[
|
16
|
+
interval 10
|
17
|
+
num 2
|
18
|
+
attr_keys data.host, data.message
|
19
|
+
add_tag_prefix sp.
|
20
|
+
]
|
21
|
+
|
15
22
|
def create_driver(conf = CONFIG, tag='test.info')
|
16
23
|
Fluent::Test::OutputTestDriver.new(Fluent::SuppressOutput, tag).configure(conf)
|
17
24
|
end
|
@@ -40,4 +47,29 @@ class SuppressOutputTest < Test::Unit::TestCase
|
|
40
47
|
assert_equal ["sp.test.info", time + 13, {"id"=>7, "host"=>"web01", "message"=>"error!!"}], emits[4]
|
41
48
|
|
42
49
|
end
|
50
|
+
|
51
|
+
def test_emit_wtih_nested_key
|
52
|
+
d = create_driver(CONFIG_WITH_NESTED_KEY)
|
53
|
+
|
54
|
+
time = Time.parse("2012-11-22 11:22:33 UTC").to_i
|
55
|
+
d.run do
|
56
|
+
d.emit({"id" => 1, "data" => {"host" => "web01", "message" => "error!!"}}, time + 1)
|
57
|
+
d.emit({"id" => 2, "data" => {"host" => "web01", "message" => "error!!"}}, time + 2)
|
58
|
+
d.emit({"id" => 3, "data" => {"host" => "web01", "message" => "error!!"}}, time + 3)
|
59
|
+
d.emit({"id" => 4, "data" => {"host" => "web01", "message" => "error!!"}}, time + 4)
|
60
|
+
d.emit({"id" => 5, "data" => {"host" => "app01", "message" => "error!!"}}, time + 4)
|
61
|
+
d.emit({"id" => 6, "data" => {"host" => "web01", "message" => "error!!"}}, time + 12)
|
62
|
+
d.emit({"id" => 7, "data" => {"host" => "web01", "message" => "error!!"}}, time + 13)
|
63
|
+
d.emit({"id" => 8, "data" => {"host" => "web01", "message" => "error!!"}}, time + 14)
|
64
|
+
end
|
65
|
+
|
66
|
+
emits = d.emits
|
67
|
+
assert_equal 5, emits.length
|
68
|
+
assert_equal ["sp.test.info", time + 1, {"id"=>1, "data" => {"host"=>"web01", "message"=>"error!!"}}], emits[0]
|
69
|
+
assert_equal ["sp.test.info", time + 2, {"id"=>2, "data" => {"host"=>"web01", "message"=>"error!!"}}], emits[1]
|
70
|
+
assert_equal ["sp.test.info", time + 4, {"id"=>5, "data" => {"host"=>"app01", "message"=>"error!!"}}], emits[2]
|
71
|
+
assert_equal ["sp.test.info", time + 12, {"id"=>6, "data" => {"host"=>"web01", "message"=>"error!!"}}], emits[3]
|
72
|
+
assert_equal ["sp.test.info", time + 13, {"id"=>7, "data" => {"host"=>"web01", "message"=>"error!!"}}], emits[4]
|
73
|
+
|
74
|
+
end
|
43
75
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-suppress
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|
@@ -51,6 +51,7 @@ extensions: []
|
|
51
51
|
extra_rdoc_files: []
|
52
52
|
files:
|
53
53
|
- .gitignore
|
54
|
+
- Changes
|
54
55
|
- Gemfile
|
55
56
|
- LICENSE
|
56
57
|
- README.rdoc
|