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