mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-02 11:48:03 +00:00
Can now use reporting from monitor method, WIP
This commit is contained in:
@@ -26,7 +26,7 @@ if 'py-json' not in sys.path:
|
|||||||
import argparse
|
import argparse
|
||||||
from LANforge.lfcli_base import LFCliBase
|
from LANforge.lfcli_base import LFCliBase
|
||||||
from LANforge import LFUtils
|
from LANforge import LFUtils
|
||||||
import realm
|
from realm import Realm
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
import json
|
import json
|
||||||
@@ -40,7 +40,7 @@ class GenTest(LFCliBase):
|
|||||||
_debug_on=False,
|
_debug_on=False,
|
||||||
_exit_on_error=False,
|
_exit_on_error=False,
|
||||||
_exit_on_fail=False):
|
_exit_on_fail=False):
|
||||||
super().__init__(host, port, _local_realm=realm.Realm(host,port), _debug=_debug_on, _exit_on_fail=_exit_on_fail)
|
super().__init__(host, port, _local_realm=Realm(host,port), _debug=_debug_on, _exit_on_fail=_exit_on_fail)
|
||||||
self.ssid = ssid
|
self.ssid = ssid
|
||||||
self.radio = radio
|
self.radio = radio
|
||||||
self.upstream = upstream
|
self.upstream = upstream
|
||||||
@@ -148,15 +148,17 @@ class GenTest(LFCliBase):
|
|||||||
if self.debug:
|
if self.debug:
|
||||||
pprint.pprint(self.station_profile.station_names)
|
pprint.pprint(self.station_profile.station_names)
|
||||||
LFUtils.wait_until_ports_admin_up(base_url=self.lfclient_url, port_list=self.station_profile.station_names)
|
LFUtils.wait_until_ports_admin_up(base_url=self.lfclient_url, port_list=self.station_profile.station_names)
|
||||||
if self.local_realm.wait_for_ip(station_list=temp_stas, ipv4=True, timeout_sec=-1):
|
if self.local_realm.wait_for_ip(station_list=temp_stas, ipv4=True):
|
||||||
self._pass("All stations got IPs")
|
self._pass("All stations got IPs")
|
||||||
else:
|
else:
|
||||||
self._fail("Stations failed to get IPs")
|
self._fail("Stations failed to get IPs")
|
||||||
self.exit_fail()
|
self.exit_fail()
|
||||||
|
|
||||||
|
self.generic_endps_profile.start_cx()
|
||||||
|
|
||||||
cur_time = datetime.datetime.now()
|
cur_time = datetime.datetime.now()
|
||||||
passes = 0
|
passes = 0
|
||||||
expected_passes = 0
|
expected_passes = 0
|
||||||
self.generic_endps_profile.start_cx()
|
|
||||||
time.sleep(15)
|
time.sleep(15)
|
||||||
end_time = self.local_realm.parse_time(self.test_duration) + cur_time
|
end_time = self.local_realm.parse_time(self.test_duration) + cur_time
|
||||||
print("Starting Test...")
|
print("Starting Test...")
|
||||||
@@ -212,6 +214,24 @@ class GenTest(LFCliBase):
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
optional = []
|
||||||
|
optional.append({'name': '--mode', 'help': 'Used to force mode of stations'})
|
||||||
|
optional.append({'name': '--ap', 'help': 'Used to force a connection to a particular AP'})
|
||||||
|
optional.append({'name': '--output_format', 'help': 'choose either csv or xlsx'})
|
||||||
|
optional.append({'name': '--report_file', 'help': 'where you want to store results', 'default': None})
|
||||||
|
optional.append({'name': '--a_min', 'help': '--a_min bps rate minimum for side_a', 'default': 256000})
|
||||||
|
optional.append({'name': '--b_min', 'help': '--b_min bps rate minimum for side_b', 'default': 256000})
|
||||||
|
optional.append({'name': '--gen_cols', 'help': 'Columns wished to be monitored from layer 3 endpoint tab',
|
||||||
|
'default': ['name', 'tx bytes', 'rx bytes']})
|
||||||
|
optional.append({'name': '--port_mgr_cols', 'help': 'Columns wished to be monitored from port manager tab',
|
||||||
|
'default': ['ap', 'ip', 'parent dev']})
|
||||||
|
optional.append(
|
||||||
|
{'name': '--compared_report', 'help': 'report path and file which is wished to be compared with new report',
|
||||||
|
'default': None})
|
||||||
|
optional.append({'name': '--monitor_interval',
|
||||||
|
'help': 'how frequently do you want your monitor function to take measurements; 250ms, 35s, 2h',
|
||||||
|
'default': '2s'})
|
||||||
|
|
||||||
parser = LFCliBase.create_basic_argparse(
|
parser = LFCliBase.create_basic_argparse(
|
||||||
prog='test_generic.py',
|
prog='test_generic.py',
|
||||||
formatter_class=argparse.RawTextHelpFormatter,
|
formatter_class=argparse.RawTextHelpFormatter,
|
||||||
@@ -248,7 +268,8 @@ python3 ./test_generic.py
|
|||||||
--speedtest_min_dl 20 --speedtest_max_ping 150 --security wpa2
|
--speedtest_min_dl 20 --speedtest_max_ping 150 --security wpa2
|
||||||
IPERF3 (under construction):
|
IPERF3 (under construction):
|
||||||
./test_generic.py --mgr localhost --mgr_port 4122 --radio wiphy1 --num_stations 3 --ssid jedway-wpa2-x2048-4-1 --passwd jedway-wpa2-x2048-4-1 --security wpa2 --type iperf3
|
./test_generic.py --mgr localhost --mgr_port 4122 --radio wiphy1 --num_stations 3 --ssid jedway-wpa2-x2048-4-1 --passwd jedway-wpa2-x2048-4-1 --security wpa2 --type iperf3
|
||||||
''')
|
''',
|
||||||
|
more_optional=optional)
|
||||||
|
|
||||||
parser.add_argument('--type', help='type of command to run: generic, lfping, iperf3-client, iperf3-server, lfcurl', default="lfping")
|
parser.add_argument('--type', help='type of command to run: generic, lfping, iperf3-client, iperf3-server, lfcurl', default="lfping")
|
||||||
parser.add_argument('--cmd', help='specifies command to be run by generic type endp', default='')
|
parser.add_argument('--cmd', help='specifies command to be run by generic type endp', default='')
|
||||||
@@ -268,6 +289,54 @@ python3 ./test_generic.py
|
|||||||
num_stations_converted = int(args.num_stations)
|
num_stations_converted = int(args.num_stations)
|
||||||
num_sta = num_stations_converted
|
num_sta = num_stations_converted
|
||||||
|
|
||||||
|
# Create directory
|
||||||
|
|
||||||
|
# if file path with output file extension is not given...
|
||||||
|
# check if home/lanforge/report-data exists. if not, save
|
||||||
|
# in new folder based in current file's directory
|
||||||
|
systeminfopath = None
|
||||||
|
if args.report_file is None:
|
||||||
|
new_file_path = str(datetime.datetime.now().strftime("%Y-%m-%d-%H-h-%M-m-%S-s")).replace(':',
|
||||||
|
'-') + '-test_generic' # create path name
|
||||||
|
try:
|
||||||
|
path = os.path.join('/home/lanforge/report-data/', new_file_path)
|
||||||
|
os.mkdir(path)
|
||||||
|
except:
|
||||||
|
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']:
|
||||||
|
report_f = str(path) + '/data.' + args.output_format
|
||||||
|
output = args.output_format
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
'Not supporting this report format or cannot find report format provided. Defaulting to csv data file output type, naming it data.csv.')
|
||||||
|
report_f = str(path) + '/data.csv'
|
||||||
|
output = 'csv'
|
||||||
|
|
||||||
|
else:
|
||||||
|
systeminfopath = str(args.report_file).split('/')[-1]
|
||||||
|
report_f = args.report_file
|
||||||
|
if args.output_format is None:
|
||||||
|
output = str(args.report_file).split('.')[-1]
|
||||||
|
else:
|
||||||
|
output = args.output_format
|
||||||
|
print("Saving final report data in ... " + report_f)
|
||||||
|
|
||||||
|
# Retrieve last data file
|
||||||
|
compared_rept = None
|
||||||
|
if args.compared_report:
|
||||||
|
compared_report_format = args.compared_report.split('.')[-1]
|
||||||
|
# if compared_report_format not in ['csv', 'json', 'dta', 'pkl','html','xlsx','parquet','h5']:
|
||||||
|
if compared_report_format != 'csv':
|
||||||
|
print(ValueError("Cannot process this file type. Please select a different file and re-run script."))
|
||||||
|
exit(1)
|
||||||
|
else:
|
||||||
|
compared_rept = args.compared_report
|
||||||
|
|
||||||
station_list = LFUtils.portNameSeries(radio=args.radio,
|
station_list = LFUtils.portNameSeries(radio=args.radio,
|
||||||
prefix_="sta",
|
prefix_="sta",
|
||||||
start_id_=0,
|
start_id_=0,
|
||||||
@@ -305,6 +374,49 @@ python3 ./test_generic.py
|
|||||||
if not generic_test.passes():
|
if not generic_test.passes():
|
||||||
print(generic_test.get_fail_message())
|
print(generic_test.get_fail_message())
|
||||||
generic_test.exit_fail()
|
generic_test.exit_fail()
|
||||||
|
|
||||||
|
try:
|
||||||
|
genconnections = ','.join([[*x.keys()][0] for x in generic_test.json_get('generic')['endpoints']])
|
||||||
|
except:
|
||||||
|
raise ValueError('Try setting the upstream port flag if your device does not have an eth1 port')
|
||||||
|
|
||||||
|
if type(args.gen_cols) is not list:
|
||||||
|
generic_cols = list(args.gen_cols.split(","))
|
||||||
|
# send col names here to file to reformat
|
||||||
|
else:
|
||||||
|
generic_cols = args.gen_cols
|
||||||
|
# send col names here to file to reformat
|
||||||
|
if type(args.port_mgr_cols) is not list:
|
||||||
|
port_mgr_cols = list(args.port_mgr_cols.split(","))
|
||||||
|
# send col names here to file to reformat
|
||||||
|
else:
|
||||||
|
port_mgr_cols = args.port_mgr_cols
|
||||||
|
# send col names here to file to reformat
|
||||||
|
if args.debug:
|
||||||
|
print("Generic Endp column names are...")
|
||||||
|
print(generic_cols)
|
||||||
|
print("Port Manager column names are...")
|
||||||
|
print(port_mgr_cols)
|
||||||
|
try:
|
||||||
|
monitor_interval = Realm.parse_time(args.monitor_interval).total_seconds()
|
||||||
|
except ValueError as error:
|
||||||
|
print(ValueError("The time string provided for monitor_interval argument is invalid. Please see supported time stamp increments and inputs for monitor_interval in --help. "))
|
||||||
|
exit(1)
|
||||||
|
generic_test.start(False, False)
|
||||||
|
generic_test.generic_endps_profile.monitor(generic_cols=generic_cols,
|
||||||
|
sta_list=station_list,
|
||||||
|
#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=genconnections,
|
||||||
|
output_format=output,
|
||||||
|
compared_report=compared_rept,
|
||||||
|
script_name='test_generic',
|
||||||
|
arguments=args,
|
||||||
|
debug=args.debug)
|
||||||
|
|
||||||
generic_test.stop()
|
generic_test.stop()
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
generic_test.cleanup(station_list)
|
generic_test.cleanup(station_list)
|
||||||
|
|||||||
Reference in New Issue
Block a user