Initial commit
This commit is contained in:
52
app/services/vle/vle_create_asset.rb
Normal file
52
app/services/vle/vle_create_asset.rb
Normal file
@@ -0,0 +1,52 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative '../log/loggable'
|
||||
require_relative '../vendors/errors/content_ingest_error'
|
||||
require_relative 'vle_settings'
|
||||
|
||||
module Vle
|
||||
class VleCreateAsset
|
||||
include Log::Loggable
|
||||
|
||||
PATH = 'v1/assets'
|
||||
|
||||
def initialize(asset)
|
||||
@asset = asset
|
||||
end
|
||||
|
||||
def url
|
||||
Vle::VleSettings.instance.central_url(PATH)
|
||||
end
|
||||
|
||||
def call(access_token)
|
||||
logger.info("ONEX create asset: #{asset}")
|
||||
res = Net::HTTP.post(
|
||||
url,
|
||||
{
|
||||
file: asset[:file],
|
||||
name: asset[:name],
|
||||
project_id: asset[:project_id],
|
||||
description_short: "vendor-scheduler-service content: #{asset[:name]}"
|
||||
}.to_json,
|
||||
{
|
||||
"Authorization": "Bearer #{access_token}",
|
||||
"Content-Type": 'application/json'
|
||||
}
|
||||
)
|
||||
case res
|
||||
when Net::HTTPSuccess
|
||||
JSON.parse(res.body).with_indifferent_access
|
||||
when Net::HTTPUnauthorized
|
||||
raise Auth::Client::Errors::Unauthorized, 'Unauthorized'
|
||||
else
|
||||
logger.error "Error creating asset in VLE: #{res.code}"
|
||||
raise Vendors::Errors::ContentIngestError
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def asset
|
||||
@asset
|
||||
end
|
||||
end
|
||||
end
|
||||
35
app/services/vle/vle_ingest_asset.rb
Normal file
35
app/services/vle/vle_ingest_asset.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
# 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
|
||||
25
app/services/vle/vle_settings.rb
Normal file
25
app/services/vle/vle_settings.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Vle
|
||||
class VleSettings
|
||||
include Singleton
|
||||
|
||||
def target_project
|
||||
AppConfig.safe_get('onex.target_project_id') || '1'
|
||||
end
|
||||
|
||||
def central_url(path)
|
||||
URI::join(
|
||||
AppConfig.safe_get('onex.central_url') || 'http://localhost:5070',
|
||||
path
|
||||
)
|
||||
end
|
||||
|
||||
def scheduler_url(path)
|
||||
URI::join(
|
||||
AppConfig.safe_get('onex.scheduler_url') || 'http://localhost:5040',
|
||||
path
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
46
app/services/vle/vle_vendor_schedule.rb
Normal file
46
app/services/vle/vle_vendor_schedule.rb
Normal file
@@ -0,0 +1,46 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative '../log/loggable'
|
||||
require_relative '../vendors/errors/schedule_publish_error'
|
||||
|
||||
module Vle
|
||||
class VleVendorSchedule
|
||||
include Log::Loggable
|
||||
|
||||
PATH = 'v1/vendor_schedule'
|
||||
|
||||
def initialize(vendor, player, schedule)
|
||||
@vendor = vendor
|
||||
@player = player
|
||||
@schedule = schedule
|
||||
end
|
||||
|
||||
def url
|
||||
Vle::VleSettings.instance.scheduler_url(PATH)
|
||||
end
|
||||
|
||||
def call(access_token)
|
||||
res = Net::HTTP.post(
|
||||
url,
|
||||
{
|
||||
vendor: @vendor,
|
||||
player: @player,
|
||||
schedule: @schedule
|
||||
}.to_json,
|
||||
{
|
||||
"Authorization": "Bearer #{access_token}",
|
||||
"Content-Type": 'application/json'
|
||||
}
|
||||
)
|
||||
case res
|
||||
when Net::HTTPSuccess
|
||||
JSON.parse(res.body).with_indifferent_access
|
||||
when Net::HTTPUnauthorized
|
||||
raise Auth::Client::Errors::Unauthorized, 'Unauthorized'
|
||||
else
|
||||
logger.error "Error (#{res.code}) scheduling vendor content in ONEX: #{res.body}"
|
||||
raise Vendors::Errors::SchedulePublishError
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user