diff --git a/peer.awk b/peer.awk new file mode 100644 index 0000000..f6ead05 --- /dev/null +++ b/peer.awk @@ -0,0 +1,70 @@ +# awk program to scan peerstats files and report errors/statistics +# +# usage: awk -f peer.awk peerstats +# +# format of peerstats record +# MJD sec ident stat offset (s) delay (s) disp (s) +# 49235 11.632 128.4.2.7 f414 -0.000041 0.21910 0.00084 +# +# format of output dataset (time values in milliseconds) +# peerstats.19960706 +# ident cnt mean rms max delay dist disp +# ========================================================================== +# 140.173.112.2 85 -0.509 1.345 4.606 80.417 49.260 1.092 +# 128.4.1.20 1364 0.058 0.364 4.465 3.712 10.540 1.101 +# 140.173.16.1 1415 -0.172 0.185 1.736 3.145 5.020 0.312 +#... +# +BEGIN { + n = 0 + MAXDISTANCE = 1.0 +} +# +# scan all records in file +# +# we toss out all distances greater than one second on the assumption the +# peer is in initial acquisition +# +{ + if (NF >= 7 && ($7 + $6 / 2) < MAXDISTANCE) { + i = n + for (j = 0; j < n; j++) { + if ($3 == peer_ident[j]) + i = j + } + if (i == n) { + peer_ident[i] = $3 + peer_tmax[i] = peer_dist[i] = -1e9 + peer_tmin[i] = 1e9 + n++ + } + peer_count[i]++ + if ($5 > peer_tmax[i]) + peer_tmax[i] = $5 + if ($5 < peer_tmin[i]) + peer_tmin[i] = $5 + dist = $7 + $6 / 2 + if (dist > peer_dist[i]) + peer_dist[i] = dist + peer_time[i] += $5 + peer_time_rms[i] += $5 * $5 + peer_delay[i] += $6 + peer_disp[i] += $7 + } +} END { + printf " ident cnt mean rms max delay dist disp\n" + printf "==========================================================================\n" + for (i = 0; i < n; i++) { + peer_time[i] /= peer_count[i] + peer_time_rms[i] = sqrt(peer_time_rms[i] / peer_count[i] - peer_time[i] * peer_time[i]) + peer_delay[i] /= peer_count[i] + peer_disp[i] /= peer_count[i] + peer_tmax[i] = peer_tmax[i] - peer_time[i] + peer_tmin[i] = peer_time[i] - peer_tmin[i] + if (peer_tmin[i] > peer_tmax[i]) + peer_tmax[i] = peer_tmin[i] + printf "%-15s%5d%9.3f%9.3f%9.3f%9.3f%9.3f%9.3f\n", peer_ident[i], peer_count[i], peer_time[i] * 1e3, peer_time_rms[i] * 1e3, peer_tmax[i] * 1e3, peer_delay[i] * 1e3, peer_dist[i] * 1e3, peer_disp[i] * 1e3 + } +} + + diff --git a/raw.awk b/raw.awk new file mode 100644 index 0000000..a0867d9 --- /dev/null +++ b/raw.awk @@ -0,0 +1,37 @@ +# awk program to scan rawstats files and report errors/statistics +# + + +BEGIN { + n = 0 + packets = 0 +} +{ + packets++ + i = n + for (j = 0; j < n; j++) { + if ($3 == peer_ident[j]) + i = j + } + if (i == n) { + peer_ident[i] = $3 + n++ + } + peer_count[i]++ + peer_recv_delay[i] += $6 - $5 + peer_proc_delay[i] += $7 - $6 + peer_send_delay[i] += $8 - $7 +} END { + #"12345678901234567890123456789012345678901234567890" + print "Delays (ms)" + printf " ident cnt recv send process\n" + printf "==========================================================================\n" + for (i = 0; i < n; i++) { + peer_recv_delay[i] /= peer_count[i] + peer_proc_delay[i] /= peer_count[i] + peer_send_delay[i] /= peer_count[i] + printf "%-15s %5d %2.6f %2.6f %2.6f\n", peer_ident[i], peer_count[i], peer_recv_delay[i] * 1e3, peer_send_delay[i] * 1e3, peer_proc_delay[i] * 1e3 + } +} + +