From 4db1dd2cabcc2446df9d9eb8bc1421aaca6007d9 Mon Sep 17 00:00:00 2001 From: skanderm Date: Tue, 10 Sep 2024 14:11:33 -0700 Subject: [PATCH] Create feed stream with bucket input (#624) * Move image env to prod-only in runtime with default dev config * Use the bucket input in the SQS queue consumer when creating feed_streams --- server/lib/orcasite/radio/feed_stream.ex | 7 ++++++- server/lib/orcasite/radio/feed_stream_queue.ex | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/server/lib/orcasite/radio/feed_stream.ex b/server/lib/orcasite/radio/feed_stream.ex index 8a878bd5..e44fee92 100644 --- a/server/lib/orcasite/radio/feed_stream.ex +++ b/server/lib/orcasite/radio/feed_stream.ex @@ -48,6 +48,7 @@ defmodule Orcasite.Radio.FeedStream do attribute :playlist_m3u8_path, :string do public? true + description "S3 object path for playlist file (e.g. /rpi_orcasound_lab/hls/1541027406/live.m3u8)" end @@ -103,6 +104,7 @@ defmodule Orcasite.Radio.FeedStream do argument :playlist_path, :string argument :update_segments?, :boolean, default: false argument :link_streams?, :boolean, default: false + argument :bucket, :string change fn changeset, _context -> path = @@ -145,12 +147,15 @@ defmodule Orcasite.Radio.FeedStream do changeset |> Ash.Changeset.get_argument_or_attribute(:playlist_timestamp) + bucket_arg = Ash.Changeset.get_argument(changeset, :bucket) + feed - |> Map.take([:bucket, :bucket_region, :cloudfront_url]) + |> Map.take([:bucket_region, :cloudfront_url]) |> Enum.reduce(changeset, fn {attribute, value}, acc -> acc |> Ash.Changeset.change_new_attribute(attribute, value) end) + |> Ash.Changeset.change_new_attribute(:bucket, bucket_arg || feed.bucket) |> Ash.Changeset.change_new_attribute( :start_time, playlist_timestamp diff --git a/server/lib/orcasite/radio/feed_stream_queue.ex b/server/lib/orcasite/radio/feed_stream_queue.ex index f63c02f4..66923618 100644 --- a/server/lib/orcasite/radio/feed_stream_queue.ex +++ b/server/lib/orcasite/radio/feed_stream_queue.ex @@ -47,10 +47,15 @@ defmodule Orcasite.Radio.FeedStreamQueue do [] end end) - |> Enum.flat_map(fn %{"s3" => %{"object" => %{"key" => object_path}}} -> + |> Enum.flat_map(fn %{ + "s3" => %{ + "object" => %{"key" => object_path}, + "bucket" => %{"name" => bucket} + } + } -> if String.ends_with?(object_path, ".m3u8") and select_recent_timestamp(object_path, ~U[2024-09-09 00:00:00Z]) do - [%{m3u8_path: object_path}] + [%{m3u8_path: object_path, bucket: bucket}] else [] end