namespace :streams do desc "Termina sessioni attive non in onda su MediaMTX e rimuove path RTMP orfani" task cleanup_stale: :environment do client = Mediamtx::Client.new online = client.online_path_names stale = StreamSession.broadcasting.includes(match: :team).reject do |session| online.include?(session.mediamtx_path_name) end puts "MediaMTX online: #{online.size}" puts "Sessioni da chiudere: #{stale.size}" stale.each do |session| Sessions::Stop.new(session).call puts " ended #{session.id} (#{session.match.team.name} vs #{session.match.opponent_name})" rescue StandardError => e session.finish! if session.may_finish? client.delete_path(session) if session.mediamtx_path_name.present? puts " ended #{session.id} (fallback: #{e.message})" end result = Mediamtx::CleanupOrphanPaths.new(client: client).call puts "Path MediaMTX rimossi: #{result.removed} (saltati: #{result.skipped})" puts "Fatto." end desc "Rimuove path MediaMTX orfani (dirette giĆ  terminate)" task cleanup_orphan_paths: :environment do result = Mediamtx::CleanupOrphanPaths.new.call puts "Path MediaMTX rimossi: #{result.removed} (saltati: #{result.skipped})" end end