mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +00:00 
			
		
		
		
	Simpler csv writing application and pushing system information to a text file
Signed-off-by: Matthew Stidham <stidmatt@protonmail.com>
This commit is contained in:
		| @@ -109,6 +109,7 @@ class L3CXProfile(LFCliBase): | ||||
|                 created_cx=None, | ||||
|                 monitor=True, | ||||
|                 report_file=None, | ||||
|                 systeminfopath=None, | ||||
|                 output_format=None, | ||||
|                 script_name=None, | ||||
|                 arguments=None, | ||||
| @@ -123,6 +124,8 @@ class L3CXProfile(LFCliBase): | ||||
|                 raise ValueError("L3CXProfile::monitor wants duration_sec > monitor_interval") | ||||
|         if report_file == None: | ||||
|             raise ValueError("Monitor requires an output file to be defined") | ||||
|         if systeminfopath == None: | ||||
|             raise ValueError("Monitor requires a system info path to be defined") | ||||
|         if created_cx == None: | ||||
|             raise ValueError("Monitor needs a list of Layer 3 connections") | ||||
|         if (monitor_interval_ms is None) or (monitor_interval_ms < 1): | ||||
| @@ -144,7 +147,7 @@ class L3CXProfile(LFCliBase): | ||||
|         #================== Step 1, set column names and header row | ||||
|         layer3_cols=[self.replace_special_char(x) for x in layer3_cols] | ||||
|         layer3_fields = ",".join(layer3_cols) | ||||
|         default_cols=['Timestamp','Timestamp milliseconds epoch','Duration elapsed'] | ||||
|         default_cols=['Timestamp','Timestamp milliseconds epoch','Timestamp seconds epoch','Duration elapsed'] | ||||
|         default_cols.extend(layer3_cols) | ||||
|         header_row=default_cols | ||||
|  | ||||
| @@ -159,14 +162,13 @@ class L3CXProfile(LFCliBase): | ||||
|              | ||||
|             port_mgr_fields=",".join(port_mgr_cols) | ||||
|             header_row.extend(port_mgr_cols_labelled) | ||||
|         #add sys info to header row | ||||
|         #create sys info file | ||||
|         systeminfo = self.json_get('/') | ||||
|         header_row.extend([str("LANforge GUI Build: " + systeminfo['VersionInfo']['BuildVersion']), str("Script Name: " + script_name), str("Argument input: " + str(arguments))]) | ||||
|         sta_list_edit=[] | ||||
|         if sta_list is not None: | ||||
|             for sta in sta_list: | ||||
|                 sta_list_edit.append(sta[4:]) | ||||
|             sta_list=",".join(sta_list_edit) | ||||
|         sysinfo=[str("LANforge GUI Build: " + systeminfo['VersionInfo']['BuildVersion']), str("Script Name: " + script_name), str("Argument input: " + str(arguments))] | ||||
|         with open(systeminfopath,'w') as filehandle: | ||||
|             for listitem in sysinfo: | ||||
|                 filehandle.write('%s\n' % listitem) | ||||
|  | ||||
|  | ||||
|         #================== Step 2, monitor columns | ||||
|         start_time = datetime.datetime.now() | ||||
| @@ -190,51 +192,19 @@ class L3CXProfile(LFCliBase): | ||||
|             t = datetime.datetime.now() | ||||
|             timestamp= t.strftime("%m/%d/%Y %I:%M:%S") | ||||
|             t_to_millisec_epoch= int(self.get_milliseconds(t)) | ||||
|             t_to_sec_epoch= int(self.get_seconds(t)) | ||||
|             time_elapsed=int(self.get_seconds(t))-int(self.get_seconds(initial_starttime)) | ||||
|             basecolumns=[timestamp,t_to_millisec_epoch,t_to_sec_epoch,time_elapsed] | ||||
|          | ||||
|             layer_3_response = self.json_get("/endp/%s?fields=%s" % (created_cx, layer3_fields)) | ||||
|             if port_mgr_cols is not None: | ||||
|                 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 | ||||
|             if "endpoint" not in layer_3_response or layer_3_response is None: | ||||
|                 print(layer_3_response) | ||||
|                 raise ValueError("Cannot find columns requested to be searched. Exiting script, please retry.") | ||||
|             if debug: | ||||
|                     print("Json layer_3_response from LANforge... " + str(layer_3_response)) | ||||
|             if port_mgr_cols is not None: | ||||
|                 if "interfaces" not in port_mgr_response or port_mgr_response is None: | ||||
|                     print(port_mgr_response) | ||||
|                     raise ValueError("Cannot find columns requested to be searched. Exiting script, please retry.") | ||||
|             if debug: | ||||
|                     print("Json port_mgr_response from LANforge... " + str(port_mgr_response)) | ||||
|              | ||||
|  | ||||
|           | ||||
|             temp_list=[] | ||||
|             for endpoint in layer_3_response["endpoint"]: | ||||
|                 if debug: | ||||
|                     print("Current endpoint values list... ") | ||||
|                     print(list(endpoint.values())[0]) | ||||
|                 temp_endp_values=list(endpoint.values())[0] #dict | ||||
|                 temp_list.extend([timestamp,t_to_millisec_epoch,time_elapsed])  | ||||
|                 current_sta = temp_endp_values['name'] | ||||
|                 merge={} | ||||
|                 if port_mgr_cols is not None: | ||||
|                     for sta_name in sta_list_edit: | ||||
|                         if sta_name in current_sta: | ||||
|                             for interface in port_mgr_response["interfaces"]: | ||||
|                                 if sta_name in list(interface.keys())[0]: | ||||
|                                     merge=temp_endp_values.copy() | ||||
|                                     #rename keys (separate port mgr 'rx bytes' from layer3 'rx bytes') | ||||
|                                     port_mgr_values_dict =list(interface.values())[0] | ||||
|                                     renamed_port_cols={} | ||||
|                                     for key in port_mgr_values_dict.keys(): | ||||
|                                         renamed_port_cols['port mgr - ' +key]=port_mgr_values_dict[key] | ||||
|                                     merge.update(renamed_port_cols) | ||||
|                 for name in header_row[3:-3]: | ||||
|                     temp_list.append(merge[name]) | ||||
|             for endpoint in layer_3_response["endpoint"]: #each endpoint is a dictionary | ||||
|                 endp_values=list(endpoint.values())[0] | ||||
|                 temp_list=basecolumns | ||||
|                 for columnname in header_row[len(basecolumns):]: | ||||
|                     temp_list.append(endp_values[columnname]) | ||||
|                 csvwriter.writerow(temp_list) | ||||
|                 temp_list.clear() | ||||
|  | ||||
|             new_cx_rx_values = self.__get_rx_values() | ||||
|             if debug: | ||||
|                 print(old_cx_rx_values, new_cx_rx_values) | ||||
|   | ||||
| @@ -291,6 +291,7 @@ python3 ./test_ipv4_variable_time.py | ||||
|             curr_dir_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | ||||
|             path = os.path.join(curr_dir_path, new_file_path) | ||||
|             os.mkdir(path) | ||||
|         systeminfopath=str(path)+'/systeminfo.txt' | ||||
|  | ||||
|         if args.output_format in ['csv', 'json', 'html', 'hdf','stata', 'pickle', 'pdf', 'png', 'parquet', | ||||
|                                   'xlsx']: | ||||
| @@ -378,8 +379,9 @@ python3 ./test_ipv4_variable_time.py | ||||
|     ip_var_test.start(False, False) | ||||
|     ip_var_test.l3cxprofile.monitor(layer3_cols=layer3_cols, | ||||
|                                     sta_list=station_list, | ||||
|                                     port_mgr_cols=port_mgr_cols, | ||||
|                                     #port_mgr_cols=port_mgr_cols, | ||||
|                                     report_file=report_f, | ||||
|                                     systeminfopath=systeminfopath, | ||||
|                                     duration_sec=Realm.parse_time(args.test_duration).total_seconds(), | ||||
|                                     monitor_interval_ms=monitor_interval, | ||||
|                                     created_cx=layer3connections, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Matthew Stidham
					Matthew Stidham