mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-03 20:27:54 +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,
|
created_cx=None,
|
||||||
monitor=True,
|
monitor=True,
|
||||||
report_file=None,
|
report_file=None,
|
||||||
|
systeminfopath=None,
|
||||||
output_format=None,
|
output_format=None,
|
||||||
script_name=None,
|
script_name=None,
|
||||||
arguments=None,
|
arguments=None,
|
||||||
@@ -123,6 +124,8 @@ class L3CXProfile(LFCliBase):
|
|||||||
raise ValueError("L3CXProfile::monitor wants duration_sec > monitor_interval")
|
raise ValueError("L3CXProfile::monitor wants duration_sec > monitor_interval")
|
||||||
if report_file == None:
|
if report_file == None:
|
||||||
raise ValueError("Monitor requires an output file to be defined")
|
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:
|
if created_cx == None:
|
||||||
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 (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
|
#================== Step 1, set column names and header row
|
||||||
layer3_cols=[self.replace_special_char(x) for x in layer3_cols]
|
layer3_cols=[self.replace_special_char(x) for x in layer3_cols]
|
||||||
layer3_fields = ",".join(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)
|
default_cols.extend(layer3_cols)
|
||||||
header_row=default_cols
|
header_row=default_cols
|
||||||
|
|
||||||
@@ -159,14 +162,13 @@ class L3CXProfile(LFCliBase):
|
|||||||
|
|
||||||
port_mgr_fields=",".join(port_mgr_cols)
|
port_mgr_fields=",".join(port_mgr_cols)
|
||||||
header_row.extend(port_mgr_cols_labelled)
|
header_row.extend(port_mgr_cols_labelled)
|
||||||
#add sys info to header row
|
#create sys info file
|
||||||
systeminfo = self.json_get('/')
|
systeminfo = self.json_get('/')
|
||||||
header_row.extend([str("LANforge GUI Build: " + systeminfo['VersionInfo']['BuildVersion']), str("Script Name: " + script_name), str("Argument input: " + str(arguments))])
|
sysinfo=[str("LANforge GUI Build: " + systeminfo['VersionInfo']['BuildVersion']), str("Script Name: " + script_name), str("Argument input: " + str(arguments))]
|
||||||
sta_list_edit=[]
|
with open(systeminfopath,'w') as filehandle:
|
||||||
if sta_list is not None:
|
for listitem in sysinfo:
|
||||||
for sta in sta_list:
|
filehandle.write('%s\n' % listitem)
|
||||||
sta_list_edit.append(sta[4:])
|
|
||||||
sta_list=",".join(sta_list_edit)
|
|
||||||
|
|
||||||
#================== Step 2, monitor columns
|
#================== Step 2, monitor columns
|
||||||
start_time = datetime.datetime.now()
|
start_time = datetime.datetime.now()
|
||||||
@@ -190,51 +192,19 @@ class L3CXProfile(LFCliBase):
|
|||||||
t = datetime.datetime.now()
|
t = datetime.datetime.now()
|
||||||
timestamp= t.strftime("%m/%d/%Y %I:%M:%S")
|
timestamp= t.strftime("%m/%d/%Y %I:%M:%S")
|
||||||
t_to_millisec_epoch= int(self.get_milliseconds(t))
|
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))
|
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))
|
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))
|
|
||||||
|
|
||||||
|
for endpoint in layer_3_response["endpoint"]: #each endpoint is a dictionary
|
||||||
|
endp_values=list(endpoint.values())[0]
|
||||||
temp_list=[]
|
temp_list=basecolumns
|
||||||
for endpoint in layer_3_response["endpoint"]:
|
for columnname in header_row[len(basecolumns):]:
|
||||||
if debug:
|
temp_list.append(endp_values[columnname])
|
||||||
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])
|
|
||||||
csvwriter.writerow(temp_list)
|
csvwriter.writerow(temp_list)
|
||||||
temp_list.clear()
|
|
||||||
new_cx_rx_values = self.__get_rx_values()
|
new_cx_rx_values = self.__get_rx_values()
|
||||||
if debug:
|
if debug:
|
||||||
print(old_cx_rx_values, new_cx_rx_values)
|
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__)))
|
curr_dir_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
path = os.path.join(curr_dir_path, new_file_path)
|
path = os.path.join(curr_dir_path, new_file_path)
|
||||||
os.mkdir(path)
|
os.mkdir(path)
|
||||||
|
systeminfopath=str(path)+'/systeminfo.txt'
|
||||||
|
|
||||||
if args.output_format in ['csv', 'json', 'html', 'hdf','stata', 'pickle', 'pdf', 'png', 'parquet',
|
if args.output_format in ['csv', 'json', 'html', 'hdf','stata', 'pickle', 'pdf', 'png', 'parquet',
|
||||||
'xlsx']:
|
'xlsx']:
|
||||||
@@ -378,8 +379,9 @@ python3 ./test_ipv4_variable_time.py
|
|||||||
ip_var_test.start(False, False)
|
ip_var_test.start(False, False)
|
||||||
ip_var_test.l3cxprofile.monitor(layer3_cols=layer3_cols,
|
ip_var_test.l3cxprofile.monitor(layer3_cols=layer3_cols,
|
||||||
sta_list=station_list,
|
sta_list=station_list,
|
||||||
port_mgr_cols=port_mgr_cols,
|
#port_mgr_cols=port_mgr_cols,
|
||||||
report_file=report_f,
|
report_file=report_f,
|
||||||
|
systeminfopath=systeminfopath,
|
||||||
duration_sec=Realm.parse_time(args.test_duration).total_seconds(),
|
duration_sec=Realm.parse_time(args.test_duration).total_seconds(),
|
||||||
monitor_interval_ms=monitor_interval,
|
monitor_interval_ms=monitor_interval,
|
||||||
created_cx=layer3connections,
|
created_cx=layer3connections,
|
||||||
|
|||||||
Reference in New Issue
Block a user