func NewNTPPeerStats()

in cmd/ntpcheck/checker/peerstats.go [29:59]


func NewNTPPeerStats(r *NTPCheckResult) (map[string]interface{}, error) {
	if r.SysVars == nil {
		return nil, errors.New("no system variables to output stats")
	}

	result := make(map[string]interface{}, len(r.Peers))

	// Then add stats for all the peers
	for _, peer := range r.Peers {
		// skip invalid IPs
		ip := net.ParseIP(peer.SRCAdr)
		if ip == nil || ip.IsUnspecified() {
			continue
		}
		hostnames, err := net.LookupAddr(peer.SRCAdr)
		if err != nil || len(hostnames) == 0 {
			hostnames = []string{peer.SRCAdr}

		}
		// Replace "." and ":" for "_"
		hostname := strings.ReplaceAll(strings.ReplaceAll(strings.TrimSuffix(hostnames[0], "."), ".", "_"), ":", "_")

		result[fmt.Sprintf("ntp.peers.%s.delay", hostname)] = peer.Delay
		result[fmt.Sprintf("ntp.peers.%s.poll", hostname)] = 1 << uint(math.Min(float64(peer.PPoll), float64(peer.HPoll)))
		result[fmt.Sprintf("ntp.peers.%s.jitter", hostname)] = peer.Jitter
		result[fmt.Sprintf("ntp.peers.%s.offset", hostname)] = peer.Offset
		result[fmt.Sprintf("ntp.peers.%s.stratum", hostname)] = peer.Stratum
	}

	return result, nil
}