class GoodData::Bricks::BaseDownloader

Public Class Methods

new(params) click to toggle source
# File lib/gooddata/bricks/base_downloader.rb, line 13
def initialize(params)
  @params = params
  @logger = @params['GDC_LOGGER']
end

Public Instance Methods

backup(meta) click to toggle source
# File lib/gooddata/bricks/base_downloader.rb, line 27
def backup(meta)
  @logger.info 'would send a backup list of files to backup' if @logger

  files = meta['objects'].map { |_k, o| o }.reduce([]) do |a, e|
    a + e['filenames']
  end

  bucket_name = @params['s3_backup_bucket_name']

  s3 = AWS::S3.new(
    :access_key_id => @params['aws_access_key_id'],
    :secret_access_key => @params['aws_secret_access_key']
  )

  bucket = s3.buckets[bucket_name]
  bucket = s3.buckets.create(bucket_name) unless bucket.exists?

  files.each do |file|
    file_path = Pathname.new(file)
    target_path = Pathname.new(@params['s3_backup_path'] || '') + file_path.basename
    obj = bucket.objects[target_path]
    obj.write(file_path)
    @logger.info "Backed up file #{file_path} to s3 #{target_path}" if @logger
  end

  meta
end
download() click to toggle source
# File lib/gooddata/bricks/base_downloader.rb, line 22
def download
  @logger.info 'would download data' if @logger
  []
end
post_process(meta) click to toggle source
# File lib/gooddata/bricks/base_downloader.rb, line 55
def post_process(meta)
  @logger.info 'Maybe some postprocessing' if @logger
  meta
end
pre_process(meta) click to toggle source
# File lib/gooddata/bricks/base_downloader.rb, line 18
def pre_process(meta)
  meta
end
run() click to toggle source

Run downloader

# File lib/gooddata/bricks/base_downloader.rb, line 61
def run
  downloaded_data = download
  downloaded_data = pre_process(downloaded_data)
  backup(downloaded_data) unless @params['skip_backup']

  downloaded_data = post_process(downloaded_data)

  # save the state - whatever is in the return value of #download in the :persist key .. to project metadata
  if downloaded_data[:persist]
    accumulated_state = downloaded_data[:persist].reduce([]) do |memo, item|
      item.key?(:state) ? memo.concat(item[:state]) : memo
    end
    accumulated_state.each do |item|
      key = item[:key]
      val = item[:value]

      @logger.info "Saving metadata #{key} => #{val}" if @logger
      GoodData::ProjectMetadata[key] = val
    end
  end

  post_process(downloaded_data)
end