Class: S3backup::S3Wrapper
- Inherits:
-
Object
- Object
- S3backup::S3Wrapper
- Defined in:
- lib/s3backup/s3wrapper.rb
Constant Summary collapse
- DEFAULT_MAX_RETRY_COUNT =
30
Instance Attribute Summary collapse
-
#bucket ⇒ Object
readonly
Returns the value of attribute bucket.
Instance Method Summary collapse
- #create_bucket ⇒ Object
- #delete(key) ⇒ Object
- #exists?(key) ⇒ Boolean
- #find(dest) ⇒ Object
- #get(key) ⇒ Object
-
#initialize(config, create_flg) ⇒ S3Wrapper
constructor
A new instance of S3Wrapper.
- #post(key, val) ⇒ Object
- #rename(orig, dest) ⇒ Object
- #set_config(config) ⇒ Object
Constructor Details
#initialize(config, create_flg) ⇒ S3Wrapper
Returns a new instance of S3Wrapper.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# 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 |
Instance Attribute Details
#bucket ⇒ Object (readonly)
Returns the value of attribute bucket.
5 6 7 |
# File 'lib/s3backup/s3wrapper.rb', line 5 def bucket @bucket end |
Instance Method Details
#create_bucket ⇒ Object
33 34 35 36 37 38 39 40 41 |
# 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) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# 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.}\n") exit(-1) end sleep(count*30) AWS::S3::Base.establish_connection!(@args) end end return true end return false end |
#exists?(key) ⇒ Boolean
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# 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.}\n") exit(-1) end sleep(count*30) AWS::S3::Base.establish_connection!(@args) end end return ret; end |
#find(dest) ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# 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) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# 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.}\n") exit(-1) end sleep(count*30) AWS::S3::Base.establish_connection!(@args) end end return data end |
#post(key, val) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# 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.}\n") exit(-1) end sleep(count*30) AWS::S3::Base.establish_connection!(@args) end end end |
#rename(orig, dest) ⇒ Object
42 43 44 |
# File 'lib/s3backup/s3wrapper.rb', line 42 def rename(orig,dest) AWS::S3::S3Object.rename(orig,dest,@bucket_name) end |
#set_config(config) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# 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 |