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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0dce65d094e236ecdfd6e71531876c6fb0ec1d0
4
- data.tar.gz: d4d2923c986719fdab2afad5db7be8aac868fd82
3
+ metadata.gz: 396b07f3000837ee1b5857b7882e74891f3e4142
4
+ data.tar.gz: e5916c1b9cb4a13785872846e2078bc9a158511f
5
5
  SHA512:
6
- metadata.gz: 396e2a955d81dc5afdd82a051426a817da5f8e2e4c54716f8cc74fa1dc556c04e7692e3f58d83182e20ffd8407b1e4f62e459c8fda006ac4f38cdc570e94b456
7
- data.tar.gz: 97cdc9fde08efdbc683401a38016ffb8616250d7abce6d292d4cc9e58b2b89c6fda102cc64b2497ad7d19b410424465ce33e90a9fcd3b38616ee26c444a849b8
6
+ metadata.gz: e8dc76716c13d43aceefd791d32f988599dd0a98d33940e58ddaf6dc842be4e8df4792cf9ce52812d38dde9f0f9106f62c36b2e43ed67f7a8c5668970ce08c6b
7
+ data.tar.gz: 2e478c2e49328dead0aee9517c5c140279f35071b9adcb0c1fef5288404ac87acb93228ad4e64dd2cc6693afb4131862a8cb1e044a8ddf83c9a587b4ae960db8
@@ -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)
@@ -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.1.5"
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.10.0", "< 2"]
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
- module Fluent
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
- unless method_defined?(:log)
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 emit(tag, es, chain)
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::OutputTestDriver.new(Fluent::ForkOutput, tag).configure(config) }
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) { Time.now.to_i }
55
+ let(:time) { event_time }
54
56
  it "forks" do
55
- subject.run { subject.emit({"sk" => "2,3,4,5"}, time) }
56
- expect(subject.emits.size).to eq(4)
57
- expect(subject.emits).to include(["ot", time, {"ok" => "2"}])
58
- expect(subject.emits).to include(["ot", time, {"ok" => "3"}])
59
- expect(subject.emits).to include(["ot", time, {"ok" => "4"}])
60
- expect(subject.emits).to include(["ot", time, {"ok" => "5"}])
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.emit({"sk" => "2,3,4,3"}, time) }
64
- expect(subject.emits.size).to eq(3)
65
- expect(subject.emits).to include(["ot", time, {"ok" => "2"}])
66
- expect(subject.emits).to include(["ot", time, {"ok" => "3"}])
67
- expect(subject.emits).to include(["ot", time, {"ok" => "4"}])
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.emit({"sk" => "2,3,4,5", "o1" => 1, "o2" => 2}, time) }
71
- expect(subject.emits.size).to eq(4)
72
- expect(subject.emits).to include(["ot", time, {"ok" => "2", "o1" => 1, "o2" => 2}])
73
- expect(subject.emits).to include(["ot", time, {"ok" => "3", "o1" => 1, "o2" => 2}])
74
- expect(subject.emits).to include(["ot", time, {"ok" => "4", "o1" => 1, "o2" => 2}])
75
- expect(subject.emits).to include(["ot", time, {"ok" => "5", "o1" => 1, "o2" => 2}])
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.emit({"o1" => 1, "o2" => 2}, time) }
79
- expect(subject.emits.size).to eq(0)
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.emit({"sk" => "2,3,4,5", "o1" => 1, "o2" => 2}, time)
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.emit({"sk" => "2,3,4,3"}, time) }
90
- expect(subject.emits.size).to eq(4)
91
- expect(subject.emits).to include(["ot", time, {"ok" => "2"}])
92
- expect(subject.emits).to include(["ot", time, {"ok" => "3"}])
93
- expect(subject.emits).to include(["ot", time, {"ok" => "4"}])
94
- expect(subject.emits).to include(["ot", time, {"ok" => "3"}])
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.emit({"sk" => "2-3-4-5"}, time) }
101
- expect(subject.emits.size).to eq(4)
102
- expect(subject.emits).to include(["ot", time, {"ok" => "2"}])
103
- expect(subject.emits).to include(["ot", time, {"ok" => "3"}])
104
- expect(subject.emits).to include(["ot", time, {"ok" => "4"}])
105
- expect(subject.emits).to include(["ot", time, {"ok" => "5"}])
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.emit({"sk" => "2,3,4,5"}, time) }
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.emit({"sk" => "2,3,4,5"}, time) }
120
- expect(subject.emits.size).to eq(3)
121
- expect(subject.emits).to include(["ot", time, {"ok" => "2"}])
122
- expect(subject.emits).to include(["ot", time, {"ok" => "3"}])
123
- expect(subject.emits).to include(["ot", time, {"ok" => "4"}])
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.emit({"sk" => "2,3,4,5"}, time) }
130
- expect(subject.emits.size).to eq(0)
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.emit({"sk" => "2,3,4,5"}, time) }
138
- expect(subject.emits).to include(["ot", time, {"ok" => "2", "idx" => 0}])
139
- expect(subject.emits).to include(["ot", time, {"ok" => "3", "idx" => 1}])
140
- expect(subject.emits).to include(["ot", time, {"ok" => "4", "idx" => 2}])
141
- expect(subject.emits).to include(["ot", time, {"ok" => "5", "idx" => 3}])
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
@@ -3,6 +3,8 @@ require 'coveralls'
3
3
  Coveralls.wear!
4
4
 
5
5
  require 'fluent/test'
6
+ require 'fluent/test/driver/output'
7
+ require 'fluent/test/helpers'
6
8
  require 'fluent/plugin/out_fork'
7
9
 
8
10
  RSpec.configure do |config|
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.1.5
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.10.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.10.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
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- gem 'fluentd', '= 0.10.42'
4
- gemspec :path => '../'