File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / scripts / stats / peer.awk
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (13 years, 1 month ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: # awk program to scan peerstats files and report errors/statistics
    2: #
    3: # usage: awk -f peer.awk peerstats
    4: #
    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
    8: #
    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: #...
   17: #
   18: BEGIN {
   19: 	n = 0
   20: 	MAXDISTANCE = 1.0
   21: }
   22: #
   23: # scan all records in file
   24: #
   25: # we toss out all distances greater than one second on the assumption the
   26: # peer is in initial acquisition
   27: #
   28: {
   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
   34: 		}
   35: 		if (i == n) {
   36: 			peer_ident[i] = $3
   37: 			peer_tmax[i] = peer_dist[i] = -1e9
   38: 			peer_tmin[i] = 1e9
   39: 			n++
   40: 		}
   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
   53: 	}
   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
   67: 	}
   68: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>