fluent-plugin-td 0.10.27 → 0.10.28
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/ChangeLog +6 -0
- data/fluent-plugin-td.gemspec +1 -0
- data/lib/fluent/plugin/out_tdlog.rb +2 -0
- data/lib/fluent/plugin/td_plugin_version.rb +1 -1
- metadata +5 -7
- data/lib/fluent/plugin/out_tditem.rb +0 -101
- data/test/plugin/test_out_tditem.rb +0 -99
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94a57a8ecc7cd03af85dfacdce2623dabf6862c7
|
4
|
+
data.tar.gz: 7e5046ff0e73947ce69d7d3daa40875f3c74be83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07b585a15dad7100ab91e7316c3248772233c70268139b6f762d02bdb8f356b9dbbe06b4c04dac015a92e483e2e4143c77d79ce7a66d6c0c5e4d489101de7645
|
7
|
+
data.tar.gz: fd1d7f3e57dad3acce19569a1e575b7c167c06209a9757a6517e3c8450b78e7e89eef026ab5562d47bd127c5925c3ed284d8982678e1a7283e8a08aeb94dd7c1
|
data/ChangeLog
CHANGED
data/fluent-plugin-td.gemspec
CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
17
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
gem.require_paths = ['lib']
|
19
|
+
gem.license = "Apache-2.0"
|
19
20
|
|
20
21
|
gem.add_dependency "fluentd", [">= 0.10.27", "< 2"]
|
21
22
|
gem.add_dependency "td-client", "~> 0.8.66"
|
@@ -171,6 +171,7 @@ module Fluent
|
|
171
171
|
|
172
172
|
FileUtils.mkdir_p(@tmpdir) unless @tmpdir.nil?
|
173
173
|
f = Tempfile.new("tdlog-#{chunk.key}-", @tmpdir)
|
174
|
+
f.binmode
|
174
175
|
|
175
176
|
size = if @use_gzip_command
|
176
177
|
gzip_by_command(chunk, f)
|
@@ -190,6 +191,7 @@ module Fluent
|
|
190
191
|
chunk.path
|
191
192
|
else
|
192
193
|
w = Tempfile.new("gzip-tdlog-#{chunk.key}-", @tmpdir)
|
194
|
+
w.binmode
|
193
195
|
chunk.write_to(w)
|
194
196
|
w.close
|
195
197
|
w.path
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-td
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Treasure Data, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -116,15 +116,14 @@ files:
|
|
116
116
|
- Rakefile
|
117
117
|
- example.conf
|
118
118
|
- fluent-plugin-td.gemspec
|
119
|
-
- lib/fluent/plugin/out_tditem.rb
|
120
119
|
- lib/fluent/plugin/out_tdlog.rb
|
121
120
|
- lib/fluent/plugin/td_plugin_util.rb
|
122
121
|
- lib/fluent/plugin/td_plugin_version.rb
|
123
|
-
- test/plugin/test_out_tditem.rb
|
124
122
|
- test/plugin/test_out_tdlog.rb
|
125
123
|
- test/test_helper.rb
|
126
124
|
homepage: http://www.treasuredata.com/
|
127
|
-
licenses:
|
125
|
+
licenses:
|
126
|
+
- Apache-2.0
|
128
127
|
metadata: {}
|
129
128
|
post_install_message:
|
130
129
|
rdoc_options: []
|
@@ -142,11 +141,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
141
|
version: '0'
|
143
142
|
requirements: []
|
144
143
|
rubyforge_project:
|
145
|
-
rubygems_version: 2.
|
144
|
+
rubygems_version: 2.4.5.1
|
146
145
|
signing_key:
|
147
146
|
specification_version: 4
|
148
147
|
summary: Treasure Data Cloud Data Service plugin for Fluentd
|
149
148
|
test_files:
|
150
|
-
- test/plugin/test_out_tditem.rb
|
151
149
|
- test/plugin/test_out_tdlog.rb
|
152
150
|
- test/test_helper.rb
|
@@ -1,101 +0,0 @@
|
|
1
|
-
require 'td-client'
|
2
|
-
require 'fluent/plugin/td_plugin_version'
|
3
|
-
|
4
|
-
module Fluent
|
5
|
-
class TreasureDataItemOutput < BufferedOutput
|
6
|
-
Plugin.register_output('tditem', self)
|
7
|
-
|
8
|
-
require_relative 'td_plugin_util'
|
9
|
-
include TDPluginUtil
|
10
|
-
|
11
|
-
IMPORT_SIZE_LIMIT = 32 * 1024 * 1024
|
12
|
-
|
13
|
-
# To support log_level option since Fluentd v0.10.43
|
14
|
-
unless method_defined?(:log)
|
15
|
-
define_method(:log) { $log }
|
16
|
-
end
|
17
|
-
|
18
|
-
config_param :apikey, :string, :secret => true
|
19
|
-
config_param :database, :string
|
20
|
-
config_param :table, :string
|
21
|
-
config_param :tmpdir, :string, :default => nil
|
22
|
-
#config_param :auto_create_table, :bool, :default => true # TODO: implement if user wants this feature
|
23
|
-
|
24
|
-
config_param :endpoint, :string, :default => TreasureData::API::NEW_DEFAULT_ENDPOINT
|
25
|
-
config_param :use_ssl, :bool, :default => true
|
26
|
-
config_param :http_proxy, :string, :default => nil
|
27
|
-
config_param :connect_timeout, :integer, :default => nil
|
28
|
-
config_param :read_timeout, :integer, :default => nil
|
29
|
-
config_param :send_timeout, :integer, :default => nil
|
30
|
-
config_set_default :buffer_type, 'file'
|
31
|
-
config_set_default :flush_interval, 300
|
32
|
-
|
33
|
-
def initialize
|
34
|
-
super
|
35
|
-
|
36
|
-
@auto_create_table = false
|
37
|
-
@tmpdir_prefix = 'tditem-'.freeze
|
38
|
-
@key_num_limit = 1024 # Item table default limitation
|
39
|
-
@record_size_limit = 32 * 1024 * 1024 # TODO
|
40
|
-
@empty_gz_data = TreasureData::API.create_empty_gz_data
|
41
|
-
@user_agent = "fluent-plugin-td-item: #{TreasureDataPlugin::VERSION}".freeze
|
42
|
-
end
|
43
|
-
|
44
|
-
def configure(conf)
|
45
|
-
super
|
46
|
-
|
47
|
-
# overwrite default value of buffer_chunk_limit
|
48
|
-
if @buffer.respond_to?(:buffer_chunk_limit=) && !conf.has_key?('buffer_chunk_limit')
|
49
|
-
@buffer.buffer_chunk_limit = IMPORT_SIZE_LIMIT
|
50
|
-
end
|
51
|
-
|
52
|
-
validate_database_and_table_name(@database, @table, conf)
|
53
|
-
@key = "#{@database}.#{@table}".freeze
|
54
|
-
@use_ssl = parse_bool_parameter(@use_ssl) if @use_ssl.instance_of?(String)
|
55
|
-
FileUtils.mkdir_p(@tmpdir) unless @tmpdir.nil?
|
56
|
-
end
|
57
|
-
|
58
|
-
def start
|
59
|
-
super
|
60
|
-
|
61
|
-
client_opts = {
|
62
|
-
:ssl => @use_ssl, :http_proxy => @http_proxy, :user_agent => @user_agent, :endpoint => @endpoint,
|
63
|
-
:connect_timeout => @connect_timeout, :read_timeout => @read_timeout, :send_timeout => @send_timeout
|
64
|
-
}
|
65
|
-
@client = TreasureData::Client.new(@apikey, client_opts)
|
66
|
-
|
67
|
-
check_table_existence(@database, @table)
|
68
|
-
end
|
69
|
-
|
70
|
-
def emit(tag, es, chain)
|
71
|
-
super(tag, es, chain, @key)
|
72
|
-
end
|
73
|
-
|
74
|
-
def format_stream(tag, es)
|
75
|
-
out = ''
|
76
|
-
off = out.bytesize
|
77
|
-
es.each { |time, record|
|
78
|
-
if record.size > @key_num_limit
|
79
|
-
log.error "Too many number of keys (#{record.size} keys)" # TODO include summary of the record
|
80
|
-
next
|
81
|
-
end
|
82
|
-
|
83
|
-
begin
|
84
|
-
record.to_msgpack(out)
|
85
|
-
rescue RangeError
|
86
|
-
TreasureData::API.normalized_msgpack(record, out)
|
87
|
-
end
|
88
|
-
|
89
|
-
noff = out.bytesize
|
90
|
-
sz = noff - off
|
91
|
-
if sz > @record_size_limit
|
92
|
-
# TODO don't raise error
|
93
|
-
#raise "Size of a record too large (#{sz} bytes)" # TODO include summary of the record
|
94
|
-
log.warn "Size of a record too large (#{sz} bytes): #{summarize_record(record)}"
|
95
|
-
end
|
96
|
-
off = noff
|
97
|
-
}
|
98
|
-
out
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'fluent/plugin/out_tditem'
|
3
|
-
|
4
|
-
class TreasureDataItemOutputTest < Test::Unit::TestCase
|
5
|
-
def setup
|
6
|
-
Fluent::Test.setup
|
7
|
-
end
|
8
|
-
|
9
|
-
DEFAULT_CONFIG = %[
|
10
|
-
database test
|
11
|
-
table table
|
12
|
-
]
|
13
|
-
|
14
|
-
def create_driver(conf = DEFAULT_CONFIG)
|
15
|
-
config = %[
|
16
|
-
apikey testkey
|
17
|
-
buffer_type memory
|
18
|
-
] + conf
|
19
|
-
|
20
|
-
Fluent::Test::BufferedOutputTestDriver.new(Fluent::TreasureDataItemOutput) do
|
21
|
-
def write(chunk)
|
22
|
-
# TestDriver doesn't call acutual Output#emit so set key to get database and table in this place.
|
23
|
-
chunk.instance_variable_set(:@key, @key)
|
24
|
-
super(chunk)
|
25
|
-
end
|
26
|
-
end.configure(config)
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_configure
|
30
|
-
d = create_driver
|
31
|
-
|
32
|
-
assert_equal('testkey', d.instance.apikey)
|
33
|
-
assert_equal('test', d.instance.database)
|
34
|
-
assert_equal('table', d.instance.table)
|
35
|
-
assert_equal(true, d.instance.use_ssl)
|
36
|
-
assert_equal('memory', d.instance.buffer_type)
|
37
|
-
assert_equal(300, d.instance.flush_interval)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_configure_with_invalid_database
|
41
|
-
assert_raise(Fluent::ConfigError) {
|
42
|
-
create_driver(%[
|
43
|
-
database a
|
44
|
-
table table
|
45
|
-
])
|
46
|
-
}
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_configure_with_invalid_table
|
50
|
-
assert_raise(Fluent::ConfigError) {
|
51
|
-
create_driver(%[
|
52
|
-
database test
|
53
|
-
table 1
|
54
|
-
])
|
55
|
-
}
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_emit
|
59
|
-
d = create_driver
|
60
|
-
time, records = stub_seed_values
|
61
|
-
stub_td_import_request(stub_request_body(records), d.instance.database, d.instance.table)
|
62
|
-
|
63
|
-
records.each { |record|
|
64
|
-
d.emit(record, time)
|
65
|
-
}
|
66
|
-
d.run
|
67
|
-
|
68
|
-
assert_equal('TD1 testkey', @auth_header)
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_emit_with_endpoint
|
72
|
-
d = create_driver(DEFAULT_CONFIG + "endpoint foo.bar.baz")
|
73
|
-
opts = {:endpoint => 'foo.bar.baz'}
|
74
|
-
time, records = stub_seed_values
|
75
|
-
stub_td_import_request(stub_request_body(records), d.instance.database, d.instance.table, opts)
|
76
|
-
|
77
|
-
records.each { |record|
|
78
|
-
d.emit(record, time)
|
79
|
-
}
|
80
|
-
d.run
|
81
|
-
|
82
|
-
assert_equal('TD1 testkey', @auth_header)
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_emit_with_too_many_keys
|
86
|
-
d = create_driver(DEFAULT_CONFIG + "endpoint foo.bar.baz")
|
87
|
-
opts = {:endpoint => 'foo.bar.baz'}
|
88
|
-
time, _ = stub_seed_values
|
89
|
-
stub_td_import_request(stub_request_body([]), d.instance.database, d.instance.table, opts)
|
90
|
-
|
91
|
-
d.emit(create_too_many_keys_record, time)
|
92
|
-
d.run
|
93
|
-
|
94
|
-
assert_equal 0, d.emits.size
|
95
|
-
assert d.instance.log.logs.select{ |line|
|
96
|
-
line =~ / \[error\]: Too many number of keys/
|
97
|
-
}.size == 1, "too many keys error is not logged"
|
98
|
-
end
|
99
|
-
end
|