Logging fixes
This commit is contained in:
parent
0606fbe60a
commit
f7f343fe55
3 changed files with 13 additions and 5 deletions
|
@ -6,6 +6,8 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release
|
||||||
|
|
||||||
This release changes the way UnifiedPush (UP) topics are rate limited from publisher-based rate limiting to subscriber-based
|
This release changes the way UnifiedPush (UP) topics are rate limited from publisher-based rate limiting to subscriber-based
|
||||||
rate limiting. This allows UP application servers to send higher volumes, since the subscribers carry the rate limits.
|
rate limiting. This allows UP application servers to send higher volumes, since the subscribers carry the rate limits.
|
||||||
|
However, it also means that UP clients have to subscribe to a topic first before they are allowed to publish. If they do
|
||||||
|
no, clients will receive an HTTP 507 response from the server.
|
||||||
|
|
||||||
We also fixed another issue with UnifiedPush: Some Mastodon servers were sending unsupported `Authorization` headers,
|
We also fixed another issue with UnifiedPush: Some Mastodon servers were sending unsupported `Authorization` headers,
|
||||||
which ntfy rejected with an HTTP 401. We now ignore unsupported header values.
|
which ntfy rejected with an HTTP 401. We now ignore unsupported header values.
|
||||||
|
|
|
@ -30,6 +30,10 @@ const (
|
||||||
tagMatrix = "matrix"
|
tagMatrix = "matrix"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
normalErrorCodes = []int{http.StatusNotFound, http.StatusBadRequest, http.StatusTooManyRequests, http.StatusUnauthorized, http.StatusInsufficientStorage}
|
||||||
|
)
|
||||||
|
|
||||||
// logr creates a new log event with HTTP request fields
|
// logr creates a new log event with HTTP request fields
|
||||||
func logr(r *http.Request) *log.Event {
|
func logr(r *http.Request) *log.Event {
|
||||||
return log.Tag(tagHTTP).Fields(httpContext(r)) // Tag may be overwritten
|
return log.Tag(tagHTTP).Fields(httpContext(r)) // Tag may be overwritten
|
||||||
|
|
|
@ -319,19 +319,21 @@ func (s *Server) handleError(w http.ResponseWriter, r *http.Request, v *visitor,
|
||||||
if !ok {
|
if !ok {
|
||||||
httpErr = errHTTPInternalError
|
httpErr = errHTTPInternalError
|
||||||
}
|
}
|
||||||
isNormalError := strings.Contains(err.Error(), "i/o timeout") || util.Contains([]int{http.StatusNotFound, http.StatusBadRequest, http.StatusTooManyRequests, http.StatusUnauthorized}, httpErr.HTTPCode)
|
isNormalError := strings.Contains(err.Error(), "i/o timeout") || util.Contains(normalErrorCodes, httpErr.HTTPCode)
|
||||||
|
ev := logvr(v, r).Err(err)
|
||||||
if websocket.IsWebSocketUpgrade(r) {
|
if websocket.IsWebSocketUpgrade(r) {
|
||||||
|
ev.Tag(tagWebsocket).Fields(websocketErrorContext(err))
|
||||||
if isNormalError {
|
if isNormalError {
|
||||||
logvr(v, r).Tag(tagWebsocket).Err(err).Fields(websocketErrorContext(err)).Debug("WebSocket error (this error is okay, it happens a lot): %s", err.Error())
|
ev.Debug("WebSocket error (this error is okay, it happens a lot): %s", err.Error())
|
||||||
} else {
|
} else {
|
||||||
logvr(v, r).Tag(tagWebsocket).Err(err).Fields(websocketErrorContext(err)).Info("WebSocket error: %s", err.Error())
|
ev.Info("WebSocket error: %s", err.Error())
|
||||||
}
|
}
|
||||||
return // Do not attempt to write to upgraded connection
|
return // Do not attempt to write to upgraded connection
|
||||||
}
|
}
|
||||||
if isNormalError {
|
if isNormalError {
|
||||||
logvr(v, r).Err(err).Debug("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code)
|
ev.Debug("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code)
|
||||||
} else {
|
} else {
|
||||||
logvr(v, r).Err(err).Info("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code)
|
ev.Info("Connection closed with HTTP %d (ntfy error %d)", httpErr.HTTPCode, httpErr.Code)
|
||||||
}
|
}
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
w.Header().Set("Access-Control-Allow-Origin", s.config.AccessControlAllowOrigin) // CORS, allow cross-origin requests
|
w.Header().Set("Access-Control-Allow-Origin", s.config.AccessControlAllowOrigin) // CORS, allow cross-origin requests
|
||||||
|
|
Loading…
Reference in a new issue