tos-plus: Fix some stats gathering and xlsx output.

This commit is contained in:
Ben Greear
2020-03-31 13:34:27 -07:00
parent 41abc4f5f2
commit ce62e2ed00

View File

@@ -53,7 +53,7 @@ FORMAT = '%(asctime)s %(name)s %(levelname)s: %(message)s'
lfmgr = "127.0.0.1" lfmgr = "127.0.0.1"
cx_strs = [] # station-radio, station-port, mode, upstream-port, protocol, pkt-size, speed_ul, speed_dl, QoS. cx_strs = [] # station-radio, station-port, mode, upstream-port, protocol, pkt-size, speed_ul, speed_dl, QoS.
outfile = "tos_results.xlsx" outfile = "tos+_results.xlsx"
dur = 5 * 60 dur = 5 * 60
passwd = "" passwd = ""
ssid = "Test-SSID" ssid = "Test-SSID"
@@ -196,6 +196,8 @@ def main():
worksheet.set_column(col, col, dwidth) worksheet.set_column(col, col, dwidth)
worksheet.write(row, col, 'Combined\nRSSI', dblue_bold); col += 1 worksheet.write(row, col, 'Combined\nRSSI', dblue_bold); col += 1
worksheet.set_column(col, col, dwidth) worksheet.set_column(col, col, dwidth)
worksheet.write(row, col, 'Endpoint\nTX Pkt\nSize', dtan_bold); col += 1
worksheet.set_column(col, col, dwidth)
worksheet.write(row, col, 'Endpoint\nOffered\nLoad', dtan_bold); col += 1 worksheet.write(row, col, 'Endpoint\nOffered\nLoad', dtan_bold); col += 1
worksheet.set_column(col, col, dwidth) worksheet.set_column(col, col, dwidth)
worksheet.write(row, col, 'Endpoint\nRx\nThroughput', dtan_bold); col += 1 worksheet.write(row, col, 'Endpoint\nRx\nThroughput', dtan_bold); col += 1
@@ -222,6 +224,10 @@ def main():
sta_to_mode = {} # map station name to mode sta_to_mode = {} # map station name to mode
cxnames = [] # list of all cxnames cxnames = [] # list of all cxnames
endp_to_port = {}
endp_to_pktsz = {}
endp_to_proto = {}
endp_to_tos = {}
e_tot = "" e_tot = ""
@@ -240,13 +246,6 @@ def main():
cx_speed_ul = cxa[6] cx_speed_ul = cxa[6]
cx_speed_dl = cxa[7] cx_speed_dl = cxa[7]
t = cxa[8] # qos t = cxa[8] # qos
if sta in sta_to_mode:
old_mode = sta_to_mode[sta]
if old_mode != mode:
emsg = ("ERROR: Skipping connection: \"%s\", mode conflicts with previous mode: %s"%(cx, old_mode))
e_tot.append(cxa)
print(emsg)
continue
u_name = upstream_port u_name = upstream_port
u_resource = 1 u_resource = 1
@@ -262,6 +261,17 @@ def main():
sta_resource = tmpa[0]; sta_resource = tmpa[0];
sta_name = tmpa[1]; sta_name = tmpa[1];
sta_key = "%s.%s"%(sta_resource, sta_name)
if sta_key in sta_to_mode:
old_mode = sta_to_mode[sta_key]
if old_mode != mode:
emsg = ("ERROR: Skipping connection: \"%s\", mode conflicts with previous mode: %s"%(cx, old_mode))
e_tot.append(cxa)
print(emsg)
continue
else:
sta_to_mode[sta_key] = mode
rad_resource = "1" rad_resource = "1"
rad_name = radio; rad_name = radio;
if radio[0].isdigit(): if radio[0].isdigit():
@@ -350,6 +360,15 @@ def main():
if (cx_proto == "tcp"): if (cx_proto == "tcp"):
cx_proto = "lf_tcp" cx_proto = "lf_tcp"
endp_to_port[ena] = "%s.%s"%(sta_resource, sta_name);
endp_to_pktsz[ena] = pkt_sz
endp_to_proto[ena] = p;
endp_to_tos[ena] = t;
endp_to_port[enb] = "%s.%s"%(u_resource, u_name);
endp_to_pktsz[enb] = pkt_sz
endp_to_proto[enb] = p;
endp_to_tos[enb] = t;
# Now, create the new connection # Now, create the new connection
subprocess.run(["./lf_firemod.pl", "--manager", lfmgr, "--resource", "%s"%sta_resource, "--action", "create_endp", "--port_name", sta_name, subprocess.run(["./lf_firemod.pl", "--manager", lfmgr, "--resource", "%s"%sta_resource, "--action", "create_endp", "--port_name", sta_name,
"--endp_type", cx_proto, "--endp_name", ena, "--speed", "%s"%cx_speed_ul, "--report_timer", "1000", "--tos", t, "--endp_type", cx_proto, "--endp_name", ena, "--speed", "%s"%cx_speed_ul, "--report_timer", "1000", "--tos", t,
@@ -378,7 +397,8 @@ def main():
time.sleep(dur) time.sleep(dur)
# Gather probe results and record data, verify NSS, BW, Channel # Gather probe results and record data, verify NSS, BW, Channel
count = 0 sta_stats = {} # Key is resource.station, holds array of values
for sta in sta_to_mode: for sta in sta_to_mode:
sta_resource = "1" sta_resource = "1"
sta_name = sta; sta_name = sta;
@@ -387,6 +407,9 @@ def main():
sta_resource = tmpa[0]; sta_resource = tmpa[0];
sta_name = tmpa[1]; sta_name = tmpa[1];
sta_key = "%s.%s"%(sta_resource, sta_name)
print("Checking station stats, key: %s"%(sta_key))
port_stats = subprocess.run(["./lf_portmod.pl", "--manager", lfmgr, "--card", sta_resource, "--port_name", sta_name, port_stats = subprocess.run(["./lf_portmod.pl", "--manager", lfmgr, "--card", sta_resource, "--port_name", sta_name,
"--show_port", "AP,Mode,Bandwidth,Signal,Status,RX-Rate"], stderr=PIPE, stdout=PIPE); "--show_port", "AP,Mode,Bandwidth,Signal,Status,RX-Rate"], stderr=PIPE, stdout=PIPE);
pss = port_stats.stdout.decode('utf-8', 'ignore'); pss = port_stats.stdout.decode('utf-8', 'ignore');
@@ -414,6 +437,9 @@ def main():
if (m != None): if (m != None):
_signal = m.group(1) _signal = m.group(1)
sta_stats[sta_key] = [_ap, _bw, _mode, _rxrate, _signal];
print("sta-stats found: %s, mode: %s bw: %s"%(sta_key, _mode, _bw));
for cxn in cxnames: for cxn in cxnames:
# Results: tx_bytes, rx_bytes, tx_bps, rx_bps, tx_pkts, rx_pkts, Latency # Results: tx_bytes, rx_bytes, tx_bps, rx_bps, tx_pkts, rx_pkts, Latency
resultsA = ["0"] * 7 resultsA = ["0"] * 7
@@ -426,7 +452,7 @@ def main():
for ename in enames: for ename in enames:
results = [""] * 7 results = [""] * 7
endp_stats = subprocess.run(["./lf_firemod.pl", "--manager", lfmgr, "--endp_vals", "tx_bps,rx_bps,Tx Bytes,Rx Bytes,Tx Pkts,Rx Pkts,Latency", endp_stats = subprocess.run(["./lf_firemod.pl", "--manager", lfmgr, "--endp_vals", "RealTxRate,RealRxRate,Tx Bytes,Rx Bytes,Tx Pkts,Rx Pkts,Latency",
"--endp_name", ename], stderr=PIPE, stdout=PIPE); "--endp_name", ename], stderr=PIPE, stdout=PIPE);
pss = endp_stats.stdout.decode('utf-8', 'ignore'); pss = endp_stats.stdout.decode('utf-8', 'ignore');
@@ -447,11 +473,11 @@ def main():
e_tot2 += err e_tot2 += err
e_tot2 += " " e_tot2 += " "
m = re.search('tx_bps:\s+(.*)', line) m = re.search('RealTxRate:\s+(.*)bps', line)
if (m != None): if (m != None):
results[2] = m.group(1) results[2] = m.group(1)
m = re.search('rx_bps:\s+(.*)', line) m = re.search('RealRxRate:\s+(.*)bps', line)
if (m != None): if (m != None):
results[3] = m.group(1) results[3] = m.group(1)
@@ -507,18 +533,22 @@ def main():
worksheet.write(row, col, cxn, center_blue); col += 1 worksheet.write(row, col, cxn, center_blue); col += 1
worksheet.write(row, col, ename, center_blue); col += 1 worksheet.write(row, col, ename, center_blue); col += 1
en_port = endp_to_port[ename]
worksheet.write(row, col, en_port, center_blue); col += 1
worksheet.write(row, col, endp_to_proto[ename], center_blue); col += 1
worksheet.write(row, col, endp_to_tos[ename], center_blue); col += 1
if ename == ena: if ename == ena:
worksheet.write(row, col, "%s.%s"%(sta_resource, sta_name), center_blue); col += 1 key = en_port
else: #print("endp, key: %s"%(key));
worksheet.write(row, col, "%s.%s"%(u_resource, u_name), center_blue); col += 1 sta_rpt = sta_stats[key]
worksheet.write(row, col, p, center_blue); col += 1 worksheet.write(row, col, sta_rpt[0], center_blue); col += 1
worksheet.write(row, col, t, center_blue); col += 1 worksheet.write(row, col, sta_rpt[1], center_blue); col += 1
if ename == ena: worksheet.write(row, col, sta_rpt[2], center_blue); col += 1
worksheet.write(row, col, _ap, center_blue); col += 1 worksheet.write(row, col, sta_rpt[3], center_blue); col += 1
worksheet.write(row, col, _bw, center_blue); col += 1 worksheet.write(row, col, sta_rpt[4], center_blue); col += 1
worksheet.write(row, col, _mode, center_blue); col += 1
worksheet.write(row, col, _rxrate, center_blue); col += 1
worksheet.write(row, col, _signal, center_blue); col += 1
else: else:
# Upstream is likely wired, don't print station info # Upstream is likely wired, don't print station info
worksheet.write(row, col, "", center_blue); col += 1 worksheet.write(row, col, "", center_blue); col += 1
@@ -529,6 +559,7 @@ def main():
#print("results[2]:%s 3: %s"%(results[2], results[3])) #print("results[2]:%s 3: %s"%(results[2], results[3]))
worksheet.write(row, col, endp_to_pktsz[ename], center_tan); col += 1
worksheet.write(row, col, "%.2f"%(float(results[2]) / 1000000), center_tan); col += 1 worksheet.write(row, col, "%.2f"%(float(results[2]) / 1000000), center_tan); col += 1
worksheet.write(row, col, "%.2f"%(float(results[3]) / 1000000), center_tan); col += 1 worksheet.write(row, col, "%.2f"%(float(results[3]) / 1000000), center_tan); col += 1
worksheet.write(row, col, "%.2f"%((float(resultsA[2]) + float(resultsB[2])) / 1000000), center_tan); col += 1 worksheet.write(row, col, "%.2f"%((float(resultsA[2]) + float(resultsB[2])) / 1000000), center_tan); col += 1