Initial commit

This commit is contained in:
Senad Uka
2022-03-23 05:44:42 +01:00
parent 1405281a5c
commit eea10dd03b
113 changed files with 3617 additions and 81 deletions

View 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

View 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

View 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

View 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