27 lines
642 B
Ruby
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
|