in agent/heartbeat/heartbeat.go [87:177]
func invokePingRequest(isHttpScheme bool, urlWithoutScheme string, willSwitchScheme bool) (response string, err error) {
defer func() {
errMsg := extractErrMsg(response)
if errMsg != "" {
log.GetLogger().Error("heart-beat: ", errMsg)
if miss, fieldName, fieldType := checkFieldsdMissErr(errMsg); miss {
_useFullFields.Store(true)
log.GetLogger().Errorf("heart-beat request miss field[%s:%s] ", fieldName, fieldType)
err = fmt.Errorf("request field missing")
}
}
}()
httpRequestURL := "http://" + urlWithoutScheme
httpsRequestURL := "https://" + urlWithoutScheme
var requestURL, switchedRequestUrl *string
if isHttpScheme {
requestURL = &httpRequestURL
switchedRequestUrl = &httpsRequestURL
} else {
requestURL = &httpsRequestURL
switchedRequestUrl = &httpRequestURL
}
err, response = util.HttpGet(*requestURL)
if err != nil {
tmp_err, ok := err.(*httpbase.StatusCodeError)
if !(ok && tmp_err.StatusCode() < 500) {
_retryMutex.Lock()
defer _retryMutex.Unlock()
Gap := time.Since(_startTime)
//more than 1h than reset counter and start time.
if Gap.Minutes() >= 60 {
_retryCounter = 0
_startTime = time.Now()
}
//less than 1h and counter more than 3.
if _retryCounter >= 3 {
log.GetLogger().WithFields(log.Fields{
"requestURL": *requestURL,
"response": response,
}).WithError(err).Errorln("Retry too frequent")
} else {
//do retry
time.Sleep(3 * time.Second)
_retryCounter++
err, response = util.HttpGet(*requestURL)
if err == nil {
// Keep use current scheme next time
if isHttpScheme {
_tryHttp = true
} else {
_tryHttp = false
_lastHttpFailedSendCounter = _sendCounter
}
return response, nil
}
log.GetLogger().WithFields(log.Fields{
"requestURL": *requestURL,
"response": response,
}).WithError(err).Errorln("Retry failed")
if willSwitchScheme {
err, response = util.HttpGet(*switchedRequestUrl)
if err == nil {
// Use another scheme next time
if isHttpScheme {
_tryHttp = false
_lastHttpFailedSendCounter = _sendCounter
} else {
_tryHttp = true
}
return response, nil
}
log.GetLogger().WithFields(log.Fields{
"switchedRequestURL": *switchedRequestUrl,
"response": response,
}).WithError(err).Errorln("Retry failed with switched requestURL")
}
}
}
// Use another scheme next time
if isHttpScheme {
_tryHttp = false
_lastHttpFailedSendCounter = _sendCounter
} else {
_tryHttp = true
}
return "", err
}
return response, nil
}