Skip to content

Commit c9f927e

Browse files
authored
Merge pull request #18 from MuLinForest/202311.X-Enhance_show_vrf_command
[show][vrf] Improve the speed of show command for vrf
2 parents 07e5bf4 + 1def4fd commit c9f927e

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

show/main.py

+18-13
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def get_cmd_output(cmd):
146146
iface_alias_converter = lazy_object_proxy.Proxy(lambda: clicommon.InterfaceAliasConverter())
147147

148148
#
149-
# Display all storm-control data
149+
# Display all storm-control data
150150
#
151151
def display_storm_all():
152152
""" Show storm-control """
@@ -312,17 +312,21 @@ def cli(ctx):
312312
# 'vrf' command ("show vrf")
313313
#
314314

315-
def get_interface_bind_to_vrf(config_db, vrf_name):
316-
"""Get interfaces belong to vrf
315+
def get_interface_bind_to_vrf(config_db, vrf_name_list):
316+
"""Get all interfaces belong to all vrfs of vrf_name_list
317317
"""
318318
tables = ['INTERFACE', 'PORTCHANNEL_INTERFACE', 'VLAN_INTERFACE', 'LOOPBACK_INTERFACE', 'VLAN_SUB_INTERFACE']
319-
data = []
319+
data = {}
320320
for table_name in tables:
321321
interface_dict = config_db.get_table(table_name)
322322
if interface_dict:
323-
for interface in interface_dict:
324-
if 'vrf_name' in interface_dict[interface] and vrf_name == interface_dict[interface]['vrf_name']:
325-
data.append(interface)
323+
for vrf_name in vrf_name_list:
324+
for interface in interface_dict:
325+
if 'vrf_name' in interface_dict[interface] and vrf_name == interface_dict[interface]['vrf_name']:
326+
if vrf_name in data:
327+
data[vrf_name].append(interface)
328+
else:
329+
data[vrf_name] = [interface]
326330
return data
327331

328332
@cli.command()
@@ -340,12 +344,13 @@ def vrf(vrf_name):
340344
vrfs = list(vrf_dict.keys())
341345
elif vrf_name in vrf_dict:
342346
vrfs = [vrf_name]
347+
intfs_dict = get_interface_bind_to_vrf(config_db, vrfs)
348+
vrfs.sort()
343349
for vrf in vrfs:
344-
intfs = get_interface_bind_to_vrf(config_db, vrf)
345-
intfs = natsorted(intfs)
346-
if len(intfs) == 0:
350+
if vrf not in intfs_dict:
347351
body.append([vrf, ""])
348352
else:
353+
intfs = intfs_dict[vrf]
349354
body.append([vrf, intfs[0]])
350355
for intf in intfs[1:]:
351356
body.append(["", intf])
@@ -444,7 +449,7 @@ def is_mgmt_vrf_enabled(ctx):
444449
return False
445450

446451
#
447-
# 'storm-control' group
452+
# 'storm-control' group
448453
# "show storm-control [interface <interface>]"
449454
#
450455
@cli.group('storm-control', invoke_without_command=True)
@@ -2094,7 +2099,7 @@ def summary(db):
20942099
key_values = key.split('|')
20952100
values = db.db.get_all(db.db.STATE_DB, key)
20962101
if "local_discriminator" not in values.keys():
2097-
values["local_discriminator"] = "NA"
2102+
values["local_discriminator"] = "NA"
20982103
bfd_body.append([key_values[3], key_values[2], key_values[1], values["state"], values["type"], values["local_addr"],
20992104
values["tx_interval"], values["rx_interval"], values["multiplier"], values["multihop"], values["local_discriminator"]])
21002105

@@ -2125,7 +2130,7 @@ def peer(db, peer_ip):
21252130
key_values = key.split(delimiter)
21262131
values = db.db.get_all(db.db.STATE_DB, key)
21272132
if "local_discriminator" not in values.keys():
2128-
values["local_discriminator"] = "NA"
2133+
values["local_discriminator"] = "NA"
21292134
bfd_body.append([key_values[3], key_values[2], key_values[1], values.get("state"), values.get("type"), values.get("local_addr"),
21302135
values.get("tx_interval"), values.get("rx_interval"), values.get("multiplier"), values.get("multihop"), values.get("local_discriminator")])
21312136

0 commit comments

Comments
 (0)