Class: MetricTools::S3
- Inherits:
-
Object
- Object
- MetricTools::S3
- Defined in:
- lib/metric_tools/s3.rb
Overview
S3からログなどをDownloadするためのクラスです
Class Method Summary collapse
-
.download(file_key, target_dir, hierarchy = false) ⇒ Object
file_keyを指定してファイルをダウンロードします。 target_dirが存在しない場合は、勝手に作成します。 hierarchy=trueにすると、S3上のディレクトリ構造を保持してDownloadします。.
-
.fetch_all(dir_key, target_dir, force_all = false, &condition) ⇒ Object
指定されたdir_key以下のファイル/ディレクトリをすべてDLします。 force_all=falseにすると、既にローカルにファイルが有る場合はDLしません。.
-
.login(key, secret, bucket_name) ⇒ Object
access_key, secret_key, bucket_nameを指定してログインします。.
-
.login? ⇒ Boolean
loginしているかどうかを返します.
Class Method Details
.download(file_key, target_dir, hierarchy = false) ⇒ Object
file_keyを指定してファイルをダウンロードします。 target_dirが存在しない場合は、勝手に作成します。 hierarchy=trueにすると、S3上のディレクトリ構造を保持してDownloadします。
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/metric_tools/s3.rb', line 44 def download(file_key, target_dir, hierarchy=false) file_path = File.join(target_dir, hierarchy ? file_key : File.basename(file_key)) mkdir_for_file(file_path) puts "Downloading from S3 : #{file_key} => #{file_path}" File.open(file_path, "w") {|fp| AWS::S3::S3Object.stream(file_key, @bucket.name) {|chunk| fp.write chunk } } end |
.fetch_all(dir_key, target_dir, force_all = false, &condition) ⇒ Object
指定されたdir_key以下のファイル/ディレクトリをすべてDLします。 force_all=falseにすると、既にローカルにファイルが有る場合はDLしません。
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/metric_tools/s3.rb', line 60 def fetch_all(dir_key, target_dir, force_all=false, &condition) objects_in_dir = @bucket.objects(prefix: dir_key) remote_files = objects_in_dir .select{|obj| key = obj.key is_dir = (key[key.length-1] == '/') cond = condition.nil? ? true : condition.call(obj) !is_dir && cond } .collect{|obj| obj.key } Dir.chdir(target_dir) local_files = Dir["**/*"] puts "remote directory is empty => #{@bucket.name}/#{dir_key}" if (remote_files.nil? || remote_files.empty?) remote_files.each {|key| if force_all || !local_files.any?{|f| File.basename(f) == File.basename(key)} download(key, target_dir, true) end } end |
.login(key, secret, bucket_name) ⇒ Object
access_key, secret_key, bucket_nameを指定してログインします。
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/metric_tools/s3.rb', line 17 def login(key, secret, bucket_name) @key = key @secret = secret @bucket_name = bucket_name puts "Login to #{bucket_name} .." AWS::S3::Base.establish_connection!( :access_key_id => key, :secret_access_key => secret, ) @bucket = AWS::S3::Service.buckets.find{|b| b.name == @bucket_name} raise "The bucket named '#{@bucket_name}' doesn't exist." if @bucket.nil? end |
.login? ⇒ Boolean
loginしているかどうかを返します
35 36 37 |
# File 'lib/metric_tools/s3.rb', line 35 def login? return !@bucket.nil? end |