fluent-plugin-s3 0.3.7 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -4,12 +4,11 @@ rvm:
4
4
  - 1.9.2
5
5
  - 1.9.3
6
6
  - 2.0.0
7
- - 2.1.0
7
+ - 2.1
8
8
  - rbx
9
9
 
10
10
  gemfile:
11
11
  - Gemfile
12
- - Gemfile.fluentd.lt.0.10.43
13
12
 
14
13
  branches:
15
14
  only:
data/AUTHORS CHANGED
@@ -1 +1,2 @@
1
1
  FURUHASHI Sadayuki <frsyuki _at_ gmail.com>
2
+ MASAHIRO Nakagawa <repeatedly _at_ gmail.com>
data/ChangeLog CHANGED
@@ -1,3 +1,9 @@
1
+ Release 0.4.0 - 2014/06/06
2
+
3
+ * Add 'format' option to change one line format
4
+ * Update fluentd dependency to v0.10.49
5
+
6
+
1
7
  Release 0.3.7 - 2014/03/07
2
8
 
3
9
  * Support lzma2 compression using 'xz' command
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 Instance Profile.
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 Instance Profile.
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
@@ -6,7 +6,7 @@ require 'rake/testtask'
6
6
 
7
7
  Rake::TestTask.new(:test) do |test|
8
8
  test.libs << 'lib' << 'test'
9
- test.test_files = FileList['test/*.rb']
9
+ test.test_files = FileList['test/test_*.rb']
10
10
  test.verbose = true
11
11
  end
12
12
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.4.0
@@ -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.0"
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"
@@ -1,219 +1,193 @@
1
1
  module Fluent
2
+ require 'fluent/mixin/config_placeholders'
2
3
 
3
- require 'fluent/mixin/config_placeholders'
4
+ class S3Output < Fluent::TimeSlicedOutput
5
+ Fluent::Plugin.register_output('s3', self)
4
6
 
5
- class S3Output < Fluent::TimeSlicedOutput
6
- Fluent::Plugin.register_output('s3', self)
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
- include SetTimeKeyMixin
30
- config_set_default :include_time_key, false
11
+ def initialize
12
+ super
13
+ require 'aws-sdk'
14
+ require 'zlib'
15
+ require 'time'
16
+ require 'tempfile'
17
+ require 'open3'
31
18
 
32
- config_param :aws_key_id, :string, :default => nil
33
- config_param :aws_sec_key, :string, :default => nil
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
- attr_reader :bucket
22
+ config_param :path, :string, :default => ""
45
23
 
46
- include Fluent::Mixin::ConfigPlaceholders
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
- def placeholders
49
- [:percent]
50
- end
37
+ attr_reader :bucket
51
38
 
52
- def configure(conf)
53
- super
39
+ include Fluent::Mixin::ConfigPlaceholders
54
40
 
55
- if format_json = conf['format_json']
56
- @format_json = true
57
- else
58
- @format_json = false
41
+ def placeholders
42
+ [:percent]
59
43
  end
60
44
 
61
- if use_ssl = conf['use_ssl']
62
- if use_ssl.empty?
63
- @use_ssl = true
64
- else
65
- @use_ssl = Config.bool_value(use_ssl)
66
- if @use_ssl.nil?
67
- raise ConfigError, "'true' or 'false' is required for use_ssl option on s3 output"
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
- @ext, @mime_type = case @store_as
73
- when 'gzip'
74
- ['gz', 'application/x-gzip']
75
- when 'lzo'
76
- check_command('lzop', 'LZO')
77
- @command_parameter = '-qf1' if @command_parameter.nil?
78
- ['lzo', 'application/x-lzop']
79
- when 'lzma2'
80
- check_command('xz', 'LZMA2')
81
- @command_parameter = '-qf0' if @command_parameter.nil?
82
- ['xz', 'application/x-xz']
83
- when 'json'
84
- ['json', 'application/json']
85
- else
86
- ['txt', 'text/plain']
87
- end
88
-
89
- @timef = TimeFormatter.new(@time_format, @localtime)
90
-
91
- if @localtime
92
- @path_slicer = Proc.new {|path|
93
- Time.now.strftime(path)
94
- }
95
- else
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
- def start
104
- super
105
- options = {}
106
- if @aws_key_id && @aws_sec_key
107
- options[:access_key_id] = @aws_key_id
108
- options[:secret_access_key] = @aws_sec_key
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
- @s3 = AWS::S3.new(options)
115
- @bucket = @s3.buckets[@s3_bucket]
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
- check_apikeys if @check_apikey_on_start
118
- ensure_bucket
119
- end
106
+ @s3 = AWS::S3.new(options)
107
+ @bucket = @s3.buckets[@s3_bucket]
120
108
 
