Skip to content

Commit

Permalink
Merge pull request #2022 from cloudnativedaysjp/feat/add-media-package
Browse files Browse the repository at this point in the history
(2) MediaPackageリソースをStreamingの管理下に移行する
  • Loading branch information
takaishi authored Sep 17, 2023
2 parents 60827c1 + ac5fd73 commit 2cfc7bc
Show file tree
Hide file tree
Showing 13 changed files with 209 additions and 74 deletions.
11 changes: 11 additions & 0 deletions app/helpers/media_package_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,15 @@ def get_media_package_channels_from_aws(channel_ids = [])

channels.select { |channel| channel_ids.include?(channel.id) }
end

def resource_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
4 changes: 2 additions & 2 deletions app/jobs/create_media_package_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ def perform(*args)

channel = MediaPackageChannel.new(conference:, track:)
logger.error("Failed to create MediaPackageChannel: #{channel.errors}") unless channel.save
channel.create_media_package_resources
channel.create_aws_resource

endpoint = MediaPackageOriginEndpoint.new(conference:, media_package_channel: channel)
logger.error("Failed to create MediaPackageChannel: #{endpoint.errors}") unless endpoint.save
endpoint.create_media_package_resources
endpoint.create_aws_resource
rescue => e
logger.error(e.message)
end
Expand Down
17 changes: 17 additions & 0 deletions app/jobs/create_streaming_aws_resources_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def perform(*args)
@track = @streaming.track

create_media_package_v2_resources
create_media_package_resources

@streaming.update!(status: 'created')
rescue => e
Expand All @@ -42,4 +43,20 @@ def create_media_package_v2_resources
logger.info("origin endpoint: #{origin_endpoint}")
origin_endpoint.create_aws_resource
end

def create_media_package_resources
logger.info('Perform CreateMediaPackageJob')

channel = MediaPackageChannel.find_or_create_by(streaming_id: @streaming.id)
logger.info("channel: #{channel}")
channel.create_aws_resource

parameter = MediaPackageParameter.find_or_create_by(streaming_id: @streaming.id, media_package_channel_id: channel.id)
logger.info("parameter: #{parameter}")
parameter.create_aws_resources

endpoint = MediaPackageOriginEndpoint.find_or_create_by(streaming_id: @streaming.id, media_package_channel_id: channel.id)
logger.info("endpoint: #{endpoint}")
endpoint.create_aws_resource
end
end
6 changes: 5 additions & 1 deletion app/jobs/delete_media_package_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@ class DeleteMediaPackageJob < ApplicationJob
def perform(*args)
logger.info('Perform DeleteMediaPackageJob')
channel = args[0]
channel.media_package_origin_endpoints.each(&:destroy)
channel.media_package_origin_endpoints.each do |oe|
oe.delete_aws_resource
oe.destroy
end
channel.media_package_harvest_jobs.each(&:destroy)
channel.delete_aws_resource
channel.destroy
rescue => e
logger.error(e.message)
Expand Down
12 changes: 12 additions & 0 deletions app/jobs/delete_streaming_aws_resources_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ def perform(*args)
@streaming = args[0]

delete_media_package_v2_resources
delete_media_package_resources

@streaming.update!(status: 'deleted')
rescue => e
Expand All @@ -27,4 +28,15 @@ def delete_media_package_v2_resources

logger.info('Deleted MediaPackageV2 resources...')
end

def delete_media_package_resources
logger.info('Deleting MediaPackage resources...')

@streaming.media_package_origin_endpoint&.destroy!
@streaming.media_package_parameter&.destroy!
@streaming.media_package_channel&.media_package_harvest_jobs&.each(&:destroy)
@streaming.media_package_channel&.destroy!

