in openr/py/openr/cli/utils/utils.py [0:0]
def sprint_adj_db_full(global_adj_db, adj_db, bidir) -> str:
"""given serialized adjacency database, print neighbors. Use the
global adj database to validate bi-dir adjacencies
:param global_adj_db map(str, AdjacencyDatabase):
map of node names to their adjacent node names
:param adj_db openr_types.AdjacencyDatabase: latest from kv store
:param bidir bool: only print bidir adjacencies
:return [str]: list of string to be printed
"""
assert isinstance(adj_db, openr_types.AdjacencyDatabase)
this_node_name = adj_db.thisNodeName
title_tokens = [this_node_name]
overload_str = click.style(
f"{adj_db.isOverloaded}", fg="red" if adj_db.isOverloaded else None
)
title_tokens.append("Overloaded: {}".format(overload_str))
if adj_db.nodeLabel:
title_tokens.append(f"Node Label: {adj_db.nodeLabel}")
column_labels = [
"Neighbor",
"Local Intf",
"Remote Intf",
"Metric",
"NextHop-v4",
"NextHop-v6",
"Uptime",
]
rows = []
for adj in adj_db.adjacencies:
if bidir:
other_node_db = global_adj_db.get(adj.otherNodeName, None)
if other_node_db is None:
continue
other_node_neighbors = {a.otherNodeName for a in other_node_db.adjacencies}
if this_node_name not in other_node_neighbors:
continue
nh_v6 = ipnetwork.sprint_addr(adj.nextHopV6.addr)
nh_v4 = ipnetwork.sprint_addr(adj.nextHopV4.addr)
overload_status = click.style("Overloaded", fg="red")
metric = overload_status if adj.isOverloaded else adj.metric
uptime = time_since(adj.timestamp) if adj.timestamp else ""
rows.append(
[
adj.otherNodeName,
adj.ifName,
adj.otherIfName,
metric,
nh_v4,
nh_v6,
uptime,
]
)
return printing.render_horizontal_table(
rows, column_labels, caption=", ".join(title_tokens)
)