in metrics/request.go [55:88]
func (m *responseMetricImpl) ObserveFailure(url string, now time.Time, seconds float64, err error) {
if err == nil {
return
}
m.mu.Lock()
defer m.mu.Unlock()
oerr := types.ResponseError{
URL: url,
Timestamp: now,
Duration: seconds,
}
// HTTP Code -> HTTP2 -> Connection -> Unknown
code := codeFromHTTP(err)
http2Err, isHTTP2Err := isHTTP2Error(err)
connErr, isConnErr := isConnectionError(err)
switch {
case code != 0:
oerr.Type = types.ResponseErrorTypeHTTP
oerr.Code = code
case isHTTP2Err:
oerr.Type = types.ResponseErrorTypeHTTP2Protocol
oerr.Message = http2Err
case isConnErr:
oerr.Type = types.ResponseErrorTypeConnection
oerr.Message = connErr
default:
oerr.Type = types.ResponseErrorTypeUnknown
oerr.Message = err.Error()
}
m.errors.PushBack(oerr)
}