diff --git a/unrouted_handler.go b/unrouted_handler.go index 7886ef2..02e4ca1 100644 --- a/unrouted_handler.go +++ b/unrouted_handler.go @@ -5,6 +5,7 @@ import ( "errors" "io" "log" + "net" "net/http" "os" "regexp" @@ -603,6 +604,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") + } + status := 500 if statusErr, ok := err.(HTTPError); ok { status = statusErr.StatusCode()