Files
mostlymatter/api4/debugbar.go
Jesús Espino 280bc7f97e Adding the debug bar logic in the server (#22410)
* Adding debugbar layer

* Adding sql debugbar info

* Make duration consistent across the debugbar lines

* Adding the debugbar/systeminfo endpoint

* Adding logs to the debugbar

* Improve the debugbar logger fields info

* Improving the debug bar architecture

* Allow to enable/disable debugbar in the backend

* Exposing the Debug Bar enable in the client config

* Adding more system information to the debugbar

* Adding params info to the store layer

* Organizing a bit the debugbar code in the server and adding some extra data to the system info api

* Adding debugbar email traces

* Changing the socket event name to 'debugbar'

* Adding explain support for the debugbar

* Adding missed file

* Omitting data related to the debugbar itself

* Removing unneeded functions

* Avoid arbitrary execution in explain api

* Moving debugbar inside the platform directory

* Replacing debugbar logger with a new logger Target

* Removed uneeded changes

* Fixing some linter errors

* Adding a debugbar log level to use it later for log events strictly related to the debug bar

* Fixing linter errors

* Fixing tests

* Adding i18n strings
2023-03-09 17:55:36 +01:00

61 строка
1.7 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package api4
import (
"encoding/json"
"net/http"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/shared/mlog"
)
func (api *API) InitDebugBar() {
api.BaseRoutes.DebugBar.Handle("/systeminfo", api.APISessionRequired(getSystemInfo)).Methods("GET")
api.BaseRoutes.DebugBar.Handle("/queryexplain", api.APISessionRequired(getQueryExplain)).Methods("POST")
}
func getSystemInfo(c *Context, w http.ResponseWriter, r *http.Request) {
if !c.App.Srv().DebugBar().IsEnabled() {
c.Err = model.NewAppError("Api4.GetSystemInfo", "api.debugbar.getSystemInfo.disabled_debugbar.error", nil, "", http.StatusNotImplemented)
return
}
info, err := c.App.GetDebugBarInfo()
if err != nil {
c.Err = err
return
}
if err := json.NewEncoder(w).Encode(info); err != nil {
c.Logger.Warn("Error while writing response", mlog.Err(err))
}
}
func getQueryExplain(c *Context, w http.ResponseWriter, r *http.Request) {
if !c.App.Srv().DebugBar().IsEnabled() {
c.Err = model.NewAppError("Api4.GetSystemInfo", "api.debugbar.getSystemInfo.disabled_debugbar.error", nil, "", http.StatusNotImplemented)
return
}
var requestBody struct {
Query string
Args []any
}
if jsonErr := json.NewDecoder(r.Body).Decode(&requestBody); jsonErr != nil {
c.SetInvalidParamWithErr("explain_request", jsonErr)
return
}
explain, err := c.App.GetQueryExplain(requestBody.Query, requestBody.Args)
if err != nil {
c.Err = err
return
}
if err := json.NewEncoder(w).Encode(map[string]string{"explain": explain}); err != nil {
c.Logger.Warn("Error while writing response", mlog.Err(err))
}
}