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)
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
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
) {
31 for (j =
0; j
< n
; j
++) {
32 if ($
3 == peer_ident
[j
])
37 peer_tmax
[i
] = peer_dist
[i
] =
-1e9
42 if ($
5 > peer_tmax
[i
])
44 if ($
5 < peer_tmin
[i
])
47 if (dist
> peer_dist
[i
])
50 peer_time_rms
[i
] += $
5 * $
5
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