Sha256: 10c889b015a544d4b557ca17aba83448d8df7146b97360a880eb44e640199638

Contents?: true

Size: 1.44 KB

Versions: 7

Compression:

Stored size: 1.44 KB

Contents

module Outback
  class S3Target < Target
    attr_setter :bucket_name, :access_key, :secret_key, :ttl, :prefix
    
    def display_name
      "s3:#{bucket_name}/#{prefix}"
    end
    
    def valid?
      bucket_name && access_key && secret_key
    end
    
    def service(force_reconnect = false)
      @service = nil if force_reconnect
      @service ||= S3::Service.new(:access_key_id => access_key, :secret_access_key => secret_key)
    end
    
    def bucket
      service.buckets.find(bucket_name)
    end
    
    def put(archives)
      size = count = 0
      archives.each do |archive|
        object_name = [prefix.to_s, archive.filename.basename.to_s].join('/')
        Outback.debug "S3Target: storing #{archive.filename} in s3://#{bucket_name}/#{object_name}"
        object = bucket.objects.build(object_name)
        object.content = archive.open
        object.acl = :private
        object.save
        if object.exists?
          size += archive.size
          count += 1
        else
          Outback.error "S3 archive upload failed: #{object_name}"
        end
      end
      Outback.info "Uploaded #{count} archives (#{size} bytes) to #{display_name}"
      count
    end
    
    def list_archives(name)
      entries = bucket.objects.select { |e| e.key.start_with?(prefix.to_s) && e.key[prefix.to_s.size..-1].match(Archive::NAME_PATTERN) }
      entries.map { |e| S3Archive.new(e.key, self) }.select(&its.backup_name == name)
    end
  end
  
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
outback-0.0.14 lib/outback/s3_target.rb
outback-0.0.13 lib/outback/s3_target.rb
outback-0.0.12 lib/outback/s3_target.rb
outback-0.0.11 lib/outback/s3_target.rb
outback-0.0.10 lib/outback/s3_target.rb
outback-0.0.9 lib/outback/s3_target.rb
outback-0.0.8 lib/outback/s3_target.rb