36 lines
1.1 KiB
Ruby
36 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rest-client'
|
|
require_relative '../log/loggable'
|
|
require_relative '../vendors/errors/content_ingest_error'
|
|
|
|
module Vle
|
|
class VleIngestAsset
|
|
include Log::Loggable
|
|
|
|
def call(content, destination)
|
|
logger.info("ONEX asset ingest: #{content}")
|
|
tmp_file = Tempfile.new('vendor-scheduler-service-content-ingest')
|
|
begin
|
|
source = content[:url] || content[:uri]
|
|
IO.copy_stream(URI.parse(source).open, tmp_file.path)
|
|
logger.debug("Content retrieved. Now starting ONEX ingest...")
|
|
res = RestClient.put(destination, tmp_file, { 'Content-Type': "binary/octet-stream" })
|
|
case res.code
|
|
when 200 #Net::HTTPSuccess
|
|
logger.debug("ONEX Asset ingested.")
|
|
true
|
|
else
|
|
logger.error "Error ingesting content into ONEX: POST returned #{res.code}"
|
|
raise Vendors::Errors::ContentIngestError
|
|
end
|
|
rescue StandardError => e
|
|
logger.error "Error ingesting content into ONEX: #{e.message}"
|
|
raise Vendors::Errors::ContentIngestError
|
|
ensure
|
|
tmp_file.close!
|
|
end
|
|
end
|
|
end
|
|
end
|