Beispiel #1
0
def mediator_main():
    monkeypatch_socket_bind_allow_port_reuse()
    disable_click_echo()

    port_range = list(get_mediator_ports())
    # transport = transport_with_timeout(sys.stdin.buffer, sys.stdout.buffer, DEFAULT_TRANSPORT_TIMEOUT)
    transport = transport_with_timeout(sys.stdin.buffer, sys.stdout.buffer, 1.0)
    remote_api = default_remote_api(transport)
    host = DEFAULT_HTTP_IFACE
    poll_interval = DEFAULT_SHUTDOWN_POLL_INTERVAL

    for port in port_range:
        mediator_logger.info('Starting mediator on %s:%s...', host, port)
        if is_port_accepting_connections(port):
            continue
        try:
            server = MediatorHttpServer(host, port, remote_api, poll_interval)
            thread = server.run.in_thread()
            sig.setup(lambda: server.run.shutdown(join=False))
            server.run.parent_watcher(interval=1.0)
            thread.join()
            mediator_logger.info('Exiting mediator pid=%s on %s:%s...', os.getpid(), host, port)
            break
        except OSError as e:
            # TODO: fixme: we won't get this if we run in a process
            mediator_logger.info('Cannot bind on port %s: %s', port, e)
        except BrokenPipeError as e:
            # TODO: probably also won't work with processes, also a race
            mediator_logger.exception('Pipe has been closed (%s)', e)
            server.run.shutdown(join=True)
            break

    else:
        mediator_logger.error('No TCP ports available for bind in range %s', port_range)
Beispiel #2
0
def create_clients(target_hosts=None) -> List[SingleMediatorAPI]:
    if target_hosts is None:
        ports = list(get_mediator_ports())
        hosts = ['localhost'] * len(ports)
    else:
        hosts, ports = parse_target_hosts(target_hosts)

    result = [SingleMediatorAPI(prefix, host=host, port=port)
              for prefix, host, port in zip(ascii_lowercase, hosts, ports)
              if is_port_accepting_connections(port, host)]
    brotab_logger.info('Created clients: %s', result)
    return result
Beispiel #3
0
def main():
    monkeypatch_socket_bind()
    disable_click_echo()

    global actual_port
    port_range = list(get_mediator_ports())
    for port in port_range:
        logger.info('Starting mediator on %s:%s...', DEFAULT_HTTP_IFACE, port)
        if is_port_accepting_connections(port):
            continue
        actual_port = port
        try:
            run_mediator(port, create_browser_remote_api())
            logger.info('Exiting mediator...')
            break
        except OSError as e:
            logger.info('Cannot bind on port %s: %s', port, e)
        except BrokenPipeError:
            signal_pipe(e)

    else:
        logger.error('No TCP ports available for bind in range %s', port_range)