func()

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)
}