Add logic to parse and normalize latency buckets and similar buckets.

This commit is contained in:
Ben Greear
2020-03-10 06:41:21 -07:00
parent f9f0aeec44
commit 238792e7d4
2 changed files with 91 additions and 3 deletions

View File

@@ -121,6 +121,84 @@ sub doAsyncCmd {
return join( "\n", @rv );
} # ~doAsyncCmd
sub normalize_bucket_hdr {
my $self = shift;
my $amt = shift;
my $rv = "Min Max Avg ";
my $i;
for ($i = 0; $i<$amt; $i++) {
if ($i == 0) {
$rv .= "0-0 ";
}
else {
$rv .= 2**($i-1) . "-" . (2**($i) - 1) . " ";
}
}
return $rv;
}
sub normalize_bucket {
my $self = shift;
my $line = shift;
#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 =~ /(\d+)\s+-:(\d+):-\s+(\d+)\s+\[\s+(.*)\s+\]\s+\((\d+)\)/) {
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);
my $i;
my $rv = "$min $max $avg ";
#print "bkts len: " . @bkts . "\n";
my @nbkts = (0) x (@bkts + 1);
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 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;
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<@bkts; $i++) {
$rv .= ($nbkts[$i] . " ");
}
return $rv;
}
}
else {
return $line;
}
}
# Uses cached values (so it will show Phantom ones too)
sub getPortListing {
my $self = shift;

View File

@@ -390,17 +390,27 @@ if (grep {$_ eq $::action} split(',', "show_endp,set_endp,create_endp,create_arm
## ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- #
if ($match =~ /Latency/) {
if ($match =~ /.*Latency:\s+(.*)\s+#/) {
$option_map{"Latency"} = $1;
my $val = $1;
#print "val -:$val:-\n";
$option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17);
$option_map{"Latency"} = $val;
$option_map{"Latency-Normalized"} = $::utils->normalize_bucket($val);
}
}
elsif ($match =~ /Pkt-Gaps/) {
if ($match =~ /.*Pkt-Gaps:\s+(.*)\s+#/) {
$option_map{"Pkt-Gaps"} = $1;
my $val = $1;
$option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17);
$option_map{"Pkt-Gaps"} = $val;
$option_map{"Pkt-Gaps-Normalized"} = $::utils->normalize_bucket($val);
}
}
elsif ($match =~ /RX-Silence/) {
if ($match =~ /.*RX-Silence:\s+(.*)\s+#/) {
$option_map{"RX-Silence"} = $1;
my $val = $1;
$option_map{"Normalized-Hdr"} = $::utils->normalize_bucket_hdr(17);
$option_map{"RX-Silence"} = $val;
$option_map{"RX-Silence-Normalized"} = $::utils->normalize_bucket($val);
}
}
elsif ( $match =~ /Rx (Bytes|Pkts)/ && $end_val =~ /rx_/) {