l4d.tools/app/channels/log_channel.rb
2026-01-18 17:42:32 +01:00

27 lines
642 B
Ruby

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