Expand PMF_FN_* macros.
[netbsd-mini2440.git] / dist / ntp / scripts / stats / peer.awk
blob5fe260e4954009c2e2ce2b016888f7a36ac39716
1 # awk program to scan peerstats files and report errors/statistics
3 # usage: awk -f peer.awk peerstats
5 # format of peerstats record
6 # MJD sec ident stat offset (s) delay (s) disp (s)
7 # 49235 11.632 128.4.2.7 f414 -0.000041 0.21910 0.00084
9 # format of output dataset (time values in milliseconds)
10 # peerstats.19960706
11 # ident cnt mean rms max delay dist disp
12 # ==========================================================================
13 # 140.173.112.2 85 -0.509 1.345 4.606 80.417 49.260 1.092
14 # 128.4.1.20 1364 0.058 0.364 4.465 3.712 10.540 1.101
15 # 140.173.16.1 1415 -0.172 0.185 1.736 3.145 5.020 0.312
16 #...
18 BEGIN {
19 n = 0
20 MAXDISTANCE = 1.0
23 # scan all records in file
25 # we toss out all distances greater than one second on the assumption the
26 # peer is in initial acquisition
29 if (NF >= 7 && ($7 + $6 / 2) < MAXDISTANCE) {
30 i = n
31 for (j = 0; j < n; j++) {
32 if ($3 == peer_ident[j])
33 i = j
35 if (i == n) {
36 peer_ident[i] = $3
37 peer_tmax[i] = peer_dist[i] = -1e9
38 peer_tmin[i] = 1e9
39 n++
41 peer_count[i]++
42 if ($5 > peer_tmax[i])
43 peer_tmax[i] = $5
44 if ($5 < peer_tmin[i])
45 peer_tmin[i] = $5
46 dist = $7 + $6 / 2
47 if (dist > peer_dist[i])
48 peer_dist[i] = dist
49 peer_time[i] += $5
50 peer_time_rms[i] += $5 * $5
51 peer_delay[i] += $6
52 peer_disp[i] += $7
54 } END {
55 printf " ident cnt mean rms max delay dist disp\n"
56 printf "==========================================================================\n"
57 for (i = 0; i < n; i++) {
58 peer_time[i] /= peer_count[i]
59 peer_time_rms[i] = sqrt(peer_time_rms[i] / peer_count[i] - peer_time[i] * peer_time[i])
60 peer_delay[i] /= peer_count[i]
61 peer_disp[i] /= peer_count[i]
62 peer_tmax[i] = peer_tmax[i] - peer_time[i]
63 peer_tmin[i] = peer_time[i] - peer_tmin[i]
64 if (peer_tmin[i] > peer_tmax[i])
65 peer_tmax[i] = peer_tmin[i]
66 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