logger.info('Deleted MediaPackage resources...')
end
end
61 changes: 25 additions & 36 deletions app/models/media_package_channel.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,32 @@
#
# Table name: media_package_channels
#
# id :bigint not null, primary key
# channel_id :string(255) default("")
# conference_id :bigint not null
# track_id :bigint not null
# id :bigint not null, primary key
# channel_id :string(255) default("")
# streaming_id :string(255)
#
# Indexes
#
# index_media_package_channels_on_channel_id (channel_id)
# index_media_package_channels_on_conference_id (conference_id)
# index_media_package_channels_on_track_id (track_id)
# index_media_package_channels_on_channel_id (channel_id)
# index_media_package_channels_on_streaming_id (streaming_id)
#
# Foreign Keys
#
# fk_rails_... (conference_id => conferences.id)
# fk_rails_... (track_id => tracks.id)
# fk_rails_... (streaming_id => streamings.id)
#

class MediaPackageChannel < ApplicationRecord
include MediaPackageHelper
include EnvHelper

belongs_to :conference
belongs_to :track
before_destroy :delete_aws_resource

belongs_to :streaming
has_many :media_package_origin_endpoints
has_many :media_package_harvest_jobs

before_destroy do
delete_media_package_resources
rescue => e
logger.error(e.message)
end

def channel
@channel ||= media_package_client.describe_channel(id: channel_id)
rescue => e
logger.error(e.message.to_s)
@channel = media_package_client.describe_channel(id: channel_id)
end

def ingest_endpoints
Expand All @@ -56,18 +46,25 @@ def ingest_endpoint_password
ingest_endpoints[0]['password']
end

def create_media_package_resources
resp = media_package_client.create_channel(create_channel_params)
update!(channel_id: resp.id)
rescue => e
logger.error(e.message)
delete_media_package_resources
def create_aws_resource
unless exists_aws_resource?
resp = media_package_client.create_channel(create_channel_params)
update!(channel_id: resp.id)
end
end

def delete_media_package_resources
media_package_client.delete_channel(id: channel_id)
def exists_aws_resource?
media_package_client.describe_channel(id: channel_id)
true
rescue Aws::MediaPackage::Errors::NotFoundException
false
rescue => e
logger.error(e.message.to_s)
false
end

def delete_aws_resource
media_package_client.delete_channel(id: channel_id) if exists_aws_resource?
end

private
Expand All @@ -85,12 +82,4 @@ def tags
tags['ReviewAppNumber'] = review_app_number.to_s if ENV['DREAMKAST_NAMESPACE']
tags
end

def resource_name
if review_app?
"review_app_#{review_app_number}_#{conference.abbr}_track#{track.name}"
else
"#{env_name}_#{conference.abbr}_track#{track.name}"
end
end
end
42 changes: 18 additions & 24 deletions app/models/media_package_origin_endpoint.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,50 +3,52 @@
# Table name: media_package_origin_endpoints
#
# id :bigint not null, primary key
# conference_id :bigint not null
# endpoint_id :string(255)
# media_package_channel_id :bigint not null
# streaming_id :string(255)
#
# Indexes
#
# index_media_package_origin_endpoints_on_conference_id (conference_id)
# index_media_package_origin_endpoints_on_media_package_channel_id (media_package_channel_id)
# index_media_package_origin_endpoints_on_streaming_id (streaming_id)
#
# Foreign Keys
#
# fk_rails_... (conference_id => conferences.id)
# fk_rails_... (media_package_channel_id => media_package_channels.id)
# fk_rails_... (streaming_id => streamings.id)
#

class MediaPackageOriginEndpoint < ApplicationRecord
include MediaPackageHelper
include EnvHelper

belongs_to :conference
before_destroy :delete_aws_resource

belongs_to :media_package_channel
belongs_to :streaming

before_destroy do
delete_media_package_resources
end

def origin_endpoint
@origin_endpoint ||= media_package_client.describe_origin_endpoint(id: endpoint_id)
rescue => e
logger.error(e.message.to_s)
@origin_endpoint = media_package_client.describe_origin_endpoint(id: endpoint_id)
end

