fluent-plugin-s3 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/AUTHORS ADDED
@@ -0,0 +1 @@
1
+ FURUHASHI Sadayuki <frsyuki _at_ gmail.com>
@@ -0,0 +1,7 @@
1
+
2
+ Release 0.1.1 - 2011/09/27
3
+
4
+ * First release
5
+
6
+
7
+
@@ -0,0 +1,7 @@
1
+ = Treasure Data output plugin for Fluent
2
+
3
+ == Copyright
4
+
5
+ Copyright:: Copyright (c) 2011 Treasure Data, Inc.
6
+ License:: Apache License, Version 2.0
7
+
@@ -0,0 +1,51 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/clean'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gemspec|
8
+ gemspec.name = "fluent-plugin-s3"
9
+ gemspec.summary = "Amazon S3 output plugin for Fluent event collector"
10
+ gemspec.author = "Sadayuki Furuhashi"
11
+ gemspec.email = "frsyuki@gmail.com"
12
+ gemspec.homepage = "http://fluent.github.com/"
13
+ gemspec.has_rdoc = false
14
+ gemspec.require_paths = ["lib"]
15
+ gemspec.add_dependency "fluent", "~> 0.9.14"
16
+ gemspec.add_dependency "aws-sdk", "~> 1.1.3"
17
+ gemspec.test_files = Dir["test/**/*.rb"]
18
+ gemspec.files = Dir["bin/**/*", "lib/**/*", "test/**/*.rb"] +
19
+ %w[VERSION AUTHORS Rakefile]
20
+ gemspec.executables = []
21
+ end
22
+ Jeweler::GemcutterTasks.new
23
+ rescue LoadError
24
+ puts "Jeweler not available. Install it with: gem install jeweler"
25
+ end
26
+
27
+ Rake::TestTask.new(:test) do |t|
28
+ t.test_files = Dir['test/*_test.rb']
29
+ t.ruby_opts = ['-rubygems'] if defined? Gem
30
+ t.ruby_opts << '-I.'
31
+ end
32
+
33
+ #VERSION_FILE = "lib/fluent/version.rb"
34
+ #
35
+ #file VERSION_FILE => ["VERSION"] do |t|
36
+ # version = File.read("VERSION").strip
37
+ # File.open(VERSION_FILE, "w") {|f|
38
+ # f.write <<EOF
39
+ #module Fluent
40
+ #
41
+ #VERSION = '#{version}'
42
+ #
43
+ #end
44
+ #EOF
45
+ # }
46
+ #end
47
+ #
48
+ #task :default => [VERSION_FILE, :build]
49
+
50
+ task :default => [:build]
51
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -0,0 +1,84 @@
1
+ module Fluent
2
+
3
+
4
+ class S3Output < Fluent::TimeSlicedOutput
5
+ Fluent::Plugin.register_output('s3', self)
6
+
7
+ def initialize
8
+ super
9
+ require 'aws-sdk'
10
+ require 'zlib'
11
+ end
12
+
13
+ def configure(conf)
14
+ super
15
+
16
+ if aws_key_id = conf['aws_key_id']
17
+ @aws_key_id = aws_key_id
18
+ end
19
+ unless @aws_key_id
20
+ raise ConfigError, "'aws_key_id' parameter is required on file output"
21
+ end
22
+
23
+ if aws_sec_key = conf['aws_sec_key']
24
+ @aws_sec_key = aws_sec_key
25
+ end
26
+ unless @aws_sec_key
27
+ raise ConfigError, "'aws_sec_key' parameter is required on file output"
28
+ end
29
+
30
+ if s3_bucket = conf['s3_bucket']
31
+ @s3_bucket = s3_bucket
32
+ end
33
+ unless @s3_bucket
34
+ raise ConfigError, "'s3_bucket' parameter is required on file output"
35
+ end
36
+
37
+ if path = conf['path']
38
+ @path = path
39
+ end
40
+ unless @path
41
+ raise ConfigError, "'path' parameter is required on file output"
42
+ end
43
+
44
+ if @localtime
45
+ @formatter = Proc.new {|tag,event|
46
+ "#{Time.at(event.time).iso8601}\t#{tag}\t#{event.record.to_json}\n"
47
+ }
48
+ else
49
+ @formatter = Proc.new {|tag,event|
50
+ "#{Time.at(event.time).utc.iso8601}\t#{tag}\t#{event.record.to_json}\n"
51
+ }
52
+ end
53
+ end
54
+
55
+ def start
56
+ super
57
+ @s3 = AWS::S3.new(
58
+ :access_key_id=>@aws_key_id,
59
+ :secret_access_key=>@aws_sec_key)
60
+ @bucket = @s3.buckets[@s3_bucket]
61
+ end
62
+
63
+ def format(tag, event)
64
+ @formatter.call(tag, event)
65
+ end
66
+
67
+ def write(chunk)
68
+ s3path = "#{@path}#{chunk.key}.gz"
69
+
70
+ tmp = Tempfile.new("s3-")
71
+ w = Zlib::GzipWriter.new(tmp)
72
+ begin
73
+ chunk.write_to(w)
74
+ w.finish
75
+ @bucket.objects[s3path].write(Pathname.new(tmp.path))
76
+ ensure
77
+ w.close rescue nil
78
+ end
79
+ end
80
+ end
81
+
82
+
83
+ end
84
+
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-s3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - Sadayuki Furuhashi
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-09-27 00:00:00 +09:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: fluent
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 39
30
+ segments:
31
+ - 0
32
+ - 9
33
+ - 14
34
+ version: 0.9.14
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: aws-sdk
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 21
46
+ segments:
47
+ - 1
48
+ - 1
49
+ - 3
50
+ version: 1.1.3
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ description:
54
+ email: frsyuki@gmail.com
55
+ executables: []
56
+
57
+ extensions: []
58
+
59
+ extra_rdoc_files:
60
+ - ChangeLog
61
+ - README.rdoc
62
+ files:
63
+ - AUTHORS
64
+ - Rakefile
65
+ - VERSION
66
+ - lib/fluent/plugin/out_s3.rb
67
+ - ChangeLog
68
+ - README.rdoc
69
+ has_rdoc: true
70
+ homepage: http://fluent.github.com/
71
+ licenses: []
72
+
73
+ post_install_message:
74
+ rdoc_options:
75
+ - --charset=UTF-8
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ hash: 3
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ hash: 3
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ requirements: []
97
+
98
+ rubyforge_project:
99
+ rubygems_version: 1.3.7
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: Amazon S3 output plugin for Fluent event collector
103
+ test_files: []
104
+