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 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