* 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
101 строка
3.0 KiB
Go
101 строка
3.0 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package debugbar
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/mattermost/mattermost-server/v6/model"
|
|
"github.com/mattermost/mattermost-server/v6/shared/mail"
|
|
)
|
|
|
|
const (
|
|
socketEventName = "debugbar"
|
|
)
|
|
|
|
type DebugBar struct {
|
|
publish func(*model.WebSocketEvent)
|
|
enabled bool
|
|
}
|
|
|
|
func New(publish func(*model.WebSocketEvent)) *DebugBar {
|
|
return &DebugBar{
|
|
publish: publish,
|
|
enabled: os.Getenv("MM_ENABLE_DEBUG_BAR") == "true",
|
|
}
|
|
}
|
|
|
|
func (db *DebugBar) IsEnabled() bool {
|
|
return db.enabled
|
|
}
|
|
|
|
func (db *DebugBar) SendLogEvent(logLevel string, logMessage string, fields map[string]string) {
|
|
event := model.NewWebSocketEvent(socketEventName, "", "", "", nil, "")
|
|
event.Add("time", model.GetMillis())
|
|
event.Add("type", "log-line")
|
|
event.Add("level", logLevel)
|
|
event.Add("message", logMessage)
|
|
event.Add("fields", fields)
|
|
db.publish(event)
|
|
}
|
|
|
|
func (db *DebugBar) SendApiCall(endpoint, method, statusCode string, elapsed float64) {
|
|
if endpoint == "getSystemInfo" || endpoint == "getQueryExplain" {
|
|
return
|
|
}
|
|
event := model.NewWebSocketEvent(socketEventName, "", "", "", nil, "")
|
|
event.Add("time", model.GetMillis())
|
|
event.Add("type", "api-call")
|
|
event.Add("endpoint", endpoint)
|
|
event.Add("method", method)
|
|
event.Add("statusCode", statusCode)
|
|
event.Add("duration", elapsed)
|
|
db.publish(event)
|
|
}
|
|
|
|
func (db *DebugBar) SendStoreCall(method string, success bool, elapsed float64, params map[string]any) {
|
|
event := model.NewWebSocketEvent(socketEventName, "", "", "", nil, "")
|
|
event.Add("time", model.GetMillis())
|
|
event.Add("type", "store-call")
|
|
event.Add("method", method)
|
|
event.Add("params", params)
|
|
event.Add("success", success)
|
|
event.Add("duration", elapsed)
|
|
db.publish(event)
|
|
}
|
|
|
|
func (db *DebugBar) SendSqlQuery(query string, elapsed float64, args ...any) {
|
|
if strings.HasPrefix(query, "EXPLAIN ") {
|
|
return
|
|
}
|
|
event := model.NewWebSocketEvent(socketEventName, "", "", "", nil, "")
|
|
event.Add("time", model.GetMillis())
|
|
event.Add("type", "sql-query")
|
|
event.Add("query", query)
|
|
event.Add("args", args)
|
|
event.Add("duration", elapsed)
|
|
db.publish(event)
|
|
}
|
|
|
|
func (db *DebugBar) SendEmailSent(to, subject, htmlBody string, embeddedFiles map[string]io.Reader, config *mail.SMTPConfig, enableComplianceFeatures bool, messageID string, inReplyTo string, references string, ccMail string, category string, err error) {
|
|
event := model.NewWebSocketEvent(socketEventName, "", "", "", nil, "")
|
|
event.Add("time", model.GetMillis())
|
|
event.Add("type", "email-sent")
|
|
event.Add("to", to)
|
|
event.Add("subject", subject)
|
|
event.Add("htmlBody", htmlBody)
|
|
event.Add("embeddedFiles", embeddedFiles)
|
|
event.Add("SMTPConfig", config)
|
|
event.Add("enableComplianceFeatures", enableComplianceFeatures)
|
|
event.Add("messageID", messageID)
|
|
event.Add("inReplyTo", inReplyTo)
|
|
event.Add("references", references)
|
|
event.Add("cc", ccMail)
|
|
event.Add("category", category)
|
|
event.Add("err", err)
|
|
db.publish(event)
|
|
}
|