func()

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
}