logstash-output-oss 0.1.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +2 -0
- data/CONTRIBUTORS +10 -0
- data/DEVELOPER.md +10 -0
- data/Gemfile +2 -0
- data/LICENSE +11 -0
- data/README.md +149 -0
- data/lib/com/aliyun/aliyun-java-sdk-core/3.4.0/aliyun-java-sdk-core-3.4.0.jar +0 -0
- data/lib/com/aliyun/aliyun-java-sdk-ecs/4.2.0/aliyun-java-sdk-ecs-4.2.0.jar +0 -0
- data/lib/com/aliyun/aliyun-java-sdk-ram/3.0.0/aliyun-java-sdk-ram-3.0.0.jar +0 -0
- data/lib/com/aliyun/aliyun-java-sdk-sts/3.0.0/aliyun-java-sdk-sts-3.0.0.jar +0 -0
- data/lib/com/aliyun/oss/aliyun-sdk-oss/3.4.0/aliyun-sdk-oss-3.4.0.jar +0 -0
- data/lib/com/sun/jersey/jersey-core/1.9/jersey-core-1.9.jar +0 -0
- data/lib/com/sun/jersey/jersey-json/1.9/jersey-json-1.9.jar +0 -0
- data/lib/com/sun/xml/bind/jaxb-impl/2.2.3-1/jaxb-impl-2.2.3-1.jar +0 -0
- data/lib/commons-codec/commons-codec/1.9/commons-codec-1.9.jar +0 -0
- data/lib/commons-logging/commons-logging/1.2/commons-logging-1.2.jar +0 -0
- data/lib/javax/activation/activation/1.1/activation-1.1.jar +0 -0
- data/lib/javax/xml/bind/jaxb-api/2.2.2/jaxb-api-2.2.2.jar +0 -0
- data/lib/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar +0 -0
- data/lib/logstash-output-oss_jars.rb +52 -0
- data/lib/logstash/outputs/oss.rb +288 -0
- data/lib/logstash/outputs/oss/file_generator.rb +69 -0
- data/lib/logstash/outputs/oss/file_manager.rb +87 -0
- data/lib/logstash/outputs/oss/file_uploader.rb +69 -0
- data/lib/logstash/outputs/oss/gzip_file.rb +36 -0
- data/lib/logstash/outputs/oss/rotations/hybrid_rotation.rb +24 -0
- data/lib/logstash/outputs/oss/rotations/size_based_rotation.rb +25 -0
- data/lib/logstash/outputs/oss/rotations/time_based_rotation.rb +25 -0
- data/lib/logstash/outputs/oss/temporary_file.rb +59 -0
- data/lib/logstash/outputs/oss/version.rb +14 -0
- data/lib/org/apache/httpcomponents/httpclient/4.4.1/httpclient-4.4.1.jar +0 -0
- data/lib/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1.jar +0 -0
- data/lib/org/codehaus/jackson/jackson-core-asl/1.8.3/jackson-core-asl-1.8.3.jar +0 -0
- data/lib/org/codehaus/jackson/jackson-jaxrs/1.8.3/jackson-jaxrs-1.8.3.jar +0 -0
- data/lib/org/codehaus/jackson/jackson-mapper-asl/1.8.3/jackson-mapper-asl-1.8.3.jar +0 -0
- data/lib/org/codehaus/jackson/jackson-xc/1.8.3/jackson-xc-1.8.3.jar +0 -0
- data/lib/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar +0 -0
- data/lib/org/jdom/jdom/1.1/jdom-1.1.jar +0 -0
- data/lib/stax/stax-api/1.0.1/stax-api-1.0.1.jar +0 -0
- data/logstash-output-oss.gemspec +30 -0
- data/spec/integration/common.rb +42 -0
- data/spec/integration/encoding_spec.rb +92 -0
- data/spec/integration/oss_spec.rb +47 -0
- data/spec/integration/recover_spec.rb +43 -0
- data/spec/outputs/oss/generator_spec.rb +67 -0
- data/spec/outputs/oss/rotation_spec.rb +69 -0
- data/spec/outputs/oss_spec.rb +58 -0
- metadata +206 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'logstash/devutils/rspec/spec_helper'
|
4
|
+
require 'logstash/logging/logger'
|
5
|
+
require 'logstash/outputs/oss'
|
6
|
+
require 'stud/temporary'
|
7
|
+
java_import 'com.aliyun.oss.model.GetObjectRequest'
|
8
|
+
|
9
|
+
# This file contains the common logic used by integration tests
|
10
|
+
shared_context "plugin initialize" do
|
11
|
+
let(:endpoint) { ENV['OSS_ENDPOINT'] }
|
12
|
+
let(:bucket) { ENV['OSS_BUCKET'] }
|
13
|
+
let(:access_key_id) { ENV['OSS_ACCESS_KEY'] }
|
14
|
+
let(:access_key_secret) { ENV['OSS_SECRET_KEY'] }
|
15
|
+
let(:prefix) { "logstash" }
|
16
|
+
let(:temporary_directory) { Stud::Temporary.pathname }
|
17
|
+
|
18
|
+
let(:common_configurations) do
|
19
|
+
{
|
20
|
+
"endpoint" => endpoint,
|
21
|
+
"bucket" => bucket,
|
22
|
+
"access_key_id" => access_key_id,
|
23
|
+
"access_key_secret" => access_key_secret,
|
24
|
+
"prefix" => prefix,
|
25
|
+
"size_rotate" => 1024,
|
26
|
+
"time_rotate" => 60,
|
27
|
+
"temporary_directory" => temporary_directory,
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
LogStash::Logging::Logger::configure_logging("debug") if ENV["DEBUG"]
|
32
|
+
|
33
|
+
let(:oss) { OSSClientBuilder.new().build(endpoint, access_key_id, access_key_secret) }
|
34
|
+
subject { LogStash::Outputs::OSS.new(configurations) }
|
35
|
+
end
|
36
|
+
|
37
|
+
# remove object with `prefix`
|
38
|
+
def clean_bucket
|
39
|
+
oss.listObjects(bucket, prefix).getObjectSummaries().each do |objectSummary|
|
40
|
+
oss.deleteObject(bucket, objectSummary.getKey())
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require_relative 'common'
|
5
|
+
|
6
|
+
describe 'encoding integration tests', :integration => true do
|
7
|
+
include_context 'plugin initialize'
|
8
|
+
|
9
|
+
let(:number_of_events) { 500 }
|
10
|
+
let(:batch_size) { 125 }
|
11
|
+
let(:event_encoded) { "Hello world\n" }
|
12
|
+
let(:batch) do
|
13
|
+
b = {}
|
14
|
+
number_of_events.times do
|
15
|
+
event = LogStash::Event.new({ "message" => event_encoded, "host" => "localhost", "index" => 1 })
|
16
|
+
b[event] = "#{event_encoded}"
|
17
|
+
end
|
18
|
+
b
|
19
|
+
end
|
20
|
+
|
21
|
+
before do
|
22
|
+
subject.register
|
23
|
+
|
24
|
+
batch.each_slice(batch_size) do |smaller_batch|
|
25
|
+
subject.multi_receive_encoded(smaller_batch)
|
26
|
+
sleep(1)
|
27
|
+
end
|
28
|
+
|
29
|
+
subject.close
|
30
|
+
end
|
31
|
+
|
32
|
+
after do
|
33
|
+
clean_bucket
|
34
|
+
end
|
35
|
+
|
36
|
+
################### gzip encoding integration test ###################
|
37
|
+
describe 'gzip encoding integration tests' do
|
38
|
+
let(:configurations) {
|
39
|
+
common_configurations.merge(
|
40
|
+
{
|
41
|
+
"encoding" => "gzip",
|
42
|
+
"rotation_strategy" => "time",
|
43
|
+
"time_rotate" => 0.01 # 0.01 * 60 = 0.6s
|
44
|
+
}
|
45
|
+
)
|
46
|
+
}
|
47
|
+
|
48
|
+
it 'compare file content(uncompressed) with original events' do
|
49
|
+
# read lines from oss bucket
|
50
|
+
copy_file_to_temporary_dir(temporary_directory)
|
51
|
+
|
52
|
+
expect(Dir.glob(File.join(temporary_directory, prefix, "*.gz")).inject(0) { |sum, f| sum + Zlib::GzipReader.new(File.open(f)).readlines.size }).to eq(number_of_events)
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'creates multiples files' do
|
56
|
+
expect(oss.listObjects(bucket, prefix).getObjectSummaries().size).to be_between(3, 4)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
################### plain encoding integration test ###################
|
61
|
+
describe 'plain encoding integration test' do
|
62
|
+
let(:configurations) {
|
63
|
+
common_configurations.merge(
|
64
|
+
{
|
65
|
+
"encoding" => "none",
|
66
|
+
"rotation_strategy" => "time",
|
67
|
+
"time_rotate" => 0.01 # 0.01 * 60 = 0.6s
|
68
|
+
}
|
69
|
+
)
|
70
|
+
}
|
71
|
+
|
72
|
+
it 'compare file content with original events' do
|
73
|
+
# read lines from oss bucket
|
74
|
+
copy_file_to_temporary_dir(temporary_directory)
|
75
|
+
|
76
|
+
expect(Dir.glob(File.join(temporary_directory, prefix, "*.data")).inject(0) { |sum, f| sum + File.open(f).readlines.size }).to eq(number_of_events)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'creates multiples files' do
|
80
|
+
expect(oss.listObjects(bucket, prefix).getObjectSummaries().size).to be_between(3, 4)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def copy_file_to_temporary_dir(temporary_directory)
|
85
|
+
FileUtils.rm_rf(temporary_directory)
|
86
|
+
FileUtils.mkdir_p(File.join(temporary_directory, prefix))
|
87
|
+
oss.listObjects(bucket, prefix).getObjectSummaries().each do |objectSummary|
|
88
|
+
request = GetObjectRequest.new(bucket, objectSummary.getKey())
|
89
|
+
oss.getObject(request, java.io.File.new(File.join(temporary_directory, objectSummary.getKey())))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require_relative 'common'
|
5
|
+
|
6
|
+
describe 'integration tests', :integration => true do
|
7
|
+
|
8
|
+
include_context 'plugin initialize'
|
9
|
+
|
10
|
+
let(:number_of_events) { 400000 }
|
11
|
+
let(:batch_size) { 400 }
|
12
|
+
let(:event_encoded) { "Hello world\n" }
|
13
|
+
let(:batch) do
|
14
|
+
b = {}
|
15
|
+
number_of_events.times do
|
16
|
+
event = LogStash::Event.new({ "message" => event_encoded, "host" => "localhost", "index" => Random.rand(3) })
|
17
|
+
b[event] = "#{event_encoded}"
|
18
|
+
end
|
19
|
+
b
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:configurations) {
|
23
|
+
common_configurations.merge(
|
24
|
+
{
|
25
|
+
"prefix" => "logstash/%{index}",
|
26
|
+
"size_rotate" => 13631488, # 13MB
|
27
|
+
"time_rotate" => 0.15 # 0.15 * 60 = 9s
|
28
|
+
}
|
29
|
+
)
|
30
|
+
}
|
31
|
+
|
32
|
+
before do
|
33
|
+
subject.register
|
34
|
+
end
|
35
|
+
|
36
|
+
after do
|
37
|
+
subject.close
|
38
|
+
|
39
|
+
clean_bucket
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'integration stress tests' do
|
43
|
+
100.times do
|
44
|
+
batch.each_slice(batch_size) { |smaller_batch| subject.multi_receive_encoded(smaller_batch) }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require_relative 'common'
|
5
|
+
|
6
|
+
describe 'recover integration tests', :integration => true do
|
7
|
+
|
8
|
+
include_context 'plugin initialize'
|
9
|
+
|
10
|
+
let(:configurations) { common_configurations.merge({}) }
|
11
|
+
|
12
|
+
before do
|
13
|
+
clean_bucket
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'recover files from temporary directory' do
|
17
|
+
generate_files(3)
|
18
|
+
expect(oss.listObjects(bucket, prefix).getObjectSummaries().size).to eq(3)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'recover files from empty temporary directory' do
|
22
|
+
generate_files(0)
|
23
|
+
expect(oss.listObjects(bucket, prefix).getObjectSummaries().size).to eq(0)
|
24
|
+
end
|
25
|
+
|
26
|
+
after do
|
27
|
+
clean_bucket
|
28
|
+
end
|
29
|
+
|
30
|
+
def generate_files(number_of_files)
|
31
|
+
# generate files in temporary directory
|
32
|
+
generator = LogStash::Outputs::OSS::FileGenerator.new(prefix, "gzip", temporary_directory)
|
33
|
+
number_of_files.times do
|
34
|
+
generator.current_file.write("Hello, world")
|
35
|
+
generator.current_file.close
|
36
|
+
generator.rotate
|
37
|
+
end
|
38
|
+
|
39
|
+
subject.register
|
40
|
+
|
41
|
+
subject.close
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require "logstash/devutils/rspec/spec_helper"
|
5
|
+
require 'logstash/outputs/oss'
|
6
|
+
require 'logstash/logging/logger'
|
7
|
+
|
8
|
+
describe 'file generator unit tests' do
|
9
|
+
|
10
|
+
let (:temporary_directory) { Stud::Temporary.pathname }
|
11
|
+
let (:prefix) { "logstash" }
|
12
|
+
|
13
|
+
describe 'gzip encoding generator' do
|
14
|
+
|
15
|
+
it 'gzip' do
|
16
|
+
generator = LogStash::Outputs::OSS::FileGenerator.new(prefix, "gzip", temporary_directory)
|
17
|
+
|
18
|
+
# part-0, ends with part-0.gz
|
19
|
+
elements = generator.current_file.path.to_s.split(::File::SEPARATOR)
|
20
|
+
file_name = elements.at(elements.size - 1)
|
21
|
+
expect(file_name.match(/ls.oss.*.part-0.gz/).to_s).to eq(file_name)
|
22
|
+
|
23
|
+
generator.rotate
|
24
|
+
|
25
|
+
# part-1, ends with part-1.gz
|
26
|
+
generator.current_file
|
27
|
+
elements = generator.current_file.path.to_s.split(::File::SEPARATOR)
|
28
|
+
file_name = elements.at(elements.size - 1)
|
29
|
+
expect(file_name.match(/ls.oss.*.part-1.gz/).to_s).to eq(file_name)
|
30
|
+
|
31
|
+
generator.rotate
|
32
|
+
|
33
|
+
# part-2, ends with part-2.gz
|
34
|
+
generator.current_file
|
35
|
+
elements = generator.current_file.path.to_s.split(::File::SEPARATOR)
|
36
|
+
file_name = elements.at(elements.size - 1)
|
37
|
+
expect(file_name.match(/ls.oss.*.part-2.gz/).to_s).to eq(file_name)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'plain encoding generator' do
|
42
|
+
|
43
|
+
it 'plain' do
|
44
|
+
generator = LogStash::Outputs::OSS::FileGenerator.new(prefix, "none", temporary_directory)
|
45
|
+
# part-0, ends with part-0.data
|
46
|
+
elements = generator.current_file.path.to_s.split(::File::SEPARATOR)
|
47
|
+
file_name = elements.at(elements.size - 1)
|
48
|
+
expect(file_name.match(/ls.oss.*.part-0.data/).to_s).to eq(file_name)
|
49
|
+
|
50
|
+
generator.rotate
|
51
|
+
|
52
|
+
# part-1, ends with part-1.data
|
53
|
+
generator.current_file
|
54
|
+
elements = generator.current_file.path.to_s.split(::File::SEPARATOR)
|
55
|
+
file_name = elements.at(elements.size - 1)
|
56
|
+
expect(file_name.match(/ls.oss.*.part-1.data/).to_s).to eq(file_name)
|
57
|
+
|
58
|
+
generator.rotate
|
59
|
+
|
60
|
+
# part-2, ends with part-2.data
|
61
|
+
generator.current_file
|
62
|
+
elements = generator.current_file.path.to_s.split(::File::SEPARATOR)
|
63
|
+
file_name = elements.at(elements.size - 1)
|
64
|
+
expect(file_name.match(/ls.oss.*.part-2.data/).to_s).to eq(file_name)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require 'logstash/devutils/rspec/spec_helper'
|
5
|
+
require 'logstash/logging/logger'
|
6
|
+
require 'logstash/outputs/oss'
|
7
|
+
|
8
|
+
describe 'rotation unit tests' do
|
9
|
+
|
10
|
+
let (:temporary_directory) { Stud::Temporary.pathname }
|
11
|
+
let (:prefix) { "logstash" }
|
12
|
+
let (:encoding) { "none" }
|
13
|
+
let(:event) { "Hello world\n" }
|
14
|
+
|
15
|
+
it 'size based rotation unit tests' do
|
16
|
+
size_based_rotation = LogStash::Outputs::OSS::SizeBasedRotation.new(1024)
|
17
|
+
expect(size_based_rotation.needs_periodic_check?).to be(false)
|
18
|
+
|
19
|
+
generator = LogStash::Outputs::OSS::FileGenerator.new(prefix, encoding, temporary_directory)
|
20
|
+
|
21
|
+
generator.current_file.write(event)
|
22
|
+
expect(size_based_rotation.rotate?(generator.current_file)).to be(false)
|
23
|
+
|
24
|
+
1024.times do
|
25
|
+
generator.current_file.write(event)
|
26
|
+
end
|
27
|
+
|
28
|
+
expect(size_based_rotation.rotate?(generator.current_file)).to be(true)
|
29
|
+
|
30
|
+
generator.current_file.write(event)
|
31
|
+
|
32
|
+
expect(size_based_rotation.rotate?(generator.current_file)).to be(true)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'time based rotation unit tests' do
|
36
|
+
time_based_rotation = LogStash::Outputs::OSS::TimeBasedRotation.new(0.05)
|
37
|
+
expect(time_based_rotation.needs_periodic_check?).to be(true)
|
38
|
+
|
39
|
+
generator = LogStash::Outputs::OSS::FileGenerator.new(prefix, encoding, temporary_directory)
|
40
|
+
|
41
|
+
generator.current_file.write(event)
|
42
|
+
expect(time_based_rotation.rotate?(generator.current_file)).to be(false)
|
43
|
+
|
44
|
+
sleep(1)
|
45
|
+
|
46
|
+
expect(time_based_rotation.rotate?(generator.current_file)).to be(false)
|
47
|
+
|
48
|
+
sleep(2)
|
49
|
+
|
50
|
+
expect(time_based_rotation.rotate?(generator.current_file)).to be(true)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'hybrid rotation unit tests' do
|
54
|
+
hybrid_rotation = LogStash::Outputs::OSS::HybridRotation.new(1024, 0.05)
|
55
|
+
expect(hybrid_rotation.needs_periodic_check?).to be(true)
|
56
|
+
|
57
|
+
generator = LogStash::Outputs::OSS::FileGenerator.new(prefix, encoding, temporary_directory)
|
58
|
+
|
59
|
+
generator.current_file.write(event)
|
60
|
+
|
61
|
+
expect(hybrid_rotation.rotate?(generator.current_file)).to be(false)
|
62
|
+
|
63
|
+
1024.times do
|
64
|
+
generator.current_file.write(event)
|
65
|
+
end
|
66
|
+
|
67
|
+
expect(hybrid_rotation.rotate?(generator.current_file)).to be(true)
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "logstash/devutils/rspec/spec_helper"
|
3
|
+
require "logstash/outputs/oss"
|
4
|
+
require "logstash/codecs/plain"
|
5
|
+
require "logstash/event"
|
6
|
+
|
7
|
+
describe LogStash::Outputs::OSS do
|
8
|
+
let(:options) {
|
9
|
+
{
|
10
|
+
"endpoint" => "oss-cn-zhangjiakou.aliyuncs.com",
|
11
|
+
"bucket" => "bucket",
|
12
|
+
"prefix" => "logstash/%{index}",
|
13
|
+
"recover" => true,
|
14
|
+
"access_key_id" => "access_key_id",
|
15
|
+
"access_key_secret" => "access_key_secret",
|
16
|
+
"encoding" => "none"
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
describe 'invalid configurations' do
|
21
|
+
it 'validate rotate' do
|
22
|
+
oss = described_class.new(options.merge({ "size_rotate" => -1, "time_rotate" => -1 }))
|
23
|
+
expect { oss.register }.to raise_error(LogStash::ConfigurationError)
|
24
|
+
|
25
|
+
oss = described_class.new(options.merge({ "size_rotate" => -1 }))
|
26
|
+
expect { oss.register }.to raise_error(LogStash::ConfigurationError)
|
27
|
+
|
28
|
+
oss = described_class.new(options.merge({ "time_rotate" => -1 }))
|
29
|
+
expect { oss.register }.to raise_error(LogStash::ConfigurationError)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
it 'validate upload configurations' do
|
34
|
+
oss = described_class.new(options.merge({ "upload_workers_count" => -1, "upload_queue_size" => -1 }))
|
35
|
+
expect { oss.register }.to raise_error(LogStash::ConfigurationError)
|
36
|
+
|
37
|
+
oss = described_class.new(options.merge({ "upload_workers_count" => -1 }))
|
38
|
+
expect { oss.register }.to raise_error(LogStash::ConfigurationError)
|
39
|
+
|
40
|
+
oss = described_class.new(options.merge({ "upload_queue_size" => -1 }))
|
41
|
+
expect { oss.register }.to raise_error(LogStash::ConfigurationError)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'validate invalid temporary directory' do
|
45
|
+
dir = 'a_' + Time.now.to_i.to_s
|
46
|
+
file_name = dir + '/1.gz'
|
47
|
+
system('mkdir -p ' + dir + ' && touch ' + file_name)
|
48
|
+
oss = described_class.new(options.merge({ "temporary_directory" => file_name }))
|
49
|
+
expect { oss.register }.to raise_error(LogStash::ConfigurationError)
|
50
|
+
system('rm -rf ' + dir)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'validate invalid additional oss configurations' do
|
54
|
+
oss = described_class.new(options.merge({ "additional_oss_settings" => { "max_connections_to_oss" => -1} }))
|
55
|
+
expect { oss.register }.to raise_error(LogStash::ConfigurationError)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
metadata
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: logstash-output-oss
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: java
|
6
|
+
authors:
|
7
|
+
- jinhu.wu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-01-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '2.0'
|
19
|
+
name: logstash-core-plugin-api
|
20
|
+
prerelease: false
|
21
|
+
type: :runtime
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.0'
|
33
|
+
name: logstash-codec-plain
|
34
|
+
prerelease: false
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.0'
|
47
|
+
name: concurrent-ruby
|
48
|
+
prerelease: false
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.3'
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 2.3.9
|
64
|
+
name: uuid
|
65
|
+
prerelease: false
|
66
|
+
type: :runtime
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '2.3'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 2.3.9
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '1.3'
|
81
|
+
name: logstash-devutils
|
82
|
+
prerelease: false
|
83
|
+
type: :development
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '1.3'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '3.0'
|
95
|
+
name: logstash-codec-line
|
96
|
+
prerelease: false
|
97
|
+
type: :development
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '3.0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
requirement: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0.3'
|
109
|
+
name: jar-dependencies
|
110
|
+
prerelease: false
|
111
|
+
type: :runtime
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0.3'
|
117
|
+
description: This gem is a Logstash plugin required to be installed on top of the
|
118
|
+
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gem-name. This
|
119
|
+
gem is not a stand-alone program
|
120
|
+
email: jinhu.wu.nju@gmail.com
|
121
|
+
executables: []
|
122
|
+
extensions: []
|
123
|
+
extra_rdoc_files: []
|
124
|
+
files:
|
125
|
+
- CHANGELOG.md
|
126
|
+
- CONTRIBUTORS
|
127
|
+
- DEVELOPER.md
|
128
|
+
- Gemfile
|
129
|
+
- LICENSE
|
130
|
+
- README.md
|
131
|
+
- lib/com/aliyun/aliyun-java-sdk-core/3.4.0/aliyun-java-sdk-core-3.4.0.jar
|
132
|
+
- lib/com/aliyun/aliyun-java-sdk-ecs/4.2.0/aliyun-java-sdk-ecs-4.2.0.jar
|
133
|
+
- lib/com/aliyun/aliyun-java-sdk-ram/3.0.0/aliyun-java-sdk-ram-3.0.0.jar
|
134
|
+
- lib/com/aliyun/aliyun-java-sdk-sts/3.0.0/aliyun-java-sdk-sts-3.0.0.jar
|
135
|
+
- lib/com/aliyun/oss/aliyun-sdk-oss/3.4.0/aliyun-sdk-oss-3.4.0.jar
|
136
|
+
- lib/com/sun/jersey/jersey-core/1.9/jersey-core-1.9.jar
|
137
|
+
- lib/com/sun/jersey/jersey-json/1.9/jersey-json-1.9.jar
|
138
|
+
- lib/com/sun/xml/bind/jaxb-impl/2.2.3-1/jaxb-impl-2.2.3-1.jar
|
139
|
+
- lib/commons-codec/commons-codec/1.9/commons-codec-1.9.jar
|
140
|
+
- lib/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
|
141
|
+
- lib/javax/activation/activation/1.1/activation-1.1.jar
|
142
|
+
- lib/javax/xml/bind/jaxb-api/2.2.2/jaxb-api-2.2.2.jar
|
143
|
+
- lib/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar
|
144
|
+
- lib/logstash-output-oss_jars.rb
|
145
|
+
- lib/logstash/outputs/oss.rb
|
146
|
+
- lib/logstash/outputs/oss/file_generator.rb
|
147
|
+
- lib/logstash/outputs/oss/file_manager.rb
|
148
|
+
- lib/logstash/outputs/oss/file_uploader.rb
|
149
|
+
- lib/logstash/outputs/oss/gzip_file.rb
|
150
|
+
- lib/logstash/outputs/oss/rotations/hybrid_rotation.rb
|
151
|
+
- lib/logstash/outputs/oss/rotations/size_based_rotation.rb
|
152
|
+
- lib/logstash/outputs/oss/rotations/time_based_rotation.rb
|
153
|
+
- lib/logstash/outputs/oss/temporary_file.rb
|
154
|
+
- lib/logstash/outputs/oss/version.rb
|
155
|
+
- lib/org/apache/httpcomponents/httpclient/4.4.1/httpclient-4.4.1.jar
|
156
|
+
- lib/org/apache/httpcomponents/httpcore/4.4.1/httpcore-4.4.1.jar
|
157
|
+
- lib/org/codehaus/jackson/jackson-core-asl/1.8.3/jackson-core-asl-1.8.3.jar
|
158
|
+
- lib/org/codehaus/jackson/jackson-jaxrs/1.8.3/jackson-jaxrs-1.8.3.jar
|
159
|
+
- lib/org/codehaus/jackson/jackson-mapper-asl/1.8.3/jackson-mapper-asl-1.8.3.jar
|
160
|
+
- lib/org/codehaus/jackson/jackson-xc/1.8.3/jackson-xc-1.8.3.jar
|
161
|
+
- lib/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar
|
162
|
+
- lib/org/jdom/jdom/1.1/jdom-1.1.jar
|
163
|
+
- lib/stax/stax-api/1.0.1/stax-api-1.0.1.jar
|
164
|
+
- logstash-output-oss.gemspec
|
165
|
+
- spec/integration/common.rb
|
166
|
+
- spec/integration/encoding_spec.rb
|
167
|
+
- spec/integration/oss_spec.rb
|
168
|
+
- spec/integration/recover_spec.rb
|
169
|
+
- spec/outputs/oss/generator_spec.rb
|
170
|
+
- spec/outputs/oss/rotation_spec.rb
|
171
|
+
- spec/outputs/oss_spec.rb
|
172
|
+
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
173
|
+
licenses:
|
174
|
+
- Apache-2.0
|
175
|
+
metadata:
|
176
|
+
logstash_plugin: 'true'
|
177
|
+
logstash_group: output
|
178
|
+
post_install_message:
|
179
|
+
rdoc_options: []
|
180
|
+
require_paths:
|
181
|
+
- lib
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
requirements:
|
193
|
+
- jar com.aliyun.oss:aliyun-sdk-oss, 3.4.0
|
194
|
+
rubyforge_project:
|
195
|
+
rubygems_version: 2.7.6
|
196
|
+
signing_key:
|
197
|
+
specification_version: 4
|
198
|
+
summary: Sends Logstash events to the Aliyun Object Storage Service
|
199
|
+
test_files:
|
200
|
+
- spec/integration/common.rb
|
201
|
+
- spec/integration/encoding_spec.rb
|
202
|
+
- spec/integration/oss_spec.rb
|
203
|
+
- spec/integration/recover_spec.rb
|
204
|
+
- spec/outputs/oss/generator_spec.rb
|
205
|
+
- spec/outputs/oss/rotation_spec.rb
|
206
|
+
- spec/outputs/oss_spec.rb
|