Ejemplo n.º 1
0
def _do_peers_graph(args):
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)

    status_dict = _get_peer_endpoints(clients)

    path = args.output if args.output else DOT_FILE

    if not args.force and os.path.isfile(path):
        raise CliException(
            '{} already exists; '
            'rerun with `--force` to overwrite'.format(path))

    with open(path, 'w') as dot:
        print(
            'strict graph peers {',
            file=dot)

        for node, peers in status_dict.items():
            for peer in peers:
                print(
                    '    "{}" -- "{}"'.format(node, peer),
                    file=dot)

        print(
            '}',
            file=dot)
Ejemplo n.º 2
0
def do_compare_chains(args):
    """Calculates and outputs comparison between all nodes on the network."""
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)
    chains, unreporting = get_chain_generators(clients)
    for node in unreporting:
        print("Error connecting to node %d: %s" % (node, urls[node]))
    if not chains:
        print("No nodes reporting")
        return

    node_id_map = get_node_id_map(unreporting, len(clients))

    tails = get_tails(chains)
    graph = build_fork_graph(chains, tails)

    if args.table:
        print_table(graph, tails, node_id_map)

    elif args.tree:
        print_tree(graph, tails, node_id_map)

    else:
        print_summary(graph, tails, node_id_map)
Ejemplo n.º 3
0
def _do_peers_list(args):
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)

    print(
        json.dumps(_get_peer_endpoints(clients),
                   sort_keys=True,
                   indent=(4 if args.pretty else 0)))
Ejemplo n.º 4
0
def do_compare_chains(args):
    """Calculates and outputs comparison between all nodes on the network."""
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)

    broken = []

    chains, errors = get_chain_generators(clients, args.limit)
    broken.extend(errors)
    for node in errors:
        print("Error connecting to node %d: %s" % (node, urls[node]))
    if not chains:
        print("No nodes reporting")
        return

    tails, errors = get_tails(chains)
    broken.extend(errors)
    for node in errors:
        del chains[node]
    for node in errors:
        print("Failed to reach common height with node %d: %s" % (
            node, urls[node]))
    if not chains:
        print("Failed to get common height")
        return

    graph, errors = build_fork_graph(chains, tails)
    broken.extend(errors)
    for node in errors:
        print("Failed to reach common ancestor with node %d: %s" % (
            node, urls[node]))
    if not graph:
        print("Failed to build fork graph")
        return

    # Transform tails and errors into the format expected by the print
    # functions. Because errors can occur while building the graph, we need to
    # remove the tails for those clients.
    broken.sort()
    node_id_map = get_node_id_map(broken, len(clients))
    tails = list(map(
        lambda item: item[1],
        filter(
            lambda item: item[0] not in broken,
            sorted(tails.items()))))

    if args.table:
        print_table(graph, tails, node_id_map)

    elif args.tree:
        print_tree(graph, tails, node_id_map)

    else:
        print_summary(graph, tails, node_id_map)
Ejemplo n.º 5
0
def do_compare_chains(args):
    """Calculates and outputs comparison between all nodes on the network."""
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)

    broken = []

    chains, errors = get_chain_generators(clients)
    broken.extend(errors)
    for node in errors:
        print("Error connecting to node %d: %s" % (node, urls[node]))
    if not chains:
        print("No nodes reporting")
        return

    tails, errors = get_tails(chains)
    broken.extend(errors)
    for node in errors:
        del chains[node]
    for node in errors:
        print("Failed to reach common height with node %d: %s" % (
            node, urls[node]))
    if not chains:
        print("Failed to get common height")
        return

    graph, errors = build_fork_graph(chains, tails)
    broken.extend(errors)
    for node in errors:
        print("Failed to reach common ancestor with node %d: %s" % (
            node, urls[node]))
    if not graph:
        print("Failed to build fork graph")
        return

    # Transform tails and errors into the format expected by the print
    # functions. Because errors can occur while building the graph, we need to
    # remove the tails for those clients.
    broken.sort()
    node_id_map = get_node_id_map(broken, len(clients))
    tails = list(map(
        lambda item: item[1],
        filter(
            lambda item: item[0] not in broken,
            sorted(tails.items()))))

    if args.table:
        print_table(graph, tails, node_id_map)

    elif args.tree:
        print_tree(graph, tails, node_id_map)

    else:
        print_summary(graph, tails, node_id_map)
Ejemplo n.º 6
0
def _do_peers_list(args):
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)

    print(
        json.dumps(
            _get_peer_endpoints(clients),
            sort_keys=True,
            indent=(4 if args.pretty else 0)
        )
    )
Ejemplo n.º 7
0
def do_list_blocks(args):
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)
    block_lists = list(map(list_blocks, clients))
    for node, block_list in enumerate(block_lists):
        print("-- NODE %d --" % node)
        print("HEIGHT ID PREVIOUS")
        for _ in range(args.count):
            try:
                block = next(block_list)
                print_block(block)
            except StopIteration:
                break
        print()
Ejemplo n.º 8
0
def do_list_blocks(args):
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)
    block_lists = list(map(list_blocks, clients))
    for node, block_list in enumerate(block_lists):
        print("-- NODE %d --" % node)
        print("HEIGHT ID PREVIOUS")
        for _ in range(args.count):
            try:
                block = next(block_list)
                print_block(block)
            except StopIteration:
                break
        print()
Ejemplo n.º 9
0
def do_compare_chains(args):
    """Calculates and outputs comparison between all nodes on the network."""
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)
    chains = get_chain_generators(clients)

    tails = get_tails(chains)
    graph = build_fork_graph(chains, tails)

    if args.table:
        print_table(graph, tails)

    elif args.tree:
        print_tree(graph, tails)

    else:
        print_summary(graph, tails)
Ejemplo n.º 10
0
def _do_peers_graph(args):
    urls = split_comma_append_args(args.urls)
    users = split_comma_append_args(args.users)
    clients = make_rest_apis(urls, users)

    status_dict = _get_peer_endpoints(clients)

    path = args.output if args.output else DOT_FILE

    if not args.force and os.path.isfile(path):
        raise CliException('{} already exists; '
                           'rerun with `--force` to overwrite'.format(path))

    with open(path, 'w') as dot:
        print('strict graph peers {', file=dot)

        for node, peers in status_dict.items():
            for peer in peers:
                print('    "{}" -- "{}"'.format(node, peer), file=dot)

        print('}', file=dot)