in cmd/ntpcheck/checker/ntpd.go [86:161]
func (n *NTPCheck) Run() (*NTPCheckResult, error) {
result := NewNTPCheckResult()
packet, err := n.ReadStatus()
if err != nil {
return nil, errors.Wrap(err, "failed to get 'read status' packet from NTP server")
}
log.Debugf("Got 'read status' response:")
log.Debugf("Version: %v", packet.GetVersion())
log.Debugf("Mode: %v", packet.GetMode())
log.Debugf("Response: %v", packet.IsResponse())
log.Debugf("Error: %v", packet.HasError())
log.Debugf("More: %v", packet.HasMore())
log.Debugf("Data: %v", packet.Data)
log.Debugf("Data: %v", len(packet.Data))
log.Debugf("Data string: '%s'", string(packet.Data))
sysStatus, err := packet.GetSystemStatus()
if err != nil {
return nil, errors.Wrap(err, "failed to parse SystemStatusWord")
}
result.LIDesc = control.LeapDesc[sysStatus.LI]
result.LI = sysStatus.LI
result.ClockSource = control.ClockSourceDesc[sysStatus.ClockSource]
result.EventCount = sysStatus.SystemEventCounter
result.Event = control.SystemEventDesc[sysStatus.SystemEventCode]
infoPacket, err := n.ReadVariables(0)
if err != nil {
return nil, errors.Wrap(err, "failed to get 'read variables' packet from NTP server for associationID=0")
}
log.Debugf("Got 'read variables' response:")
log.Debugf("Version: %v", infoPacket.GetVersion())
log.Debugf("Mode: %v", infoPacket.GetMode())
log.Debugf("Response: %v", infoPacket.IsResponse())
log.Debugf("Error: %v", infoPacket.HasError())
log.Debugf("More: %v", infoPacket.HasMore())
log.Debugf("Data string: '%s'", string(infoPacket.Data))
sys, err := NewSystemVariablesFromNTP(infoPacket)
if err != nil {
return nil, errors.Wrapf(err, "failed to create System structure from response packet")
}
result.SysVars = sys
assocs, err := packet.GetAssociations()
if err != nil {
return nil, errors.Wrap(err, "failed to get associations list from response packet for associationID=0")
}
for id, peerStatus := range assocs {
log.Debugf("Peer %x Status Word: %#v", id, peerStatus)
assocInfo, err := n.ReadVariables(id)
if err != nil {
return nil, errors.Wrapf(err, "failed to get 'read variables' packet from NTP server for associationID=%x", id)
}
s, err := assocInfo.GetPeerStatus()
if err != nil {
return nil, errors.Wrapf(err, "failed to get peer status list from response packet for associationID=%x", id)
}
log.Debugf("Assoc ID: %x", assocInfo.AssociationID)
log.Debugf("Peer Status: %#v", s)
m, err := assocInfo.GetAssociationInfo()
if err != nil {
return nil, errors.Wrapf(err, "failed to get associations list from response packet for associationID=%x", id)
}
for k, v := range m {
log.Debugf("%s: %s", k, v)
}
peer, err := NewPeerFromNTP(assocInfo)
if err != nil {
return nil, errors.Wrapf(err, "failed to create Peer structure from response packet for associationID=%x", id)
}
result.Peers[id] = peer
}
return result, nil
}