Method: Roby::Application#start_log_server

Defined in:
lib/roby/app.rb

#start_log_server(logfile, options = {}) ⇒ Object



2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
# File 'lib/roby/app.rb', line 2437

def start_log_server(logfile, options = {})
    require "roby/droby/logfile/server"

    # Allocate a TCP server to get an ephemeral port, and pass it to
    # roby-display
    sampling_period = Float(options["sampling_period"] ||
                            DRoby::Logfile::Server::DEFAULT_SAMPLING_PERIOD)

    tcp_server = TCPServer.new(Integer(options["port"] || 0))
    server_flags = [
        "--fd=#{tcp_server.fileno}",
        "--sampling=#{sampling_period}",
        logfile
    ]
    redirect_flags = { tcp_server => tcp_server }
    if options["debug"]
        server_flags << "--debug"
    elsif options["silent"]
        redirect_flags[:out] = redirect_flags[:err] = "/dev/null"
    end

    @log_server_port = tcp_server.local_address.ip_port
    @log_server_pid = Kernel.spawn(
        Gem.ruby, File.join(Roby::BIN_DIR, "roby-display"),
        "server", *server_flags, redirect_flags
    )
ensure
    tcp_server&.close
end