fluent-plugin-kinesis 0.4.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +13 -18
- data/.travis.yml +9 -9
- data/CHANGELOG.md +9 -0
- data/CONTRIBUTORS.txt +1 -1
- data/Gemfile +12 -9
- data/LICENSE.txt +39 -201
- data/Makefile +40 -0
- data/NOTICE.txt +1 -1
- data/README-v0.4.md +348 -0
- data/README.md +398 -183
- data/Rakefile +20 -14
- data/benchmark/dummer.conf +13 -0
- data/benchmark/firehose.conf +24 -0
- data/benchmark/producer.conf +28 -0
- data/benchmark/streams.conf +24 -0
- data/fluent-plugin-kinesis.gemspec +34 -23
- data/gemfiles/Gemfile.fluentd-0.10.58 +20 -0
- data/lib/fluent/plugin/kinesis_helper.rb +30 -0
- data/lib/fluent/plugin/kinesis_helper/api.rb +164 -0
- data/lib/fluent/plugin/kinesis_helper/class_methods.rb +120 -0
- data/lib/fluent/plugin/kinesis_helper/client.rb +36 -0
- data/lib/fluent/plugin/kinesis_helper/credentials.rb +51 -0
- data/lib/fluent/plugin/kinesis_helper/error.rb +38 -0
- data/lib/fluent/plugin/kinesis_helper/format.rb +85 -0
- data/lib/fluent/plugin/kinesis_helper/initialize.rb +58 -0
- data/lib/fluent/plugin/kinesis_helper/kpl.rb +81 -0
- data/lib/fluent/plugin/out_kinesis.rb +13 -11
- data/lib/fluent/plugin/out_kinesis_firehose.rb +44 -0
- data/lib/fluent/plugin/out_kinesis_producer.rb +38 -0
- data/lib/fluent/plugin/out_kinesis_streams.rb +47 -0
- data/lib/fluent/plugin/patched_detach_process_impl.rb +103 -0
- data/lib/fluent_plugin_kinesis/version.rb +17 -0
- data/lib/kinesis_producer.rb +24 -0
- data/lib/kinesis_producer/binary.rb +10 -0
- data/lib/kinesis_producer/daemon.rb +238 -0
- data/lib/kinesis_producer/library.rb +122 -0
- data/lib/kinesis_producer/protobuf/config.pb.rb +66 -0
- data/lib/kinesis_producer/protobuf/messages.pb.rb +151 -0
- data/lib/kinesis_producer/tasks/binary.rake +73 -0
- metadata +196 -36
- data/lib/fluent/plugin/version.rb +0 -16
- data/test/helper.rb +0 -32
- data/test/plugin/test_out_kinesis.rb +0 -641
data/Rakefile
CHANGED
@@ -1,23 +1,29 @@
|
|
1
|
-
# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
1
|
#
|
3
|
-
#
|
4
|
-
# may not use this file except in compliance with the License. A copy of
|
5
|
-
# the License is located at
|
2
|
+
# Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
6
3
|
#
|
7
|
-
#
|
4
|
+
# Licensed under the Amazon Software License (the "License").
|
5
|
+
# You may not use this file except in compliance with the License.
|
6
|
+
# A copy of the License is located at
|
8
7
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
8
|
+
# http://aws.amazon.com/asl/
|
9
|
+
#
|
10
|
+
# or in the "license" file accompanying this file. This file is distributed
|
11
|
+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
12
|
+
# express or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
13
14
|
|
14
15
|
require "bundler/gem_tasks"
|
15
16
|
|
16
17
|
require 'rake/testtask'
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
|
19
|
+
task default: [:test]
|
20
|
+
Rake::TestTask.new do |test|
|
21
|
+
test.libs << 'lib' << 'test'
|
22
|
+
test.test_files = FileList['test/**/test_*.rb']
|
23
|
+
test.options = '-v'
|
21
24
|
end
|
22
25
|
|
23
|
-
|
26
|
+
load 'kinesis_producer/tasks/binary.rake'
|
27
|
+
|
28
|
+
Rake::Task[:build].enhance [:binaries]
|
29
|
+
Rake::Task[:test].enhance [:binaries]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
configure 'sample' do
|
2
|
+
output "/tmp/dummy.log"
|
3
|
+
rate 5000
|
4
|
+
delimiter "\t"
|
5
|
+
labeled true
|
6
|
+
field :id, type: :integer, countup: true, format: "%04d"
|
7
|
+
field :time, type: :datetime, format: "[%Y-%m-%d %H:%M:%S]", random: false
|
8
|
+
field :level, type: :string, any: %w[DEBUG INFO WARN ERROR]
|
9
|
+
field :method, type: :string, any: %w[GET POST PUT]
|
10
|
+
field :uri, type: :string, any: %w[/api/v1/people /api/v1/textdata /api/v1/messages]
|
11
|
+
field :reqtime, type: :float, range: 0.1..5.0
|
12
|
+
field :foobar, type: :string, length: 8
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<source>
|
2
|
+
@type tail
|
3
|
+
path /tmp/dummy.log
|
4
|
+
format none
|
5
|
+
tag dummy
|
6
|
+
</source>
|
7
|
+
|
8
|
+
<source>
|
9
|
+
@type forward
|
10
|
+
</source>
|
11
|
+
|
12
|
+
<match dummy>
|
13
|
+
@type kinesis_firehose
|
14
|
+
flush_interval 1
|
15
|
+
buffer_chunk_limit 1m
|
16
|
+
try_flush_interval 0.1
|
17
|
+
queued_chunk_flush_interval 0.01
|
18
|
+
num_threads 15
|
19
|
+
detach_process 5
|
20
|
+
log_level debug
|
21
|
+
|
22
|
+
region us-west-2
|
23
|
+
delivery_stream_name fluent-plugin-test
|
24
|
+
</match>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<source>
|
2
|
+
@type tail
|
3
|
+
path /tmp/dummy.log
|
4
|
+
format none
|
5
|
+
tag dummy
|
6
|
+
</source>
|
7
|
+
|
8
|
+
<source>
|
9
|
+
@type forward
|
10
|
+
</source>
|
11
|
+
|
12
|
+
<match dummy>
|
13
|
+
@type kinesis_producer
|
14
|
+
flush_interval 1
|
15
|
+
buffer_chunk_limit 1m
|
16
|
+
try_flush_interval 0.1
|
17
|
+
queued_chunk_flush_interval 0.01
|
18
|
+
num_threads 15
|
19
|
+
detach_process 5
|
20
|
+
log_level debug
|
21
|
+
|
22
|
+
region ap-northeast-1
|
23
|
+
stream_name fluent-plugin-test
|
24
|
+
debug true
|
25
|
+
<kinesis_producer>
|
26
|
+
record_max_buffered_time 1000
|
27
|
+
</kinesis_producer>
|
28
|
+
</match>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<source>
|
2
|
+
@type tail
|
3
|
+
path /tmp/dummy.log
|
4
|
+
format none
|
5
|
+
tag dummy
|
6
|
+
</source>
|
7
|
+
|
8
|
+
<source>
|
9
|
+
@type forward
|
10
|
+
</source>
|
11
|
+
|
12
|
+
<match dummy>
|
13
|
+
@type kinesis_streams
|
14
|
+
flush_interval 1
|
15
|
+
buffer_chunk_limit 1m
|
16
|
+
try_flush_interval 0.1
|
17
|
+
queued_chunk_flush_interval 0.01
|
18
|
+
num_threads 15
|
19
|
+
detach_process 5
|
20
|
+
log_level debug
|
21
|
+
|
22
|
+
region ap-northeast-1
|
23
|
+
stream_name fluent-plugin-test
|
24
|
+
</match>
|
@@ -1,21 +1,22 @@
|
|
1
|
-
#
|
1
|
+
# coding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
2
4
|
#
|
3
|
-
#
|
4
|
-
# may not use this file except in compliance with the License.
|
5
|
-
# the License is located at
|
5
|
+
# Licensed under the Amazon Software License (the "License").
|
6
|
+
# You may not use this file except in compliance with the License.
|
7
|
+
# A copy of the License is located at
|
6
8
|
#
|
7
|
-
#
|
9
|
+
# http://aws.amazon.com/asl/
|
8
10
|
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
11
|
+
# or in the "license" file accompanying this file. This file is distributed
|
12
|
+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
13
|
+
# express or implied. See the License for the specific language governing
|
14
|
+
# permissions and limitations under the License.
|
13
15
|
|
14
|
-
# coding: utf-8
|
15
16
|
lib = File.expand_path('../lib', __FILE__)
|
16
17
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
17
|
-
|
18
|
-
require
|
18
|
+
require 'fluent_plugin_kinesis/version'
|
19
|
+
require 'kinesis_producer/binary'
|
19
20
|
|
20
21
|
Gem::Specification.new do |spec|
|
21
22
|
spec.name = "fluent-plugin-kinesis"
|
@@ -23,19 +24,29 @@ Gem::Specification.new do |spec|
|
|
23
24
|
spec.author = 'Amazon Web Services'
|
24
25
|
spec.summary = %q{Fluentd output plugin that sends events to Amazon Kinesis.}
|
25
26
|
spec.homepage = "https://github.com/awslabs/aws-fluent-plugin-kinesis"
|
26
|
-
spec.license = "
|
27
|
+
spec.license = "Amazon Software License"
|
27
28
|
|
28
|
-
spec.files = `git ls-files`.split(
|
29
|
-
spec.
|
30
|
-
spec.
|
29
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
30
|
+
spec.files += KinesisProducer::Binary::Files.values
|
31
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
32
|
spec.require_paths = ["lib"]
|
32
|
-
spec.required_ruby_version = '>=
|
33
|
+
spec.required_ruby_version = '>= 2.0.0'
|
33
34
|
|
34
|
-
spec.
|
35
|
-
spec.
|
36
|
-
spec.
|
35
|
+
spec.add_dependency "fluentd", ">= 0.10.58", "< 2"
|
36
|
+
spec.add_dependency "protobuf", ">= 3.5.5"
|
37
|
+
spec.add_dependency "aws-sdk", "~> 2"
|
38
|
+
spec.add_dependency "concurrent-ruby", "~> 1"
|
39
|
+
spec.add_dependency "os", ">= 0.9.6"
|
37
40
|
|
38
|
-
spec.
|
39
|
-
spec.
|
40
|
-
spec.
|
41
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
42
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
43
|
+
spec.add_development_dependency "test-unit", ">= 3.0.8"
|
44
|
+
spec.add_development_dependency "test-unit-rr", ">= 1.0.3"
|
45
|
+
spec.add_development_dependency "pry", ">= 0.10.1"
|
46
|
+
spec.add_development_dependency "pry-byebug", ">= 3.3.0"
|
47
|
+
spec.add_development_dependency "pry-stack_explorer", ">= 0.4.9.2"
|
48
|
+
spec.add_development_dependency "net-empty_port", ">= 0.0.2"
|
49
|
+
spec.add_development_dependency "dummer", ">= 0.4.0"
|
50
|
+
spec.add_development_dependency "rubyzip", ">= 1.0.0"
|
51
|
+
spec.add_development_dependency "mocha", ">= 1.1.0"
|
41
52
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
3
|
+
#
|
4
|
+
# Licensed under the Amazon Software License (the "License").
|
5
|
+
# You may not use this file except in compliance with the License.
|
6
|
+
# A copy of the License is located at
|
7
|
+
#
|
8
|
+
# http://aws.amazon.com/asl/
|
9
|
+
#
|
10
|
+
# or in the "license" file accompanying this file. This file is distributed
|
11
|
+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
12
|
+
# express or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
|
15
|
+
source 'https://rubygems.org'
|
16
|
+
|
17
|
+
# Specify your gem's dependencies in fluent-plugin-kinesis.gemspec
|
18
|
+
gemspec path: ".."
|
19
|
+
|
20
|
+
gem "fluentd", "0.10.58"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
3
|
+
#
|
4
|
+
# Licensed under the Amazon Software License (the "License").
|
5
|
+
# You may not use this file except in compliance with the License.
|
6
|
+
# A copy of the License is located at
|
7
|
+
#
|
8
|
+
# http://aws.amazon.com/asl/
|
9
|
+
#
|
10
|
+
# or in the "license" file accompanying this file. This file is distributed
|
11
|
+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
12
|
+
# express or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
|
15
|
+
require 'fluent/plugin/kinesis_helper/class_methods'
|
16
|
+
require 'fluent/plugin/kinesis_helper/initialize'
|
17
|
+
require 'fluent/plugin/kinesis_helper/error'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
module KinesisHelper
|
21
|
+
include Fluent::SetTimeKeyMixin
|
22
|
+
include Fluent::SetTagKeyMixin
|
23
|
+
include Fluent::DetachMultiProcessMixin
|
24
|
+
|
25
|
+
def self.included(klass)
|
26
|
+
klass.extend ClassMethods
|
27
|
+
end
|
28
|
+
include Initialize
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
3
|
+
#
|
4
|
+
# Licensed under the Amazon Software License (the "License").
|
5
|
+
# You may not use this file except in compliance with the License.
|
6
|
+
# A copy of the License is located at
|
7
|
+
#
|
8
|
+
# http://aws.amazon.com/asl/
|
9
|
+
#
|
10
|
+
# or in the "license" file accompanying this file. This file is distributed
|
11
|
+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
12
|
+
# express or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
|
15
|
+
require 'fluent_plugin_kinesis/version'
|
16
|
+
|
17
|
+
module Fluent
|
18
|
+
module KinesisHelper
|
19
|
+
module API
|
20
|
+
def configure(conf)
|
21
|
+
super
|
22
|
+
if @batch_request_max_count > self.class::BatchRequestLimitCount
|
23
|
+
raise ConfigError, "batch_request_max_count can't be grater than #{self.class::BatchRequestLimitCount}."
|
24
|
+
end
|
25
|
+
if @batch_request_max_size > self.class::BatchRequestLimitSize
|
26
|
+
raise ConfigError, "batch_request_max_size can't be grater than #{self.class::BatchRequestLimitSize}."
|
27
|
+
end
|
28
|
+
@region = client.config.region if @region.nil?
|
29
|
+
end
|
30
|
+
|
31
|
+
def start
|
32
|
+
detach_multi_process do
|
33
|
+
super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def client_options
|
40
|
+
options = {
|
41
|
+
user_agent_suffix: "fluent-plugin-kinesis/#{request_type}/#{FluentPluginKinesis::VERSION}",
|
42
|
+
credentials: credentials,
|
43
|
+
}
|
44
|
+
options.update(region: @region) unless @region.nil?
|
45
|
+
options.update(http_proxy: @http_proxy) unless @http_proxy.nil?
|
46
|
+
options.update(endpoint: @endpoint) unless @endpoint.nil?
|
47
|
+
options.update(ssl_verify_peer: @ssl_verify_peer) unless @ssl_verify_peer.nil?
|
48
|
+
if @debug
|
49
|
+
options.update(logger: Logger.new(log.out))
|
50
|
+
options.update(log_level: :debug)
|
51
|
+
end
|
52
|
+
options
|
53
|
+
end
|
54
|
+
|
55
|
+
def split_to_batches(records)
|
56
|
+
batch_by_limit(records, @batch_request_max_count, @batch_request_max_size)
|
57
|
+
end
|
58
|
+
|
59
|
+
def batch_by_limit(records, max_count, max_size)
|
60
|
+
result, buf, size = records.inject([[],[],0]){|(result, buf, size), record|
|
61
|
+
if buf.size >= max_count or size >= max_size
|
62
|
+
result << buf
|
63
|
+
buf = []
|
64
|
+
size = 0
|
65
|
+
end
|
66
|
+
buf << record
|
67
|
+
size += size_of_values(record)
|
68
|
+
[result, buf, size]
|
69
|
+
}
|
70
|
+
result << buf
|
71
|
+
end
|
72
|
+
|
73
|
+
def size_of_values(record)
|
74
|
+
record.values_at(:data, :partition_key).compact.map(&:size).inject(:+) || 0
|
75
|
+
end
|
76
|
+
|
77
|
+
def batch_request_with_retry(batch, retry_count=0, backoff: nil)
|
78
|
+
backoff ||= Backoff.new
|
79
|
+
res = batch_request(batch)
|
80
|
+
if failed_count(res) > 0
|
81
|
+
failed_records = collect_failed_records(batch, res)
|
82
|
+
if retry_count < @retries_on_batch_request
|
83
|
+
backoff.reset if @reset_backoff_if_success and any_records_shipped?(res)
|
84
|
+
sleep(backoff.next)
|
85
|
+
log.warn(truncate 'Retrying to request batch. Retry count: %d, Retry records: %d' % [retry_count, failed_records.size])
|
86
|
+
retry_batch = failed_records.map{|r| r[:original] }
|
87
|
+
batch_request_with_retry(retry_batch, retry_count + 1, backoff: backoff)
|
88
|
+
else
|
89
|
+
give_up_retries(failed_records)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def any_records_shipped?(res)
|
95
|
+
results(res).size > failed_count(res)
|
96
|
+
end
|
97
|
+
|
98
|
+
def collect_failed_records(records, res)
|
99
|
+
failed_records = []
|
100
|
+
results(res).each_with_index do |record, index|
|
101
|
+
next unless record[:error_code]
|
102
|
+
failed_records.push(
|
103
|
+
original: records[index],
|
104
|
+
error_code: record[:error_code],
|
105
|
+
error_message: record[:error_message]
|
106
|
+
)
|
107
|
+
end
|
108
|
+
failed_records
|
109
|
+
end
|
110
|
+
|
111
|
+
def failed_count(res)
|
112
|
+
failed_field = case request_type
|
113
|
+
when :streams; :failed_record_count
|
114
|
+
when :firehose; :failed_put_count
|
115
|
+
end
|
116
|
+
res[failed_field]
|
117
|
+
end
|
118
|
+
|
119
|
+
def results(res)
|
120
|
+
result_field = case request_type
|
121
|
+
when :streams; :records
|
122
|
+
when :firehose; :request_responses
|
123
|
+
end
|
124
|
+
res[result_field]
|
125
|
+
end
|
126
|
+
|
127
|
+
def give_up_retries(failed_records)
|
128
|
+
failed_records.each {|record|
|
129
|
+
log.error(truncate 'Could not put record, Error: %s/%s, Record: %s' % [
|
130
|
+
record[:error_code],
|
131
|
+
record[:error_message],
|
132
|
+
record[:original]
|
133
|
+
])
|
134
|
+
}
|
135
|
+
end
|
136
|
+
|
137
|
+
class Backoff
|
138
|
+
def initialize
|
139
|
+
@count = 0
|
140
|
+
end
|
141
|
+
|
142
|
+
def next
|
143
|
+
value = calc(@count)
|
144
|
+
@count += 1
|
145
|
+
value
|
146
|
+
end
|
147
|
+
|
148
|
+
def reset
|
149
|
+
@count = 0
|
150
|
+
end
|
151
|
+
|
152
|
+
private
|
153
|
+
|
154
|
+
def calc(count)
|
155
|
+
(2 ** count) * scaling_factor
|
156
|
+
end
|
157
|
+
|
158
|
+
def scaling_factor
|
159
|
+
0.3 + (0.5-rand) * 0.1
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
3
|
+
#
|
4
|
+
# Licensed under the Amazon Software License (the "License").
|
5
|
+
# You may not use this file except in compliance with the License.
|
6
|
+
# A copy of the License is located at
|
7
|
+
#
|
8
|
+
# http://aws.amazon.com/asl/
|
9
|
+
#
|
10
|
+
# or in the "license" file accompanying this file. This file is distributed
|
11
|
+
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
12
|
+
# express or implied. See the License for the specific language governing
|
13
|
+
# permissions and limitations under the License.
|
14
|
+
|
15
|
+
module Fluent
|
16
|
+
module KinesisHelper
|
17
|
+
module ClassMethods
|
18
|
+
def config_param_for_streams
|
19
|
+
const_set(:RequestType, :streams)
|
20
|
+
const_set(:BatchRequestLimitCount, 500)
|
21
|
+
const_set(:BatchRequestLimitSize, 5 * 1024 * 1024)
|
22
|
+
config_param :stream_name, :string
|
23
|
+
config_param :region, :string, default: nil
|
24
|
+
config_param :partition_key, :string, default: nil
|
25
|
+
config_param_for_sdk
|
26
|
+
config_param_for_credentials
|
27
|
+
config_param_for_format
|
28
|
+
config_param_for_batch_request
|
29
|
+
config_param_for_debug
|
30
|
+
end
|
31
|
+
|
32
|
+
def config_param_for_firehose
|
33
|
+
const_set(:RequestType, :firehose)
|
34
|
+
const_set(:BatchRequestLimitCount, 500)
|
35
|
+
const_set(:BatchRequestLimitSize, 4 * 1024 * 1024)
|
36
|
+
config_param :delivery_stream_name, :string
|
37
|
+
config_param :region, :string, default: nil
|
38
|
+
config_param :append_new_line, :bool, default: true
|
39
|
+
config_param_for_sdk
|
40
|
+
config_param_for_credentials
|
41
|
+
config_param_for_format
|
42
|
+
config_param_for_batch_request
|
43
|
+
config_param_for_debug
|
44
|
+
end
|
45
|
+
|
46
|
+
def config_param_for_producer
|
47
|
+
const_set(:RequestType, :producer)
|
48
|
+
config_param :stream_name, :string
|
49
|
+
config_param :region, :string, default: nil
|
50
|
+
config_param :partition_key, :string, default: nil
|
51
|
+
config_param_for_credentials
|
52
|
+
config_param_for_format
|
53
|
+
config_param_for_debug
|
54
|
+
|
55
|
+
config_section :kinesis_producer, multi: false do
|
56
|
+
require 'kinesis_producer'
|
57
|
+
type_map = {
|
58
|
+
Protobuf::Field::BoolField => :bool,
|
59
|
+
Protobuf::Field::Uint64Field => :integer,
|
60
|
+
Protobuf::Field::StringField => :string,
|
61
|
+
}
|
62
|
+
KinesisProducer::ConfigurationFields.each do |field|
|
63
|
+
next if field.name == 'region'
|
64
|
+
type = type_map[field.type_class]
|
65
|
+
config_param field.name, type, default: field.default_value
|
66
|
+
end
|
67
|
+
config_param :credentials_refresh_delay, :integer, default: 5000
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def config_param_for_sdk
|
72
|
+
config_param :http_proxy, :string, default: nil
|
73
|
+
config_param :endpoint, :string, default: nil
|
74
|
+
config_param :ssl_verify_peer, :bool, default: true
|
75
|
+
end
|
76
|
+
|
77
|
+
def config_param_for_credentials
|
78
|
+
config_param :aws_key_id, :string, default: nil, secret: true
|
79
|
+
config_param :aws_sec_key, :string, default: nil, secret: true
|
80
|
+
config_section :shared_credentials, multi: false do
|
81
|
+
config_param :profile_name, :string, default: nil
|
82
|
+
config_param :path, :string, default: nil
|
83
|
+
end
|
84
|
+
config_section :assume_role_credentials, multi: false do
|
85
|
+
config_param :role_arn, :string, secret: true
|
86
|
+
config_param :external_id, :string, default: nil, secret: true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def config_param_for_format
|
91
|
+
config_param :formatter, :string, default: 'json'
|
92
|
+
config_param :data_key, :string, default: nil
|
93
|
+
config_param :log_truncate_max_size, :integer, default: 0
|
94
|
+
end
|
95
|
+
|
96
|
+
def config_param_for_batch_request
|
97
|
+
config_param :retries_on_batch_request, :integer, default: 3
|
98
|
+
config_param :reset_backoff_if_success, :bool, default: true
|
99
|
+
config_param :batch_request_max_count, :integer, default: const_get(:BatchRequestLimitCount)
|
100
|
+
config_param :batch_request_max_size, :integer, default: const_get(:BatchRequestLimitSize)
|
101
|
+
end
|
102
|
+
|
103
|
+
def config_param_for_debug
|
104
|
+
config_param :debug, :bool, default: false
|
105
|
+
end
|
106
|
+
|
107
|
+
def request_type
|
108
|
+
const_get(:RequestType)
|
109
|
+
end
|
110
|
+
|
111
|
+
def api?
|
112
|
+
[:streams, :firehose].include?(request_type)
|
113
|
+
end
|
114
|
+
|
115
|
+
def kpl?
|
116
|
+
[:producer].include?(request_type)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|