class LogChannel < ApplicationCable::Channel def subscribed server = Server.find(params[:server_id]) stream_for server @log_thread = Thread.new { stream_logs(server) } end def unsubscribed @log_thread&.kill end private def stream_logs(server) unit_name = "left4dead2-#{server.id}.service" cmd = "journalctl --user -u #{unit_name} -f --since '10 minutes ago' 2>&1" IO.popen(cmd) do |io| io.each_line do |line| broadcast_to(server, { line: line.chomp }) end end rescue StandardError => e broadcast_to(server, { error: "Failed to stream logs: #{e.message}" }) end end