gen_cxprofile: using if not None can open traps which will spring at us randomly. Improve logic

Signed-off-by: Matthew Stidham <stidmatt@gmail.com>
This commit is contained in:
Matthew Stidham
2022-01-07 10:14:58 -08:00
committed by shivam
parent 10dc719e26
commit 3a24c0f00d

View File

@@ -39,7 +39,7 @@ class GenCXProfile(LFCliBase):
def parse_command(self, sta_name, gen_name): def parse_command(self, sta_name, gen_name):
if self.type == "lfping": if self.type == "lfping":
if ((self.dest is not None) or (self.dest != "")) and ((self.interval is not None) or (self.interval > 0)): if self.dest and self.interval:
self.cmd = "%s -i %s -I %s %s" % (self.type, self.interval, sta_name, self.dest) self.cmd = "%s -i %s -I %s %s" % (self.type, self.interval, sta_name, self.dest)
# print(self.cmd) # print(self.cmd)
else: else:
@@ -49,14 +49,14 @@ class GenCXProfile(LFCliBase):
raise ValueError("Please ensure cmd has been set correctly") raise ValueError("Please ensure cmd has been set correctly")
elif self.type == "speedtest": elif self.type == "speedtest":
self.cmd = "vrf_exec.bash %s speedtest-cli --json --share" % sta_name self.cmd = "vrf_exec.bash %s speedtest-cli --json --share" % sta_name
elif self.type == "iperf3" and self.dest is not None: elif self.type == "iperf3" and self.dest:
self.cmd = "iperf3 --forceflush --format k --precision 4 -c %s -t 60 --tos 0 -b 1K --bind_dev %s -i 1 " \ self.cmd = "iperf3 --forceflush --format k --precision 4 -c %s -t 60 --tos 0 -b 1K --bind_dev %s -i 1 " \
"--pidfile /tmp/lf_helper_iperf3_%s.pid" % (self.dest, sta_name, gen_name) "--pidfile /tmp/lf_helper_iperf3_%s.pid" % (self.dest, sta_name, gen_name)
elif self.type == "iperf3_serv" and self.dest is not None: elif self.type == "iperf3_serv" and self.dest:
self.cmd = "iperf3 --forceflush --format k --precision 4 -s --bind_dev %s -i 1 " \ self.cmd = "iperf3 --forceflush --format k --precision 4 -s --bind_dev %s -i 1 " \
"--pidfile /tmp/lf_helper_iperf3_%s.pid" % (sta_name, gen_name) "--pidfile /tmp/lf_helper_iperf3_%s.pid" % (sta_name, gen_name)
elif self.type == "lfcurl": elif self.type == "lfcurl":
if self.file_output is not None: if self.file_output:
self.cmd = "./scripts/lf_curl.sh -p %s -i AUTO -o %s -n %s -d %s" % \ self.cmd = "./scripts/lf_curl.sh -p %s -i AUTO -o %s -n %s -d %s" % \
(sta_name, self.file_output, self.loop_count, self.dest) (sta_name, self.file_output, self.loop_count, self.dest)
else: else:
@@ -122,7 +122,7 @@ class GenCXProfile(LFCliBase):
def parse_command_gen(self, sta_name, dest): def parse_command_gen(self, sta_name, dest):
if self.type == "lfping": if self.type == "lfping":
if ((self.dest is not None) or (self.dest != "")) and ((self.interval is not None) or (self.interval > 0)): if self.dest and self.interval:
self.cmd = "%s -i %s -I %s %s" % (self.type, self.interval, sta_name, dest) self.cmd = "%s -i %s -I %s %s" % (self.type, self.interval, sta_name, dest)
# print(self.cmd) # print(self.cmd)
else: else:
@@ -132,11 +132,11 @@ class GenCXProfile(LFCliBase):
raise ValueError("Please ensure cmd has been set correctly") raise ValueError("Please ensure cmd has been set correctly")
elif self.type == "speedtest": elif self.type == "speedtest":
self.cmd = "vrf_exec.bash %s speedtest-cli --json --share" % sta_name self.cmd = "vrf_exec.bash %s speedtest-cli --json --share" % sta_name
elif self.type == "iperf3" and self.dest is not None: elif self.type == "iperf3" and self.dest:
self.cmd = "iperf3 --forceflush --format k --precision 4 -c %s -t 60 --tos 0 -b 1K --bind_dev %s -i 1 " \ self.cmd = "iperf3 --forceflush --format k --precision 4 -c %s -t 60 --tos 0 -b 1K --bind_dev %s -i 1 " \
"--pidfile /tmp/lf_helper_iperf3_test.pid" % (self.dest, sta_name) "--pidfile /tmp/lf_helper_iperf3_test.pid" % (self.dest, sta_name)
elif self.type == "lfcurl": elif self.type == "lfcurl":
if self.file_output is not None: if self.file_output:
self.cmd = "./scripts/lf_curl.sh -p %s -i AUTO -o %s -n %s -d %s" % \ self.cmd = "./scripts/lf_curl.sh -p %s -i AUTO -o %s -n %s -d %s" % \
(sta_name, self.file_output, self.loop_count, self.dest) (sta_name, self.file_output, self.loop_count, self.dest)
else: else:
@@ -192,8 +192,6 @@ class GenCXProfile(LFCliBase):
resource = endp_tpl[1] resource = endp_tpl[1]
name = endp_tpl[2] name = endp_tpl[2]
gen_name_a = endp_tpl[3] gen_name_a = endp_tpl[3]
# gen_name_b = endp_tpl[3]
# (self, alias=None, shelf=1, resource=1, port=None, type=None)
data = { data = {
"alias": gen_name_a, "alias": gen_name_a,
@@ -278,7 +276,7 @@ class GenCXProfile(LFCliBase):
time.sleep(sleep_time) time.sleep(sleep_time)
def create(self, ports=None, sleep_time=.5, debug_=False, suppress_related_commands_=None): def create(self, ports=None, sleep_time=.5, debug_=False, suppress_related_commands_=None):
if ports is None: if not ports:
ports = [] ports = []
if self.debug: if self.debug:
debug_ = True debug_ = True
@@ -301,8 +299,6 @@ class GenCXProfile(LFCliBase):
resource = endp_tpl[1] resource = endp_tpl[1]
name = endp_tpl[2] name = endp_tpl[2]
gen_name_a = endp_tpl[3] gen_name_a = endp_tpl[3]
# gen_name_b = endp_tpl[3]
# (self, alias=None, shelf=1, resource=1, port=None, type=None)
data = { data = {
"alias": gen_name_a, "alias": gen_name_a,
@@ -369,7 +365,7 @@ class GenCXProfile(LFCliBase):
gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug) gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug)
if self.debug: if self.debug:
print(gen_results) print(gen_results)
if gen_results['endpoints'] is not None: if gen_results['endpoints']:
for name in gen_results['endpoints']: for name in gen_results['endpoints']:
for k, v in name.items(): for k, v in name.items():
if v['name'] in self.created_endp and not v['name'].endswith('1'): if v['name'] in self.created_endp and not v['name'].endswith('1'):
@@ -382,7 +378,7 @@ class GenCXProfile(LFCliBase):
gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug) gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug)
if self.debug: if self.debug:
print(gen_results) print(gen_results)
if gen_results['endpoints'] is not None: if gen_results['endpoints']:
for name in gen_results['endpoints']: for name in gen_results['endpoints']:
for k, v in name.items(): for k, v in name.items():
if v['name'] != '': if v['name'] != '':
@@ -395,7 +391,7 @@ class GenCXProfile(LFCliBase):
def choose_iperf3_command(self): def choose_iperf3_command(self):
gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug) gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug)
if gen_results['endpoints'] is not None: if gen_results['endpoints']:
pprint(gen_results['endpoints']) pprint(gen_results['endpoints'])
# for name in gen_results['endpoints']: # for name in gen_results['endpoints']:
# pprint(name.items) # pprint(name.items)
@@ -404,12 +400,12 @@ class GenCXProfile(LFCliBase):
def choose_speedtest_command(self): def choose_speedtest_command(self):
gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug) gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug)
if gen_results['endpoints'] is not None: if gen_results['endpoints']:
for name in gen_results['endpoints']: for name in gen_results['endpoints']:
for k, v in name.items(): for k, v in name.items():
if v['last results'] is not None and v['name'] in self.created_endp and v['last results'] != '': if v['last results'] and v['name'] in self.created_endp and v['last results'] != '':
last_results = json.loads(v['last results']) last_results = json.loads(v['last results'])
if last_results['download'] is None and last_results['upload'] is None and last_results['ping'] is None: if not last_results['download'] and not last_results['upload'] and not last_results['ping']:
return False, v['name'] return False, v['name']
elif last_results['download'] >= self.speedtest_min_dl and \ elif last_results['download'] >= self.speedtest_min_dl and \
last_results['upload'] >= self.speedtest_min_up and \ last_results['upload'] >= self.speedtest_min_up and \
@@ -418,7 +414,7 @@ class GenCXProfile(LFCliBase):
def choose_generic_command(self): def choose_generic_command(self):
gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug) gen_results = self.json_get("generic/list?fields=name,last+results", debug_=self.debug)
if gen_results['endpoints'] is not None: if gen_results['endpoints']:
for name in gen_results['endpoints']: for name in gen_results['endpoints']:
for k, v in name.items(): for k, v in name.items():
if v['name'] in self.created_endp and not v['name'].endswith('1'): if v['name'] in self.created_endp and not v['name'].endswith('1'):
@@ -445,21 +441,21 @@ class GenCXProfile(LFCliBase):
try: try:
duration_sec = self.parse_time(duration_sec).seconds duration_sec = self.parse_time(duration_sec).seconds
except ValueError: except ValueError:
if (duration_sec is None) or (duration_sec <= 1): if not duration_sec or (duration_sec <= 1):
raise ValueError("GenCXProfile::monitor wants duration_sec > 1 second") raise ValueError("GenCXProfile::monitor wants duration_sec > 1 second")
if duration_sec <= monitor_interval_ms: if duration_sec <= monitor_interval_ms:
raise ValueError("GenCXProfile::monitor wants duration_sec > monitor_interval") raise ValueError("GenCXProfile::monitor wants duration_sec > monitor_interval")
if report_file is None: if not report_file:
raise ValueError("Monitor requires an output file to be defined") raise ValueError("Monitor requires an output file to be defined")
if systeminfopath is None: if not systeminfopath:
raise ValueError("Monitor requires a system info path to be defined") raise ValueError("Monitor requires a system info path to be defined")
if created_cx is None: if not created_cx:
raise ValueError("Monitor needs a list of Layer 3 connections") raise ValueError("Monitor needs a list of Layer 3 connections")
if (monitor_interval_ms is None) or (monitor_interval_ms < 1): if not monitor_interval_ms or (monitor_interval_ms < 1):
raise ValueError("GenCXProfile::monitor wants monitor_interval >= 1 second") raise ValueError("GenCXProfile::monitor wants monitor_interval >= 1 second")
if generic_cols is None: if not generic_cols:
raise ValueError("GenCXProfile::monitor wants a list of column names to monitor") raise ValueError("GenCXProfile::monitor wants a list of column names to monitor")
if output_format is not None: if output_format:
if output_format.lower() != report_file.split('.')[-1]: if output_format.lower() != report_file.split('.')[-1]:
raise ValueError( raise ValueError(
'Filename %s has an extension that does not match output format %s .' % (report_file, output_format)) 'Filename %s has an extension that does not match output format %s .' % (report_file, output_format))
@@ -476,13 +472,13 @@ class GenCXProfile(LFCliBase):
generic_fields = ",".join(generic_cols) generic_fields = ",".join(generic_cols)
default_cols = ['Timestamp', 'Timestamp milliseconds epoch', 'Timestamp seconds epoch', 'Duration elapsed'] default_cols = ['Timestamp', 'Timestamp milliseconds epoch', 'Timestamp seconds epoch', 'Duration elapsed']
default_cols.extend(generic_cols) default_cols.extend(generic_cols)
if port_mgr_cols is not None: if port_mgr_cols:
default_cols.extend(port_mgr_cols) default_cols.extend(port_mgr_cols)
header_row = default_cols header_row = default_cols
# csvwriter.writerow([systeminfo['VersionInfo']['BuildVersion'], script_name, str(arguments)]) # csvwriter.writerow([systeminfo['VersionInfo']['BuildVersion'], script_name, str(arguments)])
if port_mgr_cols is not None: if port_mgr_cols:
port_mgr_cols = [self.replace_special_char(x) for x in port_mgr_cols] port_mgr_cols = [self.replace_special_char(x) for x in port_mgr_cols]
port_mgr_cols_labelled = [] port_mgr_cols_labelled = []
for col_name in port_mgr_cols: for col_name in port_mgr_cols:
@@ -536,7 +532,7 @@ class GenCXProfile(LFCliBase):
else: else:
continue continue
expected_passes += 1 expected_passes += 1
if result is not None: if result:
if result[0]: if result[0]:
passes += 1 passes += 1
else: else:
@@ -556,16 +552,16 @@ class GenCXProfile(LFCliBase):
generic_response = self.json_get("/generic/%s?fields=%s" % (created_cx, generic_fields)) generic_response = self.json_get("/generic/%s?fields=%s" % (created_cx, generic_fields))
if port_mgr_cols is not None: if port_mgr_cols:
port_mgr_response = self.json_get("/port/1/1/%s?fields=%s" % (sta_list, port_mgr_fields)) port_mgr_response = self.json_get("/port/1/1/%s?fields=%s" % (sta_list, port_mgr_fields))
# get info from port manager with list of values from cx_a_side_list # get info from port manager with list of values from cx_a_side_list
if "endpoints" not in generic_response or generic_response is None: if "endpoints" not in generic_response or not generic_response:
print(generic_response) print(generic_response)
raise ValueError("Cannot find columns requested to be searched. Exiting script, please retry.")
if debug: if debug:
print("Json generic_response from LANforge... " + str(generic_response)) print("Json generic_response from LANforge... " + str(generic_response))
if port_mgr_cols is not None: raise ValueError("Cannot find columns requested to be searched. Exiting script, please retry.")
if "interfaces" not in port_mgr_response or port_mgr_response is None: if port_mgr_cols:
if "interfaces" not in port_mgr_response or not port_mgr_response:
print(port_mgr_response) print(port_mgr_response)
raise ValueError("Cannot find columns requested to be searched. Exiting script, please retry.") raise ValueError("Cannot find columns requested to be searched. Exiting script, please retry.")
if debug: if debug:
@@ -576,7 +572,7 @@ class GenCXProfile(LFCliBase):
temp_list = basecolumns temp_list = basecolumns
for columnname in header_row[len(basecolumns):]: for columnname in header_row[len(basecolumns):]:
temp_list.append(endp_values[columnname]) temp_list.append(endp_values[columnname])
if port_mgr_cols is not None: if port_mgr_cols:
for sta_name in sta_list_edit: for sta_name in sta_list_edit:
if sta_name in current_sta: if sta_name in current_sta:
for interface in port_mgr_response["interfaces"]: for interface in port_mgr_response["interfaces"]:
@@ -596,7 +592,7 @@ class GenCXProfile(LFCliBase):
csvfile.close() csvfile.close()
# comparison to last report / report inputted # comparison to last report / report inputted
if compared_report is not None: if compared_report:
compared_df = pandas_extensions.compare_two_df(dataframe_one=pandas_extensions.file_to_df(report_file), compared_df = pandas_extensions.compare_two_df(dataframe_one=pandas_extensions.file_to_df(report_file),
dataframe_two=pandas_extensions.file_to_df(compared_report)) dataframe_two=pandas_extensions.file_to_df(compared_report))
exit(1) exit(1)