MM-8607 Add ability to turn off non-critical services when under load (#13212)
* MM-8607: add ability to turn off non-critical services under load * server busy invalid param unit tests * MM-8607: rename server busy endpoints * MM-8607: handle case where App not initialized * MM-8607: additional unit test cases per feedback. * MM-8607: use decorator to check isbusy when adding endpoint route * MM-8607: rename endpoints, use struct for json * Update api4/system.go Fix misspelled log output Co-Authored-By: Saturnino Abril <saturnino.abril@gmail.com> * MM-8607: fix i18n order; max seconds for server busy expiry
Этот коммит содержится в:
коммит произвёл
Joram Wilander
родитель
3cb3d874b8
Коммит
5abbe50258
@@ -165,6 +165,10 @@ func (c *Context) SetInvalidUrlParam(parameter string) {
|
||||
c.Err = NewInvalidUrlParamError(parameter)
|
||||
}
|
||||
|
||||
func (c *Context) SetServerBusyError() {
|
||||
c.Err = NewServerBusyError()
|
||||
}
|
||||
|
||||
func (c *Context) HandleEtag(etag string, routeName string, w http.ResponseWriter, r *http.Request) bool {
|
||||
metrics := c.App.Metrics
|
||||
if et := r.Header.Get(model.HEADER_ETAG_CLIENT); len(etag) > 0 {
|
||||
@@ -193,6 +197,10 @@ func NewInvalidUrlParamError(parameter string) *model.AppError {
|
||||
err := model.NewAppError("Context", "api.context.invalid_url_param.app_error", map[string]interface{}{"Name": parameter}, "", http.StatusBadRequest)
|
||||
return err
|
||||
}
|
||||
func NewServerBusyError() *model.AppError {
|
||||
err := model.NewAppError("Context", "api.context.server_busy.app_error", nil, "", http.StatusServiceUnavailable)
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Context) SetPermissionError(permission *model.Permission) {
|
||||
c.Err = c.App.MakePermissionError(permission)
|
||||
|
||||
@@ -66,6 +66,7 @@ type Handler struct {
|
||||
TrustRequester bool
|
||||
RequireMfa bool
|
||||
IsStatic bool
|
||||
DisableWhenBusy bool
|
||||
|
||||
cspShaDirective string
|
||||
}
|
||||
@@ -159,6 +160,10 @@ func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
c.MfaRequired()
|
||||
}
|
||||
|
||||
if c.Err == nil && h.DisableWhenBusy && c.App.Srv.Busy.IsBusy() {
|
||||
c.SetServerBusyError()
|
||||
}
|
||||
|
||||
if c.Err == nil {
|
||||
h.HandleFunc(c, w, r)
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user