Annotation of embedaddon/ntp/scripts/stats/peer.awk, revision 1.1

1.1     ! misho       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>