class S3backup::S3Wrapper
Constants
- DEFAULT_MAX_RETRY_COUNT
Attributes
bucket[R]
Public Class Methods
new(config,create_flg)
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 7 def initialize(config,create_flg) @bucket= nil @s3objects =nil #設定ファイルの内容をメンバ変数にセット set_config(config) #設定ファイルの内容をメンバ変数にセット args = { :access_key_id => @access_key_id, :secret_access_key => @secret_access_key } if @proxy.size != 0 args[:proxy] = @proxy end @args = args #AWS S3に接続 AWS::S3::Base.establish_connection!(@args) if create_flg begin @bucket = AWS::S3::Bucket.find(@bucket_name) rescue @bucket = create_bucket end else @bucket = AWS::S3::Bucket.find(@bucket_name) end end
Public Instance Methods
create_bucket()
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 33 def create_bucket() S3log.info("Bucket.create(#{@bucket_name})") #Bucket作成 ret = AWS::S3::Bucket.create(@bucket_name) unless ret S3log.error("AWS::S3::Bucket create error possibly already exist #{@bucket_name} by anyone else?)") exit(-1) end end
delete(key)
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 143 def delete(key) if exists? key S3log.info("S3Object.delete(#{CGI.escape(key)})") count = 0; while true do begin AWS::S3::S3Object.delete(CGI.escape(key),@bucket_name) break rescue => ex count+=1; S3log.info("delete #{count} times failed. #{key}\n") if count >= @max_retry_count S3log.error("delete #{count} times failed #{key} #{ex.class}:#{ex.message}\n") exit(-1) end sleep(count*30) AWS::S3::Base.establish_connection!(@args) end end return true end return false end
exists?(key)
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 45 def exists?(key) key=CGI.escape(key) count = 0; ret = false while true do begin ret = AWS::S3::S3Object.exists? key,@bucket_name break; rescue => ex count+=1; S3log.info("exists? #{count} times failed. #{key}\n") if count >= @max_retry_count S3log.error("post #{count} times failed #{key_name} #{ex.class}:#{ex.message}\n") exit(-1) end sleep(count*30) AWS::S3::Base.establish_connection!(@args) end end return ret; end
find(dest)
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 166 def find(dest) @s3objects = @backet.objects unless @s3objects find_obj=[] keys=@s3objects.map { |o| CGI.unescape(CGI.unescape(o.key.sub("#{@bucket_name}/","")))} keys.each do |key| if dest.class == Regexp if key =~ dest find_obj.push(key) end else if key == dest find_obj.push(key) end end end return find_obj end
get(key)
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 66 def get(key) key_name = CGI.escape(key) count = 0; data = nil while true do begin if AWS::S3::S3Object.exists? key_name,@bucket_name S3log.info("AWS::S3::S3Object.value(#{key_name})\n") data = AWS::S3::S3Object.value(key_name,@bucket_name) end break; rescue => ex count+=1; S3log.info("get #{count} times failed. #{key_name}\n") if count >= @max_retry_count S3log.error("get #{count} times failed #{key_name} #{ex.class}:#{ex.message}\n") exit(-1) end sleep(count*30) AWS::S3::Base.establish_connection!(@args) end end return data end
post(key,val)
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 90 def post(key,val) key_name = CGI.escape(key) S3log.info("S3Object.store(#{key_name})") count = 0; while true do begin AWS::S3::S3Object.store(key_name,val,@bucket_name) break; rescue => ex count+=1; S3log.info("post #{count} times failed. #{key_name}\n") if count >= @max_retry_count S3log.error("post #{count} times failed #{key_name} #{ex.class}:#{ex.message}\n") exit(-1) end sleep(count*30) AWS::S3::Base.establish_connection!(@args) end end end
rename(orig,dest)
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 42 def rename(orig,dest) AWS::S3::S3Object.rename(orig,dest,@bucket_name) end
set_config(config)
click to toggle source
# File lib/s3backup/s3wrapper.rb, line 110 def set_config(config) err_msg = "" unless config["access_key_id"] err_msg += "access_key_id doesn't exist in config file.\n" end @access_key_id = config["access_key_id"] unless config["secret_access_key"] err_msg += "secret_access_key doesn't exis in config file.\n" end @secret_access_key = config["secret_access_key"] unless config["bucket"] err_msg += "bucket doesn't exist in config file.\n" end if config["max_retry_count"] if config["max_retry_count"].class == String @max_retry_count = config["max_retry_count"].to_i else @max_retry_count = config["max_retry_count"] end else @max_retry_count = DEFAULT_MAX_RETRY_COUNT end @proxy = {} @proxy[:host] = config["proxy_host"] if config["proxy_host"] @proxy[:port] = config["proxy_port"] if config["proxy_port"] @proxy[:user] = config["proxy_user"] if config["proxy_user"] @proxy[:password] = config["proxy_password"] if config["proxy_password"] @bucket_name = config["bucket"] if err_msg != "" S3log.error(err_msg) exit(-1) end end