Class: MetricTools::S3

Inherits:
Object
  • Object
show all
Defined in:
lib/metric_tools/s3.rb

Overview

S3からログなどをDownloadするためのクラスです

Class Method Summary collapse

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 (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しているかどうかを返します

Returns:

  • (Boolean)


35
36
37
# File 'lib/metric_tools/s3.rb', line 35

def login?
  return !@bucket.nil?
end