121
- def format(tag, time, record)
122
- if @include_time_key || !@format_json
123
- time_str = @timef.format(time)
109
+ check_apikeys if @check_apikey_on_start
110
+ ensure_bucket
124
111
  end
125
112
 
126
- # copied from each mixin because current TimeSlicedOutput can't support mixins.
127
- if @include_tag_key
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
- if @format_json
135
- Yajl.dump(record) + "\n"
136
- else
137
- "#{time_str}\t#{tag}\t#{Yajl.dump(record)}\n"
138
- end
139
- end
140
-
141
- def write(chunk)
142
- i = 0
143
-
144
- begin
145
- path = @path_slicer.call(@path)
146
- values_for_s3_object_key = {
147
- "path" => path,
148
- "time_slice" => chunk.key,
149
- "file_extension" => @ext,
150
- "index" => i
151
- }
152
- s3path = @s3_object_key_format.gsub(%r(%{[^}]+})) { |expr|
153
- values_for_s3_object_key[expr[2...expr.size-1]]
154
- }
155
- i += 1
156
- end while @bucket.objects[s3path].exists?
157
-
158
- tmp = Tempfile.new("s3-")
159
- begin
160
- if @store_as == "gzip"
161
- w = Zlib::GzipWriter.new(tmp)
162
- chunk.write_to(w)
163
- w.close
164
- elsif @store_as == "lzo"
165
- w = Tempfile.new("chunk-tmp")
166
- chunk.write_to(w)
167
- w.close
168
- tmp.close
169
- # We don't check the return code because we can't recover lzop failure.
170
- system "lzop #{@command_parameter} -o #{tmp.path} #{w.path}"
171
- elsif @store_as == "lzma2"
172
- w = Tempfile.new("chunk-xz-tmp")
173
- chunk.write_to(w)
174
- w.close
175
- tmp.close
176
- system "xz #{@command_parameter} -c #{w.path} > #{tmp.path}"
177
- else
178
- chunk.write_to(tmp)
179
- tmp.close
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
- private
166
+ private
191
167
 
192
- def ensure_bucket
193
- if !@bucket.exists?
194
- if @auto_create_bucket
195
- log.info "Creating bucket #{@s3_bucket} on #{@s3_endpoint}"
196
- @s3.buckets.create(@s3_bucket)
197
- else
198
- raise "The specified bucket does not exist: bucket = #{@s3_bucket}"
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
- def check_apikeys
204
- @bucket.empty?
205
- rescue
206
- raise "aws_key_id or aws_sec_key is invalid. Please check your configuration"
207
- end
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
- def check_command(command, algo)
210
- begin
211
- Open3.capture3("#{command} -V")
212
- rescue Errno::ENOENT
213
- raise ConfigError, "'#{command}' utility must be in PATH for #{algo} compression"
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, 'format_json true', 'include_time_key true'].join("\n")
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, 'format_json true', 'include_tag_key true', 'include_time_key true'].join("\n")
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.3.7
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-03-07 00:00:00.000000000 Z
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.0
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.0
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/out_s3.rb
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: 1.8.23
133
+ rubygems_version: 2.2.2
154
134
  signing_key:
155
- specification_version: 3
135
+ specification_version: 4
156
136
  summary: Amazon S3 output plugin for Fluentd event collector
157
137
  test_files:
158
- - test/out_s3.rb
138
+ - test/test_out_s3.rb
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- gem 'fluentd', '= 0.10.42'
4
- gemspec