-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2020 from cloudnativedaysjp/feat/add-media-packag…
…e-v2 (1) MediaPackageV2リソースを扱えるようにする
- Loading branch information
Showing
16 changed files
with
541 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
require 'aws-sdk-mediapackagev2' | ||
|
||
module MediaPackageV2Helper | ||
def media_package_v2_client | ||
creds = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']) | ||
@client ||= if creds.set? | ||
Aws::MediaPackageV2::Client.new(region: AWS_LIVE_STREAM_REGION, credentials: creds) | ||
else | ||
Aws::MediaPackageV2::Client.new(region: AWS_LIVE_STREAM_REGION) | ||
end | ||
end | ||
|
||
def channel_group_name | ||
conference = streaming.conference | ||
|
||
if review_app? | ||
"review_app_#{review_app_number}_#{conference.abbr}" | ||
else | ||
"#{env_name}_#{conference.abbr}" | ||
end | ||
end | ||
|
||
def channel_name | ||
conference = streaming.conference | ||
track = streaming.track | ||
|
||
if review_app? | ||
"review_app_#{review_app_number}_#{conference.abbr}_track#{track.name}" | ||
else | ||
"#{env_name}_#{conference.abbr}_track#{track.name}" | ||
end | ||
end | ||
|
||
def origin_endpoint_name | ||
conference = streaming.conference | ||
track = streaming.track | ||
|
||
if review_app? | ||
"review_app_#{review_app_number}_#{conference.abbr}_track#{track.name}" | ||
else | ||
"#{env_name}_#{conference.abbr}_track#{track.name}" | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,45 @@ | ||
class CreateStreamingAwsResourcesJob < ApplicationJob | ||
include EnvHelper | ||
include MediaPackageV2Helper | ||
include LogoutHelper | ||
|
||
# queue_as :default | ||
self.queue_adapter = :async | ||
|
||
attr_reader :conference | ||
attr_reader :track | ||
attr_reader :streaming | ||
|
||
def perform(*args) | ||
# Rails.logger.level = Logger::DEBUG | ||
logger.info('Perform CreateMediaPackageV2Job') | ||
@streaming = args[0] | ||
@conference = @streaming.conference | ||
@track = @streaming.track | ||
|
||
create_media_package_v2_resources | ||
|
||
@streaming.update!(status: 'created') | ||
rescue => e | ||
@streaming.update!(status: 'error') | ||
logger.error(e.message) | ||
logger.error(e.backtrace.join("\n")) | ||
end | ||
|
||
def create_media_package_v2_resources | ||
logger.info('Perform CreateMediaPackageV2Job') | ||
|
||
|
||
channel_group = MediaPackageV2ChannelGroup.find_or_create_by(streaming_id: @streaming.id, name: channel_group_name) | ||
logger.info("channel group: #{channel_group}") | ||
channel_group.create_aws_resource | ||
|
||
channel = MediaPackageV2Channel.find_or_create_by(streaming_id: @streaming.id, media_package_v2_channel_group_id: channel_group.id, name: channel_name) | ||
logger.info("channel: #{channel}") | ||
channel.create_aws_resource | ||
|
||
origin_endpoint = MediaPackageV2OriginEndpoint.find_or_create_by(streaming_id: @streaming.id, media_package_v2_channel_id: channel.id, name: origin_endpoint_name) | ||
logger.info("origin endpoint: #{origin_endpoint}") | ||
origin_endpoint.create_aws_resource | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# == Schema Information | ||
# | ||
# Table name: media_package_v2_channels | ||
# | ||
# id :string(255) not null, primary key | ||
# name :string(255) | ||
# media_package_v2_channel_group_id :string(255) | ||
# streaming_id :string(255) not null | ||
# | ||
# Indexes | ||
# | ||
# index_channels_on_channel_group_id (media_package_v2_channel_group_id) | ||
# index_media_package_v2_channels_on_name (name) UNIQUE | ||
# index_media_package_v2_channels_on_streaming_id (streaming_id) | ||
# | ||
# Foreign Keys | ||
# | ||
# fk_rails_... (streaming_id => streamings.id) | ||
# | ||
|
||
require 'aws-sdk-mediapackagev2' | ||
|
||
class MediaPackageV2Channel < ApplicationRecord | ||
include EnvHelper | ||
include MediaPackageV2Helper | ||
|
||
before_create :set_uuid | ||
before_destroy :delete_aws_resource | ||
|
||
belongs_to :streaming | ||
belongs_to :channel_group, class_name: 'MediaPackageV2ChannelGroup', foreign_key: :media_package_v2_channel_group_id | ||
has_one :origin_endpoint, class_name: 'MediaPackageV2OriginEndpoint' | ||
|
||
def create_aws_resource | ||
unless exists_aws_resource? | ||
resp = media_package_v2_client.create_channel(channel_group_name:, channel_name:) | ||
update!(name: resp.channel_name) | ||
end | ||
end | ||
|
||
def delete_aws_resource | ||
if exists_aws_resource? | ||
media_package_v2_client.delete_channel(channel_group_name:, channel_name:) | ||
loop do | ||
break unless exists_aws_resource? | ||
end | ||
update!(name: '') | ||
end | ||
end | ||
|
||
def exists_aws_resource? | ||
media_package_v2_client.get_channel(channel_group_name:, channel_name:) | ||
true | ||
rescue Aws::MediaPackageV2::Errors::NotFoundException | ||
false | ||
rescue => e | ||
logger.error(e.message) | ||
false | ||
end | ||
|
||
def channel | ||
@channel ||= media_package_v2_client.get_channel(channel_group_name:, channel_name:) | ||
end | ||
|
||
def ingest_endpoint_url | ||
channel.ingest_endpoints[0].url | ||
end | ||
|
||
private | ||
|
||
def conference | ||
streaming.conference | ||
end | ||
|
||
def track | ||
streaming.track | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# == Schema Information | ||
# | ||
# Table name: media_package_v2_channel_groups | ||
# | ||
# id :string(255) not null, primary key | ||
# name :string(255) | ||
# streaming_id :string(255) not null | ||
# | ||
# Indexes | ||
# | ||
# index_media_package_v2_channel_groups_on_name (name) UNIQUE | ||
# index_media_package_v2_channel_groups_on_streaming_id (streaming_id) | ||
# | ||
# Foreign Keys | ||
# | ||
# fk_rails_... (streaming_id => streamings.id) | ||
# | ||
require 'aws-sdk-mediapackagev2' | ||
|
||
class MediaPackageV2ChannelGroup < ApplicationRecord | ||
include EnvHelper | ||
include MediaPackageV2Helper | ||
|
||
before_create :set_uuid | ||
before_destroy :delete_aws_resource | ||
|
||
belongs_to :streaming | ||
has_one :channel, class_name: 'MediaPackageV2Channel' | ||
|
||
def create_aws_resource | ||
unless exists_aws_resource? | ||
resp = media_package_v2_client.create_channel_group(channel_group_name:) | ||
update!(name: resp.channel_group_name) | ||
end | ||
end | ||
|
||
def delete_aws_resource | ||
if exists_aws_resource? | ||
media_package_v2_client.delete_channel_group(channel_group_name:) | ||
loop do | ||
break unless exists_aws_resource? | ||
end | ||
update!(name: '') | ||
end | ||
end | ||
|
||
def exists_aws_resource? | ||
media_package_v2_client.get_channel_group(channel_group_name:) | ||
true | ||
rescue Aws::MediaPackageV2::Errors::NotFoundException | ||
false | ||
rescue => e | ||
logger.error(e.message) | ||
false | ||
end | ||
end |
Oops, something went wrong.