Il relay parte dal job overlay ogni 2s; scheduledStartTime ~90s invece di 5 min; transition testing/live quando l'ingest RTMP raggiunge YouTube. Co-authored-by: Cursor <cursoragent@cursor.com>
35 lines
1.1 KiB
Ruby
35 lines
1.1 KiB
Ruby
class OverlayRefreshJob < ApplicationJob
|
|
queue_as :default
|
|
|
|
INTERVAL = 2.seconds
|
|
REDIS_CHAIN_KEY = "overlay_refresh:chain:%s"
|
|
|
|
def self.schedule_chain(session_id)
|
|
redis.set(format(REDIS_CHAIN_KEY, session_id), "1", ex: 48.hours.to_i)
|
|
set(wait: INTERVAL).perform_later(session_id)
|
|
end
|
|
|
|
def self.cancel_chain(session_id)
|
|
redis.del(format(REDIS_CHAIN_KEY, session_id))
|
|
end
|
|
|
|
def self.redis
|
|
@redis ||= Redis.new(url: ENV.fetch("REDIS_URL", "redis://localhost:6379/0"))
|
|
end
|
|
|
|
def perform(session_id)
|
|
return unless self.class.redis.get(format(REDIS_CHAIN_KEY, session_id))
|
|
|
|
session = StreamSession.find_by(id: session_id)
|
|
return self.class.cancel_chain(session_id) unless session
|
|
return self.class.cancel_chain(session_id) if session.terminal?
|
|
return self.class.cancel_chain(session_id) unless Streams::OverlayRelay.running?(session_id)
|
|
|
|
Streams::Overlay::Refresh.call(session)
|
|
if session.platform == "youtube"
|
|
Streams::YoutubeRelay.ensure_publishing!(session)
|
|
end
|
|
self.class.set(wait: INTERVAL).perform_later(session_id)
|
|
end
|
|
end
|