diff --git a/metrics.go b/metrics.go index 3639f23..b52f7bf 100644 --- a/metrics.go +++ b/metrics.go @@ -2,7 +2,6 @@ package tusd import ( "errors" - "net" "sync" "sync/atomic" ) @@ -88,18 +87,8 @@ type simpleHTTPError struct { } func simplifyHTTPError(err HTTPError) simpleHTTPError { - var msg string - // Errors for read timeouts contain too much information which is not - // necessary for us and makes grouping for the metrics harder. The error - // message looks like: read tcp 127.0.0.1:1080->127.0.0.1:53673: i/o timeout - // Therefore, we use a common error message for all of them. - if netErr, ok := err.(net.Error); ok && netErr.Timeout() { - msg = "read tcp: i/o timeout" - } else { - msg = err.Error() - } return simpleHTTPError{ - Message: msg, + Message: err.Error(), StatusCode: err.StatusCode(), } } diff --git a/unrouted_handler.go b/unrouted_handler.go index 6fd8d9c..0e10248 100644 --- a/unrouted_handler.go +++ b/unrouted_handler.go @@ -5,6 +5,7 @@ import ( "errors" "io" "log" + "net" "net/http" "os" "regexp" @@ -611,6 +612,14 @@ func (handler *UnroutedHandler) sendError(w http.ResponseWriter, r *http.Request err = ErrNotFound } + // Errors for read timeouts contain too much information which is not + // necessary for us and makes grouping for the metrics harder. The error + // message looks like: read tcp 127.0.0.1:1080->127.0.0.1:53673: i/o timeout + // Therefore, we use a common error message for all of them. + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + err = errors.New("read tcp: i/o timeout") + } + statusErr, ok := err.(HTTPError) if !ok { statusErr = NewHTTPError(err, http.StatusInternalServerError)