Files
MatchLiveTv/backend/app/jobs/overlay_refresh_job.rb
Emiliano Frascaro 2c5f4f82eb YouTube live immediata: relay sempre attivo e attivazione broadcast.
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>
2026-06-04 08:19:20 +02:00

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