mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 10:48:02 +00:00 
			
		
		
		
	tos-test: Fix latency normalization logic, improve tos-test py
Seems to work OK now.
This commit is contained in:
		| @@ -129,7 +129,10 @@ sub normalize_bucket_hdr { | ||||
|   my $i; | ||||
|   for ($i = 0; $i<$amt; $i++) { | ||||
|     if ($i == 0) { | ||||
|       $rv .= "0-0 "; | ||||
|       $rv .= "0 "; | ||||
|     } | ||||
|     elsif ($i == 1) { | ||||
|       $rv .= "1 "; | ||||
|     } | ||||
|     else { | ||||
|       $rv .= 2**($i-1) . "-" . (2**($i) - 1) . " "; | ||||
| @@ -177,76 +180,76 @@ sub normalize_latency { | ||||
| } | ||||
|  | ||||
| sub normalize_bucket { | ||||
|   my $self = shift; | ||||
|   my $line = shift; | ||||
|   my $adjust = shift; | ||||
|    my $self = shift; | ||||
|    my $line = shift; | ||||
|    my $adjust = shift; | ||||
|  | ||||
|   #print "line -:$line:-\n"; | ||||
|    #print "line -:$line:-\n"; | ||||
|  | ||||
|   # Looks like this: 5 -:5:- 6  [ 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] (1) | ||||
|   if ($line =~ /(\S+)\s+-:(\S+):-\s+(\S+)\s+\[\s+(.*)\s+\]\s+\((\S+)\)/) { | ||||
|     my $min = $1; | ||||
|     my $avg = $2; | ||||
|     my $max = $3; | ||||
|     my $bks = $4; | ||||
|     my $width = $5; # Assumes one currently | ||||
|     if (!($width eq "1")) { | ||||
|    # Looks like this: 5 -:5:- 6  [ 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] (1) | ||||
|    if ($line =~ /(\S+)\s+-:(\S+):-\s+(\S+)\s+\[\s+(.*)\s+\]\s+\((\S+)\)/) { | ||||
|       my $min = $1; | ||||
|       my $avg = $2; | ||||
|       my $max = $3; | ||||
|       my $bks = $4; | ||||
|       my $width = $5; # Assumes one currently | ||||
|       if (!($width eq "1")) { | ||||
|          return $line; | ||||
|       } | ||||
|       else { | ||||
|          my @bkts = split(/\s+/, $bks); | ||||
|          @bkts = (@bkts, "0"); | ||||
|          my $i; | ||||
|          my $rv = ($min + $adjust) . " " . ($max + $adjust) . " " . ($avg + $adjust) . " "; | ||||
|          #print "bkts len: " . @bkts . "\n"; | ||||
|          my @nbkts = (0) x (@bkts); | ||||
|          for ($i = 0; $i<@bkts; $i++) { | ||||
|             # Figure out the bkt range | ||||
|             my $minv = 0; | ||||
|             my $maxv = 2 ** $i - 1; | ||||
|             if ($i > 0) { | ||||
|                $minv = 2 ** ($i - 1); | ||||
|             } | ||||
|             # Adjust by the min value, which is treated as an offset | ||||
|             $minv += $min; | ||||
|             $maxv += $min; | ||||
|  | ||||
|             # And adjust based on round-trip time to deal with clock lag | ||||
|             $minv += $adjust; | ||||
|             $maxv += $adjust; | ||||
|  | ||||
|             # And now find the normalized bucket this fits in | ||||
|             #print "maxv: $maxv\n"; | ||||
|             my $z; | ||||
|             my $idx = 0; | ||||
|             for ($z = 0; $z < 32; $z++) { | ||||
|                if ($maxv < (2 ** $z)) { | ||||
|                   #print "maxv: $maxv  z: $z  2^$z: " . 2 ** $z . + "\n"; | ||||
|                   $idx = $z; | ||||
|                   # Everything else falls in the last bucket | ||||
|                   if ($idx >= @bkts) { | ||||
|                      $idx = (@bkts - 1); | ||||
|                   } | ||||
|                   last; | ||||
|                } | ||||
|             } | ||||
|  | ||||
|             #print "idx: $idx i: $i  minv: $minv  maxv: $maxv  min: $min  adjust: $adjust\n"; | ||||
|             #print "nbkts: " . $nbkts[$idx]; | ||||
|             #print " bkts: " . $bkts[$i] . "\n"; | ||||
|             my $nv = $nbkts[$idx] + $bkts[$i]; | ||||
|             @nbkts[$idx] = $nv; | ||||
|          } | ||||
|  | ||||
|          for ($i = 0; $i < @nbkts; $i++) { | ||||
|             $rv .= ($nbkts[$i] . " "); | ||||
|          } | ||||
|          return $rv; | ||||
|       } | ||||
|    } | ||||
|    else { | ||||
|       return $line; | ||||
|     } | ||||
|     else { | ||||
|       my @bkts = split(/\s+/, $bks); | ||||
|       @bkts = (@bkts, "0"); | ||||
|       my $i; | ||||
|       my $rv = ($min + $adjust) . " " . ($max + $adjust) . " " . ($avg + $adjust) . " "; | ||||
|       #print "bkts len: " . @bkts . "\n"; | ||||
|       my @nbkts = (0) x (@bkts); | ||||
|       for ($i = 0; $i<@bkts; $i++) { | ||||
|    # Figure out the bkt range | ||||
|    my $minv = 0; | ||||
|    my $maxv = 2 ** $i; | ||||
|    if ($i > 0) { | ||||
|      $minv = 2 ** ($i - 1); | ||||
|    } | ||||
|    # Adjust by the min value, which is treated as an offset | ||||
|    $minv += $min; | ||||
|    $maxv += $min; | ||||
|  | ||||
|    # And adjust based on round-trip time to deal with clock lag | ||||
|    $minv += $adjust; | ||||
|    $maxv += $adjust; | ||||
|  | ||||
|    # And now find the normalized bucket this fits in | ||||
|    #print "maxv: $maxv\n"; | ||||
|    my $z; | ||||
|    my $idx = 0; | ||||
|    for ($z = 1; $z < 32; $z++) { | ||||
|      if ($maxv < (2 ** $z)) { | ||||
|        #print "maxv: $maxv  z: $z  2^$z: " . 2 ** $z . + "\n"; | ||||
|        $idx = $z; | ||||
|        # Everything else falls in the last bucket | ||||
|        if ($idx >= @bkts) { | ||||
|          $idx = (@bkts - 1); | ||||
|        } | ||||
|        last; | ||||
|      } | ||||
|    } | ||||
|  | ||||
|    #print "idx: $idx i: $i "; | ||||
|    #print "nbkts: " . $nbkts[$idx]; | ||||
|         #print " bkts: " . $bkts[$i] . "\n"; | ||||
|    my $nv = $nbkts[$idx] + $bkts[$i]; | ||||
|    @nbkts[$idx] = $nv; | ||||
|       } | ||||
|  | ||||
|       for ($i = 0; $i < @nbkts; $i++) { | ||||
|    $rv .= ($nbkts[$i] . " "); | ||||
|       } | ||||
|       return $rv; | ||||
|     } | ||||
|   } | ||||
|   else { | ||||
|     return $line; | ||||
|   } | ||||
| } | ||||
|  | ||||
| #  Uses cached values (so it will show Phantom ones too) | ||||
|   | ||||
| @@ -174,35 +174,52 @@ def main(): | ||||
|  | ||||
|    worksheet.set_row(0, 45) # Set height | ||||
|  | ||||
|    bucket_hdrs = "0-0 1-1 2-3 4-7 8-15 16-31 32-63 64-127 128-255 256-511 512-1023 1024-2047 2048-4095 4096-8191 8192-16383 16384-32767 32768-65535".split() | ||||
|    bucket_hdrs = "0 1 2-3 4-7 8-15 16-31 32-63 64-127 128-255 256-511 512-1023 1024-2047 2048-4095 4096-8191 8192-16383 16384-32767 32768-65535".split() | ||||
|    col = 0 | ||||
|    row = 0 | ||||
|  | ||||
|    worksheet.set_column(0, 35, 13) # Set width to 14 for all columns by default | ||||
|    dwidth = 13 # Set width to 13 for all columns by default | ||||
|  | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'CX-Name', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, 15) | ||||
|    worksheet.write(row, col, 'Endp-Name', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, 12) | ||||
|    worksheet.write(row, col, 'Port', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Protocol', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'ToS', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, 20) | ||||
|    worksheet.write(row, col, 'AP BSSID', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Band\nwidth', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Mode', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Last MCS\nRx', dblue_bold); col += 1 | ||||
|    worksheet.write(row, col, 'Combined\nRSSI', dpeach_bold); col += 1 | ||||
|    worksheet.write(row, col, 'Endpoint\nOffered\nLoad', dblue_bold); col += 1 | ||||
|    worksheet.write(row, col, 'Endpoint\nRx\nThroughput', dblue_bold); col += 1 | ||||
|    worksheet.write(row, col, 'Cx\nOffered\nLoad', dblue_bold); col += 1 | ||||
|    worksheet.write(row, col, 'Cx\nRx\nThroughput', dblue_bold); col += 1 | ||||
|    worksheet.write(row, col, 'Avg\nLatency', dblue_bold); col += 1 | ||||
|    worksheet.write(row, col, 'Min\nLatency', dblue_bold); col += 1 | ||||
|    worksheet.write(row, col, 'Max\nLatency', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Combined\nRSSI', dblue_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Endpoint\nOffered\nLoad', dtan_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Endpoint\nRx\nThroughput', dtan_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Cx\nOffered\nLoad', dtan_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Cx\nRx\nThroughput', dtan_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Avg\nLatency', dyel_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Min\nLatency', dyel_bold); col += 1 | ||||
|    worksheet.set_column(col, col, dwidth) | ||||
|    worksheet.write(row, col, 'Max\nLatency', dyel_bold); col += 1 | ||||
|    for i in range(17): | ||||
|        btitle = "Latency\nRange\n%s"%(bucket_hdrs[i]) | ||||
|        worksheet.write(row, col, btitle, dblue_bold); col += 1 | ||||
|        worksheet.set_column(col, col, dwidth) | ||||
|        worksheet.write(row, col, btitle, dpeach_bold); col += 1 | ||||
|  | ||||
|    worksheet.set_column(col, col, 50) | ||||
|    worksheet.write(row, col, 'Warnings and Errors', dgreen_bold_left); col += 1 | ||||
|    row += 1 | ||||
|  | ||||
| @@ -366,9 +383,11 @@ def main(): | ||||
|            if (m != None): | ||||
|                _signal = m.group(1) | ||||
|  | ||||
|        count = 0 | ||||
|        for p in protos: | ||||
|            for t in toss: | ||||
|                cxn = cxnames[count] | ||||
|                count = count + 1 | ||||
|  | ||||
|                # Results:  tx_bytes, rx_bytes, tx_bps, rx_bps, tx_pkts, rx_pkts, Latency | ||||
|                resultsA = ["0"] * 7 | ||||
| @@ -385,7 +404,7 @@ def main(): | ||||
|                    pss = endp_stats.stdout.decode('utf-8', 'ignore'); | ||||
|  | ||||
|                    for line in pss.splitlines(): | ||||
|                        print("probe-line, endp: %s: %s"%(ename, line)) | ||||
|                        #print("probe-line, endp: %s: %s"%(ename, line)) | ||||
|                        m = re.search('Rx Bytes:\s+(\d+)', line) | ||||
|                        if (m != None): | ||||
|                            results[1] = int(m.group(1)) | ||||
| @@ -434,10 +453,10 @@ def main(): | ||||
|                                              "--lat1", resultsB[6], "--lat2", resultsA[6]], capture_output=True); | ||||
|                pssB = endp_statsB.stdout.decode('utf-8', 'ignore'); | ||||
|  | ||||
|                print("latA: %s"%resultsA[6]) | ||||
|                print("latB: %s"%resultsB[6]) | ||||
|                print("pssA: %s"%pssA) | ||||
|                print("pssB: %s"%pssB) | ||||
|                #print("%s: latA: %s"%(cxn, resultsA[6])) | ||||
|                #print("%s: latB: %s"%(cxn, resultsB[6])) | ||||
|                #print("%s: pssA: %s"%(cxn, pssA)) | ||||
|                #print("%s: pssB: %s"%(cxn, pssB)) | ||||
|  | ||||
|                for line in pssA.splitlines(): | ||||
|                    m = re.search('Normalized-Latency:\s+(.*)', line) | ||||
| @@ -465,8 +484,8 @@ def main(): | ||||
|                        worksheet.write(row, col, "%s.%s"%(sta_resource, sta_name), center_blue); col += 1 | ||||
|                    else: | ||||
|                        worksheet.write(row, col, "%s.%s"%(u_resource, u_name), center_blue); col += 1 | ||||
|                    worksheet.write(row, col, proto, center_blue); col += 1 | ||||
|                    worksheet.write(row, col, tos, center_blue); col += 1 | ||||
|                    worksheet.write(row, col, p, center_blue); col += 1 | ||||
|                    worksheet.write(row, col, t, center_blue); col += 1 | ||||
|                    if ename == ena: | ||||
|                        worksheet.write(row, col, _ap, center_blue); col += 1 | ||||
|                        worksheet.write(row, col, _bw, center_blue); col += 1 | ||||
| @@ -481,15 +500,15 @@ def main(): | ||||
|                        worksheet.write(row, col, "", center_blue); col += 1 | ||||
|                        worksheet.write(row, col, "", center_blue); col += 1 | ||||
|  | ||||
|                    print("results[2]:%s  3: %s"%(results[2], results[3])) | ||||
|                    #print("results[2]:%s  3: %s"%(results[2], results[3])) | ||||
|  | ||||
|                    worksheet.write(row, col, "%.2f"%(float(results[2]) / 1000000), center_blue); 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(resultsA[2]) + float(resultsB[2])) / 1000000), center_blue); 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[3]) + float(resultsB[3])) / 1000000), center_tan); col += 1 | ||||
|                    worksheet.write(row, col, lat_cols[2], center_tan); col += 1 | ||||
|                    worksheet.write(row, col, lat_cols[0], center_tan); col += 1 | ||||
|                    worksheet.write(row, col, lat_cols[1], center_tan); col += 1 | ||||
|                    worksheet.write(row, col, lat_cols[2], center_yel); col += 1 | ||||
|                    worksheet.write(row, col, lat_cols[0], center_yel); col += 1 | ||||
|                    worksheet.write(row, col, lat_cols[1], center_yel); col += 1 | ||||
|                    for x in range(17): | ||||
|                        worksheet.write(row, col, lat_cols[x + 3], center_peach); col += 1 | ||||
|  | ||||
| @@ -499,9 +518,13 @@ def main(): | ||||
|                        worksheet.write(row, col, e_tot2, red_left); col += 1 | ||||
|                    row += 1 | ||||
|  | ||||
|                # Stop traffic | ||||
|                subprocess.run(["./lf_firemod.pl", "--manager", lfmgr, "--resource", | ||||
|                                "--cmd", "set_cx_state all %s STOPPED"%cxn], capture_output=True); | ||||
|    # Stop traffic | ||||
|    for cxn in cxnames: | ||||
|        cmd = "set_cx_state all %s STOPPED"%cxn | ||||
|        #print("Stopping CX: %s with command: %s"%(cxn, cmd)); | ||||
|  | ||||
|        subprocess.run(["./lf_firemod.pl", "--manager", lfmgr, "--action", "do_cmd", | ||||
|                        "--cmd", cmd], capture_output=True); | ||||
|  | ||||
|  | ||||
|    workbook.close() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Ben Greear
					Ben Greear