From 70da0d4a626eb34c9e6c0a54eeb48839b90a43ce Mon Sep 17 00:00:00 2001 From: Matthew Stidham Date: Mon, 21 Dec 2020 18:12:13 -0800 Subject: [PATCH] faster monitor function --- py-json/realm.py | 66 ++++++++++++++++++++++----- py-scripts/test_ipv4_variable_time.py | 51 +-------------------- 2 files changed, 57 insertions(+), 60 deletions(-) diff --git a/py-json/realm.py b/py-json/realm.py index be56670f..e9e507b7 100755 --- a/py-json/realm.py +++ b/py-json/realm.py @@ -1042,7 +1042,34 @@ class L3CXProfile(LFCliBase): for cx_name in self.get_cx_names(): self.data[cx_name] = self.json_get("/cx/" + cx_name).get(cx_name) return self.data + def __get_rx_values(self): + cx_list = self.json_get("endp?fields=name,rx+bytes", debug_=self.debug) + if self.debug: + print(self.created_cx.values()) + print("==============\n", cx_list, "\n==============") + cx_rx_map = {} + for cx_name in cx_list['endpoint']: + if cx_name != 'uri' and cx_name != 'handler': + for item, value in cx_name.items(): + for value_name, value_rx in value.items(): + if value_name == 'rx bytes' and item in self.created_cx.values(): + cx_rx_map[item] = value_rx + return cx_rx_map + def __compare_vals(self, old_list, new_list): + passes = 0 + expected_passes = 0 + if len(old_list) == len(new_list): + for item, value in old_list.items(): + expected_passes += 1 + if new_list[item] > old_list[item]: + passes += 1 + if passes == expected_passes: + return True + else: + return False + else: + return False def monitor(self,duration_sec=60, interval_sec=1, col_names=None, @@ -1090,6 +1117,9 @@ class L3CXProfile(LFCliBase): print('endpoints') print(endps) value_map = dict() + passes = 0 + expected_passes = 0 + old_cx_rx_values = self.__get_rx_values() while datetime.datetime.now() < end_time: response = lfcli.json_get("/endp/%s?fields=%s" % (endps, fields), debug_=self.debug) # lfcli.json_get("/endp/VTsta0000-0-B,VTsta0001-1") @@ -1101,33 +1131,47 @@ class L3CXProfile(LFCliBase): value_map[datetime.datetime.now()]=response if datetime.datetime.now() > end_time: break; + new_cx_rx_values = self.__get_rx_values() + if self.debug: + print(old_cx_rx_values, new_cx_rx_values) + print("\n-----------------------------------") + print(curr_time, end_time) + print("-----------------------------------\n") + expected_passes += 1 + if self.__compare_vals(old_cx_rx_values, new_cx_rx_values): + passes += 1 + else: + self._fail("FAIL: Not all stations increased traffic") + self.exit_fail() + old_cx_rx_values = new_cx_rx_values time.sleep(interval_sec) #print(value_map) + if passes == expected_passes: + self._pass("PASS: All tests passed") #Step 5, close and save - endpoints=[x['endpoint'] for x in value_map.values()] + endpoints=list() + for endpoint in value_map.values(): + endpoint.append() endpoints2=[] - for y in range(0,len(endpoints)): - for x in range(0,len(endpoints[0])): - endpoints2.append([*[*endpoints[y][x].values()][0].values()]) + for y in range(0, len(endpoints)): + for x in range(0, len(endpoints[0])): + endpoints2.append(list(list(endpoints[y][x].values())[0].values())) timestamps=[] for timestamp in [*value_map.keys()]: timestamps.extend([str(timestamp)]*4) - for point in range(0,len(endpoints2)): - endpoints2[point].insert(0,timestamps[point]) + for point in range(0, len(endpoints2)): + endpoints2[point].insert(0, timestamps[point]) workbook = xlsxwriter.Workbook(report_file) worksheet = workbook.add_worksheet() - print(col_names) - print(type(col_names)) header_row=col_names header_row.insert(0,'Timestamp') - print(header_row) for col_num,data in enumerate(header_row): - worksheet.write(0,col_num,data) + worksheet.write(0, col_num,data) row_num = 1 for x in endpoints2: for col_num, data in enumerate(x): - worksheet.write(row_num,col_num,str(data)) + worksheet.write(row_num, col_num, str(data)) row_num+=1 workbook.close() diff --git a/py-scripts/test_ipv4_variable_time.py b/py-scripts/test_ipv4_variable_time.py index e223339d..157ecffd 100755 --- a/py-scripts/test_ipv4_variable_time.py +++ b/py-scripts/test_ipv4_variable_time.py @@ -93,22 +93,6 @@ class IPV4VariableTime(LFCliBase): cx_rx_map[item] = value_rx return cx_rx_map - def __compare_vals(self, old_list, new_list): - passes = 0 - expected_passes = 0 - if len(old_list) == len(new_list): - for item, value in old_list.items(): - expected_passes += 1 - if new_list[item] > old_list[item]: - passes += 1 - - if passes == expected_passes: - return True - else: - return False - else: - return False - def start(self, print_pass=False, print_fail=False): self.station_profile.admin_up() temp_stas = self.station_profile.station_names.copy() @@ -118,37 +102,8 @@ class IPV4VariableTime(LFCliBase): else: self._fail("Stations failed to get IPs") self.exit_fail() - old_cx_rx_values = self.__get_rx_values() self.cx_profile.start_cx() - passes = 0 - expected_passes = 0 - curr_time = datetime.datetime.now() - end_time = self.local_realm.parse_time(self.test_duration) + curr_time - sleep_interval = self.local_realm.parse_time(self.test_duration) // 3 - while curr_time < end_time: - - time.sleep(sleep_interval.total_seconds()) - - new_cx_rx_values = self.__get_rx_values() - if self.debug: - print(old_cx_rx_values, new_cx_rx_values) - print("\n-----------------------------------") - print(curr_time, end_time) - print("-----------------------------------\n") - expected_passes += 1 - if self.__compare_vals(old_cx_rx_values, new_cx_rx_values): - passes += 1 - else: - self._fail("FAIL: Not all stations increased traffic") - self.exit_fail() - - old_cx_rx_values = new_cx_rx_values - curr_time = datetime.datetime.now() - - if passes == expected_passes: - self._pass("PASS: All tests passed") - def stop(self): self.cx_profile.stop_cx() @@ -255,12 +210,10 @@ def main(): print(ip_var_test.get_fail_message()) ip_var_test.exit_fail() ip_var_test.start(False, False) - print('ip_var_cx_names') - print(ip_var_test.cx_profile.get_cx_names()) ip_var_test.l3cxprofile.monitor(col_names=['Name','Tx Rate','Rx Rate','Tx PDUs','Rx PDUs'], - report_file='/home/lanforge/report-data/'+str(datetime.datetime.now())+'test_ipv4_variable_time.json', - duration_sec=10) + report_file='/home/lanforge/report-data/'+str(datetime.datetime.now())+'test_ipv4_variable_time.xlsx', + duration_sec=60) ip_var_test.stop() if not ip_var_test.passes(): print(ip_var_test.get_fail_message())