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
}