Sha256: c6b5546a31d6a2cc5a7e7724b0a678fae04bd5977e5939645d89b1c21d83519f

Contents?: true

Size: 1.39 KB

Versions: 26

Compression:

Stored size: 1.39 KB

Contents

module Terraspace::Cloud
  class Upload < Base
    def create(data) # data: {stream_id:, type: }
      zip_path = Package.new(@options.merge(data)).build
      upload = create_upload(data)
      upload_project(upload, zip_path)
      upload
    end

  private
    def create_upload(params)
      upload = api.create_upload(params)
      if errors?(upload)
        error_message(upload)
        exit 1 # Consider: raise exception can rescue higher up
      else
        upload
      end
    end

    def upload_project(upload, path, retries=0)
      url = upload['data']['attributes']['url']
      uri = URI.parse(url)
      object_content = IO.read(path)
      sleep 2
      resp = Net::HTTP.start(uri.host) do |http|
        http.send_request(
          'PUT',
          uri.request_uri,
          object_content,
          'content-type' => ''
        )
      end
      return if resp.code =~ /^20/

      log_errors(resp.body, :debug)
      if resp.body.include?('expired')
        if retries >= 10 # 15m * 10 = 150m = 2.5h
          log_errors(resp.body, :info)
          exit 1
        end
        logger.debug("Retrying upload")
        upload = create_upload(upload_id: upload['data']['id'])
        upload_project(upload, path, retries+1)
      end
    end

    def log_errors(body, level=:debug)
      logger.send(level, "ERROR: Uploader uploading code")
      logger.send(level, "resp body #{body}")
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
terraspace-2.2.17 lib/terraspace/cloud/upload.rb
terraspace-2.2.16 lib/terraspace/cloud/upload.rb
terraspace-2.2.15 lib/terraspace/cloud/upload.rb
terraspace-2.2.14 lib/terraspace/cloud/upload.rb
terraspace-2.2.13 lib/terraspace/cloud/upload.rb
terraspace-2.2.12 lib/terraspace/cloud/upload.rb
terraspace-2.2.11 lib/terraspace/cloud/upload.rb
terraspace-2.2.10 lib/terraspace/cloud/upload.rb
terraspace-2.2.9 lib/terraspace/cloud/upload.rb
terraspace-2.2.8 lib/terraspace/cloud/upload.rb
terraspace-2.2.7 lib/terraspace/cloud/upload.rb
terraspace-2.2.6 lib/terraspace/cloud/upload.rb
terraspace-2.2.5 lib/terraspace/cloud/upload.rb
terraspace-2.2.4 lib/terraspace/cloud/upload.rb
terraspace-2.2.3 lib/terraspace/cloud/upload.rb
terraspace-2.2.2 lib/terraspace/cloud/upload.rb
terraspace-2.2.1 lib/terraspace/cloud/upload.rb
terraspace-2.2.0 lib/terraspace/cloud/upload.rb
terraspace-2.1.7 lib/terraspace/cloud/upload.rb
terraspace-2.1.6 lib/terraspace/cloud/upload.rb