def create_media_package_resources
def create_aws_resource
resp = media_package_client.create_origin_endpoint(create_params)
update!(endpoint_id: resp.id)
rescue => e
logger.error(e.message)
delete_media_package_resources
end

def delete_media_package_resources
media_package_client.delete_origin_endpoint(id: endpoint_id)
def exists_aws_resource?
media_package_client.describe_origin_endpoint(id: endpoint_id)
true
rescue Aws::MediaPackage::Errors::NotFoundException
false
rescue => e
logger.error(e.message.to_s)
false
end

def delete_aws_resource
media_package_client.delete_origin_endpoint(id: endpoint_id) if exists_aws_resource?
end

private
Expand Down Expand Up @@ -84,12 +86,4 @@ def tags
tags['ReviewAppNumber'] = review_app_number.to_s if ENV['DREAMKAST_NAMESPACE']
tags
end

def resource_name
if review_app?
"review_app_#{review_app_number}_#{conference.abbr}_track#{media_package_channel.track.name}"
else
"#{env_name}_#{conference.abbr}_track#{media_package_channel.track.name}"
end
end
end
63 changes: 63 additions & 0 deletions app/models/media_package_parameter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# == Schema Information
#
# Table name: media_package_parameters
#
# id :string(255) not null, primary key
# name :string(255)
# created_at :datetime not null
# updated_at :datetime not null
# media_package_channel_id :bigint not null
# streaming_id :string(255) not null
#
# Indexes
#
# index_media_package_parameters_on_media_package_channel_id (media_package_channel_id)
# index_media_package_parameters_on_streaming_id (streaming_id)
#
# Foreign Keys
#
# fk_rails_... (media_package_channel_id => media_package_channels.id)
# fk_rails_... (streaming_id => streamings.id)
#
require 'aws-sdk-medialive'

class MediaPackageParameter < ApplicationRecord
include MediaLiveHelper
include SsmHelper
include EnvHelper

before_destroy :delete_aws_resource

before_create :set_uuid

belongs_to :streaming
belongs_to :media_package_channel

def create_aws_resources
unless exists_aws_resource?
create_parameter("/medialive/#{resource_name}", media_package_channel.ingest_endpoint_password)
update!(name: "/medialive/#{resource_name}")
end
end

def exists_aws_resource?
ssm_client.describe_parameters(filters: [{ key: 'Name', values: ["/medialive/#{resource_name}"] }]).parameters.any?
rescue => e
logger.error(e.message)
false
end

def delete_aws_resource
delete_parameter("/medialive/#{resource_name}") if exists_aws_resource?
end

private

def resource_name
if review_app?
"review_app_#{review_app_number}_#{conference.abbr}_track#{track.name}"
else
"#{env_name}_#{conference.abbr}_track#{track.name}"
end
end
end
3 changes: 3 additions & 0 deletions app/models/streaming.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ class Streaming < ApplicationRecord
has_one :media_package_v2_channel_group
has_one :media_package_v2_channel
has_one :media_package_v2_origin_endpoint
has_one :media_package_channel
has_one :media_package_origin_endpoint
has_one :media_package_parameter

STATUS_CREATING = 'creating'.freeze
STATUS_CRTEATED = 'created'.freeze
Expand Down
1 change: 0 additions & 1 deletion app/models/track.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ class Track < ApplicationRecord
has_many :talks
has_one :live_stream_ivs
has_one :live_stream_media_live
has_one :media_package_channel
has_one :streaming

belongs_to :room, optional: true
Expand Down
3 changes: 3 additions & 0 deletions app/views/admin/streamings/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@
<tr>
<td>MediaPackage V2 ChannelGroup</td><td><%= track.streaming&.media_package_v2_channel_group&.name %></td>
</tr>
<tr>
<td>MediaPackage Channel</td><td><%= track.streaming&.media_package_channel&.channel_id %></td>
</tr>
</tbody>
</table>
</div>
Expand Down
Loading

0 comments on commit 2cfc7bc

Please sign in to comment.