mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 11:18:03 +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