mirror of
https://github.com/mattermost/mattermost.git
synced 2026-04-21 14:18:00 -04:00
We use navigator.sendBeacon to send the new metrics since it's recommended for that, but it doesn't let us set custom headers which means that we can't set the CSRF token header that we'd need to pass that check
38 lines
1 KiB
Go
38 lines
1 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/public/model"
|
|
)
|
|
|
|
func (api *API) InitClientPerformanceMetrics() {
|
|
api.BaseRoutes.APIRoot.Handle("/client_perf", api.APISessionRequiredTrustRequester(submitPerformanceReport)).Methods("POST")
|
|
}
|
|
|
|
func submitPerformanceReport(c *Context, w http.ResponseWriter, r *http.Request) {
|
|
// we return early if server does not have any metrics infra available
|
|
if c.App.Metrics() == nil || !*c.App.Config().MetricsSettings.EnableClientMetrics {
|
|
return
|
|
}
|
|
|
|
var report model.PerformanceReport
|
|
if jsonErr := json.NewDecoder(r.Body).Decode(&report); jsonErr != nil {
|
|
c.SetInvalidParamWithErr("submitPerformanceReport", jsonErr)
|
|
return
|
|
}
|
|
|
|
if err := report.IsValid(); err != nil {
|
|
c.SetInvalidParamWithErr("submitPerformanceReport", err)
|
|
return
|
|
}
|
|
|
|
if appErr := c.App.RegisterPerformanceReport(c.AppContext, &report); appErr != nil {
|
|
c.Err = appErr
|
|
return
|
|
}
|
|
}
|