fluent-plugin-s3 0.3.7 → 0.4.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 +7 -0
- data/.travis.yml +1 -2
- data/AUTHORS +1 -0
- data/ChangeLog +6 -0
- data/README.rdoc +62 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/fluent-plugin-s3.gemspec +2 -2
- data/lib/fluent/plugin/out_s3.rb +158 -184
- data/test/{out_s3.rb → test_out_s3.rb} +30 -2
- metadata +25 -45
- data/Gemfile.fluentd.lt.0.10.43 +0 -4
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2a53266d6e18f131684aa46dec457c99ca4978cb
|
4
|
+
data.tar.gz: ac0d869dc9b8ac27bb9a87672766dcf245e67248
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 699badd3905de4fcd736c9456d8028ba56e5fb1d55352093370678405c9320f4a5f3ceac1e781a2d6e562bbd1c4b230cd43d758f83fcfec7d9cc6a33ec8d0f9c
|
7
|
+
data.tar.gz: de5513f584b237dc4cb6b01f9ec436a61718da69f7afb4a431fd04df0ae708c609b02d2b087a2d829060380562ddd51df45d5a4ca43dced56dd0f44f2133ca66
|
data/.travis.yml
CHANGED
data/AUTHORS
CHANGED
data/ChangeLog
CHANGED
data/README.rdoc
CHANGED
@@ -31,9 +31,9 @@ Simply use RubyGems:
|
|
31
31
|
utc
|
32
32
|
</match>
|
33
33
|
|
34
|
-
[aws_key_id] AWS access key id. This parameter is required when your agent is not running on EC2 instance with an IAM
|
34
|
+
[aws_key_id] AWS access key id. This parameter is required when your agent is not running on EC2 instance with an IAM Role.
|
35
35
|
|
36
|
-
[aws_sec_key] AWS secret key. This parameter is required when your agent is not running on EC2 instance with an IAM
|
36
|
+
[aws_sec_key] AWS secret key. This parameter is required when your agent is not running on EC2 instance with an IAM Role.
|
37
37
|
|
38
38
|
[s3_bucket (required)] S3 bucket name.
|
39
39
|
|
@@ -86,6 +86,50 @@ The {fluent-mixin-config-placeholders}[https://github.com/tagomoris/fluent-mixin
|
|
86
86
|
- text
|
87
87
|
- lzo (Need lzop command)
|
88
88
|
|
89
|
+
[format] Change one line format in the S3 object. Supported formats are "out_file", "json", "ltsv" and "single_value".
|
90
|
+
|
91
|
+
- out_file (default).
|
92
|
+
|
93
|
+
time\ttag\t{..json1..}
|
94
|
+
time\ttag\t{..json2..}
|
95
|
+
...
|
96
|
+
|
97
|
+
- json
|
98
|
+
|
99
|
+
{..json1..}
|
100
|
+
{..json2..}
|
101
|
+
...
|
102
|
+
|
103
|
+
At this format, "time" and "tag" are omitted.
|
104
|
+
But you can set these information to the record by setting "include_tag_key" / "tag_key" and "include_time_key" / "time_key" option.
|
105
|
+
If you set following configuration in S3 output:
|
106
|
+
|
107
|
+
format_json true
|
108
|
+
include_time_key true
|
109
|
+
time_key log_time # default is time
|
110
|
+
|
111
|
+
then the record has log_time field.
|
112
|
+
|
113
|
+
{"log_time":"time string",...}
|
114
|
+
|
115
|
+
- ltsv
|
116
|
+
|
117
|
+
key1:value1\tkey2:value2
|
118
|
+
key1:value1\tkey2:value2
|
119
|
+
...
|
120
|
+
|
121
|
+
"ltsv" format also accepts "include_xxx" related options. See "json" section.
|
122
|
+
|
123
|
+
- single_value
|
124
|
+
|
125
|
+
Use specified value instead of entire recode. If you get '{"message":"my log"}', then contents are
|
126
|
+
|
127
|
+
my log1
|
128
|
+
my log2
|
129
|
+
...
|
130
|
+
|
131
|
+
You can change key name by "message_key" option.
|
132
|
+
|
89
133
|
[auto_create_bucket] Create S3 bucket if it does not exists. Default is true.
|
90
134
|
|
91
135
|
[check_apikey_on_start] Check AWS key on start. Default is true.
|
@@ -102,6 +146,22 @@ The {fluent-mixin-config-placeholders}[https://github.com/tagomoris/fluent-mixin
|
|
102
146
|
|
103
147
|
[utc] Use UTC instead of local time.
|
104
148
|
|
149
|
+
== IAM Policy
|
150
|
+
|
151
|
+
The following is an example for a minimal IAM policy needed to write to an s3 bucket (matches my-s3bucket/logs, my-s3bucket-test, etc.).
|
152
|
+
|
153
|
+
{ "Statement": [
|
154
|
+
{ "Effect":"Allow",
|
155
|
+
"Action":"s3:*",
|
156
|
+
"Resource":"arn:aws:s3:::my-s3bucket*"
|
157
|
+
} ]
|
158
|
+
}
|
159
|
+
|
160
|
+
Note that the bucket must already exist and *auto_create_bucket* has no effect in this case.
|
161
|
+
|
162
|
+
Refer to the {AWS documentation}[http://docs.aws.amazon.com/IAM/latest/UserGuide/ExampleIAMPolicies.html] for example policies.
|
163
|
+
|
164
|
+
Using {IAM roles}[http://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html] with a properly configured IAM policy are preferred over embedding access keys on EC2 instances.
|
105
165
|
|
106
166
|
== Website, license, et. al.
|
107
167
|
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/fluent-plugin-s3.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.homepage = "https://github.com/fluent/fluent-plugin-s3"
|
8
8
|
gem.summary = gem.description
|
9
9
|
gem.version = File.read("VERSION").strip
|
10
|
-
gem.authors = ["Sadayuki Furuhashi"]
|
10
|
+
gem.authors = ["Sadayuki Furuhashi", "Masahiro Nakagawa"]
|
11
11
|
gem.email = "frsyuki@gmail.com"
|
12
12
|
gem.has_rdoc = false
|
13
13
|
#gem.platform = Gem::Platform::RUBY
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
gem.require_paths = ['lib']
|
18
18
|
|
19
|
-
gem.add_dependency "fluentd", "~> 0.10.
|
19
|
+
gem.add_dependency "fluentd", "~> 0.10.49"
|
20
20
|
gem.add_dependency "aws-sdk", ">= 1.8.2"
|
21
21
|
gem.add_dependency "yajl-ruby", "~> 1.0"
|
22
22
|
gem.add_dependency "fluent-mixin-config-placeholders", "~> 0.2.0"
|
data/lib/fluent/plugin/out_s3.rb
CHANGED
@@ -1,219 +1,193 @@
|
|
1
1
|
module Fluent
|
2
|
+
require 'fluent/mixin/config_placeholders'
|
2
3
|
|
3
|
-
|
4
|
+
class S3Output < Fluent::TimeSlicedOutput
|
5
|
+
Fluent::Plugin.register_output('s3', self)
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
unless method_defined?(:log)
|
9
|
-
define_method(:log) { $log }
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize
|
13
|
-
super
|
14
|
-
require 'aws-sdk'
|
15
|
-
require 'zlib'
|
16
|
-
require 'time'
|
17
|
-
require 'tempfile'
|
18
|
-
require 'open3'
|
19
|
-
|
20
|
-
@use_ssl = true
|
21
|
-
end
|
22
|
-
|
23
|
-
config_param :path, :string, :default => ""
|
24
|
-
config_param :time_format, :string, :default => nil
|
25
|
-
|
26
|
-
include SetTagKeyMixin
|
27
|
-
config_set_default :include_tag_key, false
|
7
|
+
unless method_defined?(:log)
|
8
|
+
define_method(:log) { $log }
|
9
|
+
end
|
28
10
|
|
29
|
-
|
30
|
-
|
11
|
+
def initialize
|
12
|
+
super
|
13
|
+
require 'aws-sdk'
|
14
|
+
require 'zlib'
|
15
|
+
require 'time'
|
16
|
+
require 'tempfile'
|
17
|
+
require 'open3'
|
31
18
|
|
32
|
-
|
33
|
-
|
34
|
-
config_param :s3_bucket, :string
|
35
|
-
config_param :s3_endpoint, :string, :default => nil
|
36
|
-
config_param :s3_object_key_format, :string, :default => "%{path}%{time_slice}_%{index}.%{file_extension}"
|
37
|
-
config_param :store_as, :string, :default => "gzip"
|
38
|
-
config_param :command_parameter, :string, :default => nil
|
39
|
-
config_param :auto_create_bucket, :bool, :default => true
|
40
|
-
config_param :check_apikey_on_start, :bool, :default => true
|
41
|
-
config_param :proxy_uri, :string, :default => nil
|
42
|
-
config_param :reduced_redundancy, :bool, :default => false
|
19
|
+
@use_ssl = true
|
20
|
+
end
|
43
21
|
|
44
|
-
|
22
|
+
config_param :path, :string, :default => ""
|
45
23
|
|
46
|
-
|
24
|
+
config_param :aws_key_id, :string, :default => nil
|
25
|
+
config_param :aws_sec_key, :string, :default => nil
|
26
|
+
config_param :s3_bucket, :string
|
27
|
+
config_param :s3_endpoint, :string, :default => nil
|
28
|
+
config_param :s3_object_key_format, :string, :default => "%{path}%{time_slice}_%{index}.%{file_extension}"
|
29
|
+
config_param :store_as, :string, :default => "gzip"
|
30
|
+
config_param :command_parameter, :string, :default => nil
|
31
|
+
config_param :auto_create_bucket, :bool, :default => true
|
32
|
+
config_param :check_apikey_on_start, :bool, :default => true
|
33
|
+
config_param :proxy_uri, :string, :default => nil
|
34
|
+
config_param :reduced_redundancy, :bool, :default => false
|
35
|
+
config_param :format, :string, :default => 'out_file'
|
47
36
|
|
48
|
-
|
49
|
-
[:percent]
|
50
|
-
end
|
37
|
+
attr_reader :bucket
|
51
38
|
|
52
|
-
|
53
|
-
super
|
39
|
+
include Fluent::Mixin::ConfigPlaceholders
|
54
40
|
|
55
|
-
|
56
|
-
|
57
|
-
else
|
58
|
-
@format_json = false
|
41
|
+
def placeholders
|
42
|
+
[:percent]
|
59
43
|
end
|
60
44
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
45
|
+
def configure(conf)
|
46
|
+
super
|
47
|
+
|
48
|
+
if use_ssl = conf['use_ssl']
|
49
|
+
if use_ssl.empty?
|
50
|
+
@use_ssl = true
|
51
|
+
else
|
52
|
+
@use_ssl = Config.bool_value(use_ssl)
|
53
|
+
if @use_ssl.nil?
|
54
|
+
raise ConfigError, "'true' or 'false' is required for use_ssl option on s3 output"
|
55
|
+
end
|
68
56
|
end
|
69
57
|
end
|
70
|
-
end
|
71
58
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
@path_slicer = Proc.new {|path|
|
97
|
-
Time.now.utc.strftime(path)
|
98
|
-
}
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
59
|
+
@ext, @mime_type = case @store_as
|
60
|
+
when 'gzip'
|
61
|
+
['gz', 'application/x-gzip']
|
62
|
+
when 'lzo'
|
63
|
+
check_command('lzop', 'LZO')
|
64
|
+
@command_parameter = '-qf1' if @command_parameter.nil?
|
65
|
+
['lzo', 'application/x-lzop']
|
66
|
+
when 'lzma2'
|
67
|
+
check_command('xz', 'LZMA2')
|
68
|
+
@command_parameter = '-qf0' if @command_parameter.nil?
|
69
|
+
['xz', 'application/x-xz']
|
70
|
+
when 'json'
|
71
|
+
['json', 'application/json']
|
72
|
+
else
|
73
|
+
['txt', 'text/plain']
|
74
|
+
end
|
75
|
+
|
76
|
+
if format_json = conf['format_json']
|
77
|
+
$log.warn "format_json is deprecated. Use 'format json' instead"
|
78
|
+
conf['format'] = 'json'
|
79
|
+
else
|
80
|
+
conf['format'] = @format
|
81
|
+
end
|
82
|
+
@formatter = TextFormatter.create(conf)
|
102
83
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
84
|
+
if @localtime
|
85
|
+
@path_slicer = Proc.new {|path|
|
86
|
+
Time.now.strftime(path)
|
87
|
+
}
|
88
|
+
else
|
89
|
+
@path_slicer = Proc.new {|path|
|
90
|
+
Time.now.utc.strftime(path)
|
91
|
+
}
|
92
|
+
end
|
109
93
|
end
|
110
|
-
options[:s3_endpoint] = @s3_endpoint if @s3_endpoint
|
111
|
-
options[:proxy_uri] = @proxy_uri if @proxy_uri
|
112
|
-
options[:use_ssl] = @use_ssl
|
113
94
|
|
114
|
-
|
115
|
-
|
95
|
+
def start
|
96
|
+
super
|
97
|
+
options = {}
|
98
|
+
if @aws_key_id && @aws_sec_key
|
99
|
+
options[:access_key_id] = @aws_key_id
|
100
|
+
options[:secret_access_key] = @aws_sec_key
|
101
|
+
end
|
102
|
+
options[:s3_endpoint] = @s3_endpoint if @s3_endpoint
|
103
|
+
options[:proxy_uri] = @proxy_uri if @proxy_uri
|
104
|
+
options[:use_ssl] = @use_ssl
|
116
105
|
|
117
|
-
|
118
|
-
|
119
|
-
end
|
106
|
+
@s3 = AWS::S3.new(options)
|
107
|
+
@bucket = @s3.buckets[@s3_bucket]
|
120
108
|
|
121
|
-
|
122
|
-
|
123
|
-
time_str = @timef.format(time)
|
109
|
+
check_apikeys if @check_apikey_on_start
|
110
|
+
ensure_bucket
|
124
111
|
end
|
125
112
|
|
126
|
-
|
127
|
-
|
128
|
-
record[@tag_key] = tag
|
129
|
-
end
|
130
|
-
if @include_time_key
|
131
|
-
record[@time_key] = time_str
|
113
|
+
def format(tag, time, record)
|
114
|
+
@formatter.format(tag, time, record)
|
132
115
|
end
|
133
116
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
117
|
+
def write(chunk)
|
118
|
+
i = 0
|
119
|
+
|
120
|
+
begin
|
121
|
+
path = @path_slicer.call(@path)
|
122
|
+
values_for_s3_object_key = {
|
123
|
+
"path" => path,
|
124
|
+
"time_slice" => chunk.key,
|
125
|
+
"file_extension" => @ext,
|
126
|
+
"index" => i
|
127
|
+
}
|
128
|
+
s3path = @s3_object_key_format.gsub(%r(%{[^}]+})) { |expr|
|
129
|
+
values_for_s3_object_key[expr[2...expr.size-1]]
|
130
|
+
}
|
131
|
+
i += 1
|
132
|
+
end while @bucket.objects[s3path].exists?
|
133
|
+
|
134
|
+
tmp = Tempfile.new("s3-")
|
135
|
+
begin
|
136
|
+
if @store_as == "gzip"
|
137
|
+
w = Zlib::GzipWriter.new(tmp)
|
138
|
+
chunk.write_to(w)
|
139
|
+
w.close
|
140
|
+
elsif @store_as == "lzo"
|
141
|
+
w = Tempfile.new("chunk-tmp")
|
142
|
+
chunk.write_to(w)
|
143
|
+
w.close
|
144
|
+
tmp.close
|
145
|
+
# We don't check the return code because we can't recover lzop failure.
|
146
|
+
system "lzop #{@command_parameter} -o #{tmp.path} #{w.path}"
|
147
|
+
elsif @store_as == "lzma2"
|
148
|
+
w = Tempfile.new("chunk-xz-tmp")
|
149
|
+
chunk.write_to(w)
|
150
|
+
w.close
|
151
|
+
tmp.close
|
152
|
+
system "xz #{@command_parameter} -c #{w.path} > #{tmp.path}"
|
153
|
+
else
|
154
|
+
chunk.write_to(tmp)
|
155
|
+
tmp.close
|
156
|
+
end
|
157
|
+
@bucket.objects[s3path].write(Pathname.new(tmp.path), {:content_type => @mime_type,
|
158
|
+
:reduced_redundancy => @reduced_redundancy})
|
159
|
+
ensure
|
160
|
+
tmp.close(true) rescue nil
|
161
|
+
w.close rescue nil
|
162
|
+
w.unlink rescue nil
|
180
163
|
end
|
181
|
-
@bucket.objects[s3path].write(Pathname.new(tmp.path), {:content_type => @mime_type,
|
182
|
-
:reduced_redundancy => @reduced_redundancy})
|
183
|
-
ensure
|
184
|
-
tmp.close(true) rescue nil
|
185
|
-
w.close rescue nil
|
186
|
-
w.unlink rescue nil
|
187
164
|
end
|
188
|
-
end
|
189
165
|
|
190
|
-
|
166
|
+
private
|
191
167
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
168
|
+
def ensure_bucket
|
169
|
+
if !@bucket.exists?
|
170
|
+
if @auto_create_bucket
|
171
|
+
log.info "Creating bucket #{@s3_bucket} on #{@s3_endpoint}"
|
172
|
+
@s3.buckets.create(@s3_bucket)
|
173
|
+
else
|
174
|
+
raise "The specified bucket does not exist: bucket = #{@s3_bucket}"
|
175
|
+
end
|
199
176
|
end
|
200
177
|
end
|
201
|
-
end
|
202
178
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
179
|
+
def check_apikeys
|
180
|
+
@bucket.empty?
|
181
|
+
rescue
|
182
|
+
raise "aws_key_id or aws_sec_key is invalid. Please check your configuration"
|
183
|
+
end
|
208
184
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
185
|
+
def check_command(command, algo)
|
186
|
+
begin
|
187
|
+
Open3.capture3("#{command} -V")
|
188
|
+
rescue Errno::ENOENT
|
189
|
+
raise ConfigError, "'#{command}' utility must be in PATH for #{algo} compression"
|
190
|
+
end
|
214
191
|
end
|
215
192
|
end
|
216
193
|
end
|
217
|
-
|
218
|
-
|
219
|
-
end
|
@@ -119,7 +119,35 @@ class S3OutputTest < Test::Unit::TestCase
|
|
119
119
|
d.run
|
120
120
|
end
|
121
121
|
|
122
|
+
def test_format_with_format_ltsv
|
123
|
+
config = [CONFIG, 'format ltsv'].join("\n")
|
124
|
+
d = create_driver(config)
|
125
|
+
|
126
|
+
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
127
|
+
d.emit({"a"=>1, "b"=>1}, time)
|
128
|
+
d.emit({"a"=>2, "b"=>2}, time)
|
129
|
+
|
130
|
+
d.expect_format %[a:1\tb:1\n]
|
131
|
+
d.expect_format %[a:2\tb:2\n]
|
132
|
+
|
133
|
+
d.run
|
134
|
+
end
|
135
|
+
|
122
136
|
def test_format_with_format_json
|
137
|
+
config = [CONFIG, 'format json'].join("\n")
|
138
|
+
d = create_driver(config)
|
139
|
+
|
140
|
+
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
141
|
+
d.emit({"a"=>1}, time)
|
142
|
+
d.emit({"a"=>2}, time)
|
143
|
+
|
144
|
+
d.expect_format %[{"a":1}\n]
|
145
|
+
d.expect_format %[{"a":2}\n]
|
146
|
+
|
147
|
+
d.run
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_format_with_format_json_deprecated
|
123
151
|
config = [CONFIG, 'format_json true'].join("\n")
|
124
152
|
d = create_driver(config)
|
125
153
|
|
@@ -148,7 +176,7 @@ class S3OutputTest < Test::Unit::TestCase
|
|
148
176
|
end
|
149
177
|
|
150
178
|
def test_format_with_format_json_included_time
|
151
|
-
config = [CONFIG, '
|
179
|
+
config = [CONFIG, 'format json', 'include_time_key true'].join("\n")
|
152
180
|
d = create_driver(config)
|
153
181
|
|
154
182
|
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
@@ -162,7 +190,7 @@ class S3OutputTest < Test::Unit::TestCase
|
|
162
190
|
end
|
163
191
|
|
164
192
|
def test_format_with_format_json_included_tag_and_time
|
165
|
-
config = [CONFIG, '
|
193
|
+
config = [CONFIG, 'format json', 'include_tag_key true', 'include_time_key true'].join("\n")
|
166
194
|
d = create_driver(config)
|
167
195
|
|
168
196
|
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
metadata
CHANGED
@@ -1,110 +1,98 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Sadayuki Furuhashi
|
8
|
+
- Masahiro Nakagawa
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
17
|
requirements:
|
19
|
-
- - ~>
|
18
|
+
- - "~>"
|
20
19
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.10.
|
20
|
+
version: 0.10.49
|
22
21
|
type: :runtime
|
23
22
|
prerelease: false
|
24
23
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
24
|
requirements:
|
27
|
-
- - ~>
|
25
|
+
- - "~>"
|
28
26
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.10.
|
27
|
+
version: 0.10.49
|
30
28
|
- !ruby/object:Gem::Dependency
|
31
29
|
name: aws-sdk
|
32
30
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
31
|
requirements:
|
35
|
-
- -
|
32
|
+
- - ">="
|
36
33
|
- !ruby/object:Gem::Version
|
37
34
|
version: 1.8.2
|
38
35
|
type: :runtime
|
39
36
|
prerelease: false
|
40
37
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
38
|
requirements:
|
43
|
-
- -
|
39
|
+
- - ">="
|
44
40
|
- !ruby/object:Gem::Version
|
45
41
|
version: 1.8.2
|
46
42
|
- !ruby/object:Gem::Dependency
|
47
43
|
name: yajl-ruby
|
48
44
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
45
|
requirements:
|
51
|
-
- - ~>
|
46
|
+
- - "~>"
|
52
47
|
- !ruby/object:Gem::Version
|
53
48
|
version: '1.0'
|
54
49
|
type: :runtime
|
55
50
|
prerelease: false
|
56
51
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
52
|
requirements:
|
59
|
-
- - ~>
|
53
|
+
- - "~>"
|
60
54
|
- !ruby/object:Gem::Version
|
61
55
|
version: '1.0'
|
62
56
|
- !ruby/object:Gem::Dependency
|
63
57
|
name: fluent-mixin-config-placeholders
|
64
58
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
59
|
requirements:
|
67
|
-
- - ~>
|
60
|
+
- - "~>"
|
68
61
|
- !ruby/object:Gem::Version
|
69
62
|
version: 0.2.0
|
70
63
|
type: :runtime
|
71
64
|
prerelease: false
|
72
65
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
66
|
requirements:
|
75
|
-
- - ~>
|
67
|
+
- - "~>"
|
76
68
|
- !ruby/object:Gem::Version
|
77
69
|
version: 0.2.0
|
78
70
|
- !ruby/object:Gem::Dependency
|
79
71
|
name: rake
|
80
72
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
73
|
requirements:
|
83
|
-
- -
|
74
|
+
- - ">="
|
84
75
|
- !ruby/object:Gem::Version
|
85
76
|
version: 0.9.2
|
86
77
|
type: :development
|
87
78
|
prerelease: false
|
88
79
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
80
|
requirements:
|
91
|
-
- -
|
81
|
+
- - ">="
|
92
82
|
- !ruby/object:Gem::Version
|
93
83
|
version: 0.9.2
|
94
84
|
- !ruby/object:Gem::Dependency
|
95
85
|
name: flexmock
|
96
86
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
87
|
requirements:
|
99
|
-
- -
|
88
|
+
- - ">="
|
100
89
|
- !ruby/object:Gem::Version
|
101
90
|
version: 1.2.0
|
102
91
|
type: :development
|
103
92
|
prerelease: false
|
104
93
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
94
|
requirements:
|
107
|
-
- -
|
95
|
+
- - ">="
|
108
96
|
- !ruby/object:Gem::Version
|
109
97
|
version: 1.2.0
|
110
98
|
description: Amazon S3 output plugin for Fluentd event collector
|
@@ -113,46 +101,38 @@ executables: []
|
|
113
101
|
extensions: []
|
114
102
|
extra_rdoc_files: []
|
115
103
|
files:
|
116
|
-
- .travis.yml
|
104
|
+
- ".travis.yml"
|
117
105
|
- AUTHORS
|
118
106
|
- ChangeLog
|
119
107
|
- Gemfile
|
120
|
-
- Gemfile.fluentd.lt.0.10.43
|
121
108
|
- README.rdoc
|
122
109
|
- Rakefile
|
123
110
|
- VERSION
|
124
111
|
- fluent-plugin-s3.gemspec
|
125
112
|
- lib/fluent/plugin/out_s3.rb
|
126
|
-
- test/
|
113
|
+
- test/test_out_s3.rb
|
127
114
|
homepage: https://github.com/fluent/fluent-plugin-s3
|
128
115
|
licenses: []
|
116
|
+
metadata: {}
|
129
117
|
post_install_message:
|
130
118
|
rdoc_options: []
|
131
119
|
require_paths:
|
132
120
|
- lib
|
133
121
|
required_ruby_version: !ruby/object:Gem::Requirement
|
134
|
-
none: false
|
135
122
|
requirements:
|
136
|
-
- -
|
123
|
+
- - ">="
|
137
124
|
- !ruby/object:Gem::Version
|
138
125
|
version: '0'
|
139
|
-
segments:
|
140
|
-
- 0
|
141
|
-
hash: -3014844547885413145
|
142
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
-
none: false
|
144
127
|
requirements:
|
145
|
-
- -
|
128
|
+
- - ">="
|
146
129
|
- !ruby/object:Gem::Version
|
147
130
|
version: '0'
|
148
|
-
segments:
|
149
|
-
- 0
|
150
|
-
hash: -3014844547885413145
|
151
131
|
requirements: []
|
152
132
|
rubyforge_project:
|
153
|
-
rubygems_version:
|
133
|
+
rubygems_version: 2.2.2
|
154
134
|
signing_key:
|
155
|
-
specification_version:
|
135
|
+
specification_version: 4
|
156
136
|
summary: Amazon S3 output plugin for Fluentd event collector
|
157
137
|
test_files:
|
158
|
-
- test/
|
138
|
+
- test/test_out_s3.rb
|
data/Gemfile.fluentd.lt.0.10.43
DELETED