class Stratocumulus::Storage
Public Class Methods
new(options = {})
click to toggle source
# File lib/stratocumulus/storage.rb, line 7 def initialize(options = {}) @access_key_id = options.fetch("access_key_id") @secret_access_key = options.fetch("secret_access_key") @region = options["region"] @bucket = options.fetch("bucket") @folder = options["folder"] @retention = Retention.new(options["retention"]) end
Public Instance Methods
upload(database)
click to toggle source
# File lib/stratocumulus/storage.rb, line 16 def upload(database) return unless @retention.upload_today? file = store_file(database) if database.success? add_expiry_rule(destination_path(database.filename)) else log.error("there was an error generating #{database.filename}") file.destroy end end
Private Instance Methods
add_expiry_rule(key)
click to toggle source
# File lib/stratocumulus/storage.rb, line 59 def add_expiry_rule(key) new_rule = @retention.rule(key) return unless new_rule directories.service.put_bucket_lifecycle( @bucket, "Rules" => current_rules << new_rule, ) end
connection()
click to toggle source
# File lib/stratocumulus/storage.rb, line 42 def connection Fog::Storage.new( provider: "AWS", aws_access_key_id: @access_key_id, aws_secret_access_key: @secret_access_key, region: @region, ) end
current_rules()
click to toggle source
# File lib/stratocumulus/storage.rb, line 68 def current_rules existing_rules.select do |rule| files.find { |file| file.key == rule["ID"] } end end
destination_path(filename)
click to toggle source
# File lib/stratocumulus/storage.rb, line 38 def destination_path(filename) @folder.nil? ? filename : @folder + "/" + filename end
directories()
click to toggle source
# File lib/stratocumulus/storage.rb, line 55 def directories connection.directories end
existing_rules()
click to toggle source
# File lib/stratocumulus/storage.rb, line 74 def existing_rules directories.service.get_bucket_lifecycle(@bucket).data[:body]["Rules"] rescue Excon::Errors::NotFound [] end
files()
click to toggle source
# File lib/stratocumulus/storage.rb, line 51 def files @files ||= directories.get(@bucket).files end
log()
click to toggle source
# File lib/stratocumulus/storage.rb, line 80 def log Logger.new($stderr) end
store_file(database)
click to toggle source
# File lib/stratocumulus/storage.rb, line 29 def store_file(database) files.create( key: destination_path(database.filename), body: database.dump, multipart_chunk_size: 104_857_600, # 100MB public: false, ) end