fluent-plugin-fork 0.1.5 → 0.2.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 -9
- data/README.md +7 -0
- data/fluent-plugin-fork.gemspec +2 -2
- data/lib/fluent/plugin/out_fork.rb +5 -11
- data/spec/plugin/out_fork_spec.rb +50 -48
- data/spec/spec_helper.rb +2 -0
- metadata +3 -4
- data/gemfiles/fluentd.0.10.42.gemfile +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 396b07f3000837ee1b5857b7882e74891f3e4142
|
4
|
+
data.tar.gz: e5916c1b9cb4a13785872846e2078bc9a158511f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8dc76716c13d43aceefd791d32f988599dd0a98d33940e58ddaf6dc842be4e8df4792cf9ce52812d38dde9f0f9106f62c36b2e43ed67f7a8c5668970ce08c6b
|
7
|
+
data.tar.gz: 2e478c2e49328dead0aee9517c5c140279f35071b9adcb0c1fef5288404ac87acb93228ad4e64dd2cc6693afb4131862a8cb1e044a8ddf83c9a587b4ae960db8
|
data/.travis.yml
CHANGED
@@ -7,18 +7,9 @@ rvm:
|
|
7
7
|
- 2.4.1
|
8
8
|
gemfile:
|
9
9
|
- gemfiles/gemfile
|
10
|
-
- gemfiles/fluentd.0.10.42.gemfile
|
11
10
|
|
12
11
|
script: "bundle exec rake spec"
|
13
12
|
|
14
13
|
branches:
|
15
14
|
only:
|
16
15
|
- master
|
17
|
-
matrix:
|
18
|
-
exclude:
|
19
|
-
- rvm: 2.2
|
20
|
-
gemfile: gemfiles/fluentd.0.10.42.gemfile
|
21
|
-
- rvm: 2.3.4
|
22
|
-
gemfile: gemfiles/fluentd.0.10.42.gemfile
|
23
|
-
- rvm: 2.4.1
|
24
|
-
gemfile: gemfiles/fluentd.0.10.42.gemfile
|
data/README.md
CHANGED
@@ -20,6 +20,13 @@ to
|
|
20
20
|
{"id": "1", "key": "2", "segments": "3"}
|
21
21
|
```
|
22
22
|
|
23
|
+
## Requirements
|
24
|
+
|
25
|
+
| fluent-plugin-fork | Fluentd | Ruby |
|
26
|
+
|--------------------|------------------|--------|
|
27
|
+
| >= 0.2.0 | >= v0.14, < v2.0 | >= 2.1 |
|
28
|
+
| < 0.2.0 | <= v0.14 | >= 1.9 |
|
29
|
+
|
23
30
|
## Installation
|
24
31
|
|
25
32
|
### td-agent(Linux)
|
data/fluent-plugin-fork.gemspec
CHANGED
@@ -2,7 +2,7 @@ $:.push File.expand_path('../lib', __FILE__)
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = "fluent-plugin-fork"
|
5
|
-
gem.version = "0.
|
5
|
+
gem.version = "0.2.0"
|
6
6
|
gem.authors = ["Daisuke Taniwaki"]
|
7
7
|
gem.email = "daisuketaniwaki@gmail.com"
|
8
8
|
gem.homepage = "https://github.com/dtaniwaki/fluent-plugin-fork"
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
16
|
gem.require_paths = ['lib']
|
17
17
|
|
18
|
-
gem.add_runtime_dependency "fluentd", [">= 0.
|
18
|
+
gem.add_runtime_dependency "fluentd", [">= 0.14.0", "< 2"]
|
19
19
|
gem.add_development_dependency "rake"
|
20
20
|
gem.add_development_dependency "rspec"
|
21
21
|
gem.add_development_dependency "coveralls"
|
@@ -1,16 +1,12 @@
|
|
1
|
-
|
1
|
+
require 'fluent/plugin/output'
|
2
|
+
|
3
|
+
module Fluent::Plugin
|
2
4
|
class ForkOutput < Output
|
3
5
|
class MaxForkSizeError < StandardError; end
|
4
6
|
|
5
7
|
Fluent::Plugin.register_output('fork', self)
|
6
8
|
|
7
|
-
|
8
|
-
define_method(:log) { $log }
|
9
|
-
end
|
10
|
-
|
11
|
-
unless method_defined?(:router)
|
12
|
-
define_method(:router) { Fluent::Engine }
|
13
|
-
end
|
9
|
+
helpers :event_emitter
|
14
10
|
|
15
11
|
def initialize
|
16
12
|
super
|
@@ -33,7 +29,7 @@ module Fluent
|
|
33
29
|
raise Fluent::ConfigError, "max_fallback must be one of #{fallbacks.inspect}" unless fallbacks.include?(@max_fallback)
|
34
30
|
end
|
35
31
|
|
36
|
-
def
|
32
|
+
def process(tag, es)
|
37
33
|
es.each do |time, record|
|
38
34
|
org_value = record[@fork_key]
|
39
35
|
if org_value.nil?
|
@@ -76,8 +72,6 @@ module Fluent
|
|
76
72
|
end
|
77
73
|
rescue => e
|
78
74
|
log.error "#{e.message}: #{e.backtrace.join(', ')}"
|
79
|
-
ensure
|
80
|
-
chain.next
|
81
75
|
end
|
82
76
|
end
|
83
77
|
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Fluent::ForkOutput do
|
3
|
+
describe Fluent::Plugin::ForkOutput do
|
4
|
+
include Fluent::Test::Helpers
|
5
|
+
|
4
6
|
let(:tag) { "test.fork" }
|
5
7
|
let(:required_params) { {output_tag: 'ot', output_key: 'ok', fork_key: 'sk'} }
|
6
8
|
let(:params) { required_params }
|
7
9
|
let(:config) { params.map{ |k, v| "#{k} #{v}" }.join("\n") }
|
8
|
-
subject { Fluent::Test::
|
10
|
+
subject { Fluent::Test::Driver::Output.new(Fluent::Plugin::ForkOutput).configure(config) }
|
9
11
|
|
10
12
|
describe "#configure" do
|
11
13
|
let(:params) { required_params.merge(separator: '-', max_size: 5, max_fallback: 'drop', no_unique: true) }
|
@@ -50,59 +52,59 @@ describe Fluent::ForkOutput do
|
|
50
52
|
end
|
51
53
|
|
52
54
|
describe "#run" do
|
53
|
-
let(:time) {
|
55
|
+
let(:time) { event_time }
|
54
56
|
it "forks" do
|
55
|
-
subject.run { subject.
|
56
|
-
expect(subject.
|
57
|
-
expect(subject.
|
58
|
-
expect(subject.
|
59
|
-
expect(subject.
|
60
|
-
expect(subject.
|
57
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2,3,4,5"}) }
|
58
|
+
expect(subject.events.size).to eq(4)
|
59
|
+
expect(subject.events).to include(["ot", time, {"ok" => "2"}])
|
60
|
+
expect(subject.events).to include(["ot", time, {"ok" => "3"}])
|
61
|
+
expect(subject.events).to include(["ot", time, {"ok" => "4"}])
|
62
|
+
expect(subject.events).to include(["ot", time, {"ok" => "5"}])
|
61
63
|
end
|
62
64
|
it "forks uniquely" do
|
63
|
-
subject.run { subject.
|
64
|
-
expect(subject.
|
65
|
-
expect(subject.
|
66
|
-
expect(subject.
|
67
|
-
expect(subject.
|
65
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2,3,4,3"}) }
|
66
|
+
expect(subject.event_streams.size).to eq(3)
|
67
|
+
expect(subject.events).to include(["ot", time, {"ok" => "2"}])
|
68
|
+
expect(subject.events).to include(["ot", time, {"ok" => "3"}])
|
69
|
+
expect(subject.events).to include(["ot", time, {"ok" => "4"}])
|
68
70
|
end
|
69
71
|
it "forks with other params" do
|
70
|
-
subject.run { subject.
|
71
|
-
expect(subject.
|
72
|
-
expect(subject.
|
73
|
-
expect(subject.
|
74
|
-
expect(subject.
|
75
|
-
expect(subject.
|
72
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2,3,4,5", "o1" => 1, "o2" => 2}) }
|
73
|
+
expect(subject.events.size).to eq(4)
|
74
|
+
expect(subject.events).to include(["ot", time, {"ok" => "2", "o1" => 1, "o2" => 2}])
|
75
|
+
expect(subject.events).to include(["ot", time, {"ok" => "3", "o1" => 1, "o2" => 2}])
|
76
|
+
expect(subject.events).to include(["ot", time, {"ok" => "4", "o1" => 1, "o2" => 2}])
|
77
|
+
expect(subject.events).to include(["ot", time, {"ok" => "5", "o1" => 1, "o2" => 2}])
|
76
78
|
end
|
77
79
|
it "does nothing for empty value" do
|
78
|
-
subject.run { subject.
|
79
|
-
expect(subject.
|
80
|
+
subject.run(default_tag: tag) { subject.feed(time, {"o1" => 1, "o2" => 2}) }
|
81
|
+
expect(subject.events.size).to eq(0)
|
80
82
|
end
|
81
83
|
it "ignores exceptions and writes down the log" do
|
82
84
|
expect(subject.instance.log).to receive(:error).with(/^The error/)
|
83
85
|
allow_any_instance_of(String).to receive(:split).and_raise("The error")
|
84
|
-
subject.
|
86
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2,3,4,5", "o1" => 1, "o2" => 2}) }
|
85
87
|
end
|
86
88
|
context "with no_unique option" do
|
87
89
|
let(:params) { required_params.merge(no_unique: true) }
|
88
90
|
it "forks for redundant values" do
|
89
|
-
subject.run { subject.
|
90
|
-
expect(subject.
|
91
|
-
expect(subject.
|
92
|
-
expect(subject.
|
93
|
-
expect(subject.
|
94
|
-
expect(subject.
|
91
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2,3,4,3"}) }
|
92
|
+
expect(subject.events.size).to eq(4)
|
93
|
+
expect(subject.events).to include(["ot", time, {"ok" => "2"}])
|
94
|
+
expect(subject.events).to include(["ot", time, {"ok" => "3"}])
|
95
|
+
expect(subject.events).to include(["ot", time, {"ok" => "4"}])
|
96
|
+
expect(subject.events).to include(["ot", time, {"ok" => "3"}])
|
95
97
|
end
|
96
98
|
end
|
97
99
|
context "with separator option" do
|
98
100
|
let(:params) { required_params.merge(separator: '-') }
|
99
101
|
it "forks by separating with '-'" do
|
100
|
-
subject.run { subject.
|
101
|
-
expect(subject.
|
102
|
-
expect(subject.
|
103
|
-
expect(subject.
|
104
|
-
expect(subject.
|
105
|
-
expect(subject.
|
102
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2-3-4-5"}) }
|
103
|
+
expect(subject.events.size).to eq(4)
|
104
|
+
expect(subject.events).to include(["ot", time, {"ok" => "2"}])
|
105
|
+
expect(subject.events).to include(["ot", time, {"ok" => "3"}])
|
106
|
+
expect(subject.events).to include(["ot", time, {"ok" => "4"}])
|
107
|
+
expect(subject.events).to include(["ot", time, {"ok" => "5"}])
|
106
108
|
end
|
107
109
|
end
|
108
110
|
context "with max_size and max_fallback options" do
|
@@ -110,35 +112,35 @@ describe Fluent::ForkOutput do
|
|
110
112
|
let(:params) { required_params.merge(max_size: 3, max_fallback: 'log') }
|
111
113
|
it "writes a log" do
|
112
114
|
expect(subject.instance.log).to receive(:info).with(/Too many forked values/)
|
113
|
-
subject.run { subject.
|
115
|
+
subject.run(default_tag: required_params[:output_tag]) { subject.feed(time, {"sk" => "2,3,4,5"}) }
|
114
116
|
end
|
115
117
|
end
|
116
118
|
describe "drop" do
|
117
119
|
let(:params) { required_params.merge(max_size: 3, max_fallback: 'drop') }
|
118
120
|
it "drops exceeded values" do
|
119
|
-
subject.run { subject.
|
120
|
-
expect(subject.
|
121
|
-
expect(subject.
|
122
|
-
expect(subject.
|
123
|
-
expect(subject.
|
121
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2,3,4,5"}) }
|
122
|
+
expect(subject.events.size).to eq(3)
|
123
|
+
expect(subject.events).to include(["ot", time, {"ok" => "2"}])
|
124
|
+
expect(subject.events).to include(["ot", time, {"ok" => "3"}])
|
125
|
+
expect(subject.events).to include(["ot", time, {"ok" => "4"}])
|
124
126
|
end
|
125
127
|
end
|
126
128
|
describe "skip" do
|
127
129
|
let(:params) { required_params.merge(max_size: 3, max_fallback: 'skip') }
|
128
130
|
it "skip the values" do
|
129
|
-
subject.run { subject.
|
130
|
-
expect(subject.
|
131
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2,3,4,5"}) }
|
132
|
+
expect(subject.events.size).to eq(0)
|
131
133
|
end
|
132
134
|
end
|
133
135
|
end
|
134
136
|
context "with index_key option" do
|
135
137
|
let(:params) { required_params.merge(index_key: 'idx') }
|
136
138
|
it "add index number" do
|
137
|
-
subject.run { subject.
|
138
|
-
expect(subject.
|
139
|
-
expect(subject.
|
140
|
-
expect(subject.
|
141
|
-
expect(subject.
|
139
|
+
subject.run(default_tag: tag) { subject.feed(time, {"sk" => "2,3,4,5"}) }
|
140
|
+
expect(subject.events).to include(["ot", time, {"ok" => "2", "idx" => 0}])
|
141
|
+
expect(subject.events).to include(["ot", time, {"ok" => "3", "idx" => 1}])
|
142
|
+
expect(subject.events).to include(["ot", time, {"ok" => "4", "idx" => 2}])
|
143
|
+
expect(subject.events).to include(["ot", time, {"ok" => "5", "idx" => 3}])
|
142
144
|
end
|
143
145
|
end
|
144
146
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-fork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daisuke Taniwaki
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.14.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '2'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.14.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '2'
|
@@ -99,7 +99,6 @@ files:
|
|
99
99
|
- README.md
|
100
100
|
- Rakefile
|
101
101
|
- fluent-plugin-fork.gemspec
|
102
|
-
- gemfiles/fluentd.0.10.42.gemfile
|
103
102
|
- gemfiles/gemfile
|
104
103
|
- lib/fluent/plugin/out_fork.rb
|
105
104
|
- spec/plugin/out_fork_spec.rb
|