154359Sroberto# awk program to scan peerstats files and report errors/statistics 254359Sroberto# 354359Sroberto# usage: awk -f peer.awk peerstats 454359Sroberto# 554359Sroberto# format of peerstats record 654359Sroberto# MJD sec ident stat offset (s) delay (s) disp (s) 754359Sroberto# 49235 11.632 128.4.2.7 f414 -0.000041 0.21910 0.00084 854359Sroberto# 954359Sroberto# format of output dataset (time values in milliseconds) 1054359Sroberto# peerstats.19960706 1154359Sroberto# ident cnt mean rms max delay dist disp 1254359Sroberto# ========================================================================== 1354359Sroberto# 140.173.112.2 85 -0.509 1.345 4.606 80.417 49.260 1.092 1454359Sroberto# 128.4.1.20 1364 0.058 0.364 4.465 3.712 10.540 1.101 1554359Sroberto# 140.173.16.1 1415 -0.172 0.185 1.736 3.145 5.020 0.312 1654359Sroberto#... 1754359Sroberto# 1854359SrobertoBEGIN { 1954359Sroberto n = 0 2054359Sroberto MAXDISTANCE = 1.0 2154359Sroberto} 2254359Sroberto# 2354359Sroberto# scan all records in file 2454359Sroberto# 2554359Sroberto# we toss out all distances greater than one second on the assumption the 2654359Sroberto# peer is in initial acquisition 2754359Sroberto# 2854359Sroberto{ 2954359Sroberto if (NF >= 7 && ($7 + $6 / 2) < MAXDISTANCE) { 3054359Sroberto i = n 3154359Sroberto for (j = 0; j < n; j++) { 3254359Sroberto if ($3 == peer_ident[j]) 3354359Sroberto i = j 3454359Sroberto } 3554359Sroberto if (i == n) { 3654359Sroberto peer_ident[i] = $3 3754359Sroberto peer_tmax[i] = peer_dist[i] = -1e9 3854359Sroberto peer_tmin[i] = 1e9 3954359Sroberto n++ 4054359Sroberto } 4154359Sroberto peer_count[i]++ 4254359Sroberto if ($5 > peer_tmax[i]) 4354359Sroberto peer_tmax[i] = $5 4454359Sroberto if ($5 < peer_tmin[i]) 4554359Sroberto peer_tmin[i] = $5 4654359Sroberto dist = $7 + $6 / 2 4754359Sroberto if (dist > peer_dist[i]) 4854359Sroberto peer_dist[i] = dist 4954359Sroberto peer_time[i] += $5 5054359Sroberto peer_time_rms[i] += $5 * $5 5154359Sroberto peer_delay[i] += $6 5254359Sroberto peer_disp[i] += $7 5354359Sroberto } 5454359Sroberto} END { 5554359Sroberto printf " ident cnt mean rms max delay dist disp\n" 5654359Sroberto printf "==========================================================================\n" 5754359Sroberto for (i = 0; i < n; i++) { 5854359Sroberto peer_time[i] /= peer_count[i] 5954359Sroberto peer_time_rms[i] = sqrt(peer_time_rms[i] / peer_count[i] - peer_time[i] * peer_time[i]) 6054359Sroberto peer_delay[i] /= peer_count[i] 6154359Sroberto peer_disp[i] /= peer_count[i] 6254359Sroberto peer_tmax[i] = peer_tmax[i] - peer_time[i] 6354359Sroberto peer_tmin[i] = peer_time[i] - peer_tmin[i] 6454359Sroberto if (peer_tmin[i] > peer_tmax[i]) 6554359Sroberto peer_tmax[i] = peer_tmin[i] 6654359Sroberto 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 6754359Sroberto } 6854359Sroberto} 69