class S3StreamBackup

Public Class Methods

new(&block) click to toggle source
# File lib/s3streambackup.rb, line 30
def initialize(&block)
        instance_eval &block
        cli_setup = @cli_setup
        cli_verify_setup = @cli_verify_setup
        settings = CLI.new do
                        option :key, 
                                short: :k,
                                description: 'S3 key',
                                default: ENV['AWS_ACCESS_KEY_ID']
                        option :secret, 
                                short: :s,
                                description: 'S3 key secret',
                                default_label: '<secret>',
                                default: ENV['AWS_SECRET_ACCESS_KEY']
                        option :prefix,
                                short: :p,
                                description: 'prefix under which the backup objects are kept',
                                default: ''
                        option :log_file,
                                short: :l,
                                description: 'location of log file; if not specifed log to STDERR'
                        switch :plain,
                                description: 'use plain connections instead of SSL to S3'
                        switch :verbose,
                                short: :v,
                                description: 'log debug messages'
                        switch :debug,
                                short: :d,
                                description: 'log AWS SDK debug messages'
                        argument :bucket,
                                description: 'name of bucket to upload data to'
                        argument :name,
                                description: 'name under which the object will be stored'
                        instance_eval &cli_setup if cli_setup
        end.parse! do |settings|
                fail 'AWS_ACCESS_KEY_ID environment not set and --key not used' unless settings.key
                fail 'AWS_SECRET_ACCESS_KEY environment not set and --secret not used' unless settings.secret
                instance_eval &cli_verify_setup if cli_verify_setup
        end

        log = Logger.new(settings.log_file ? settings.log_file : STDERR)
        log.formatter = proc do |severity, datetime, progname, msg|
                "[#{datetime.utc.strftime "%Y-%m-%d %H:%M:%S.%6N %Z"}] [#{$$}] #{severity}: #{msg.strip}\n"
        end

        log.level = Logger::INFO
        log.level = Logger::DEBUG if settings.verbose or settings.debug

        begin
                s3 = AWS::S3.new(
                        access_key_id: settings.key,
                        secret_access_key: settings.secret,
                        logger: settings.debug ? log : nil,
                        log_level: :debug,
                        use_ssl: ! settings.plain
                )
                @main.call(settings, log, s3)
        rescue => error
                msg = "#{error.class.name}: #{error.message}\n#{error.backtrace.join("\n")}"
                log.error msg
                STDERR.write msg 
                exit 10
        end
end

Public Instance Methods

cli(&block) click to toggle source
# File lib/s3streambackup.rb, line 95
def cli(&block)
        @cli_setup = block
end
cli_verify(&block) click to toggle source
# File lib/s3streambackup.rb, line 99
def cli_verify(&block)
        @cli_verify_setup = block
end
main(&block) click to toggle source
# File lib/s3streambackup.rb, line 103
def main(&block)
        @main = block
end