[MM-54435] Use annotated logger to capture compliance export logs (#24791)

Этот коммит содержится в:
Ben Schumacher
2023-10-23 10:20:32 +02:00
коммит произвёл GitHub
родитель fe6131caed
Коммит d0c22aa1cd
7 изменённых файлов: 35 добавлений и 13 удалений

Просмотреть файл

@@ -40,7 +40,7 @@ func createComplianceReport(c *Context, w http.ResponseWriter, r *http.Request)
job.UserId = c.AppContext.Session().UserId job.UserId = c.AppContext.Session().UserId
rjob, err := c.App.SaveComplianceReport(&job) rjob, err := c.App.SaveComplianceReport(c.AppContext, &job)
if err != nil { if err != nil {
c.Err = err c.Err = err
return return

Просмотреть файл

@@ -1008,7 +1008,7 @@ type AppIface interface {
SaveAdminNotification(userId string, notifyData *model.NotifyAdminToUpgradeRequest) *model.AppError SaveAdminNotification(userId string, notifyData *model.NotifyAdminToUpgradeRequest) *model.AppError
SaveAdminNotifyData(data *model.NotifyAdminData) (*model.NotifyAdminData, *model.AppError) SaveAdminNotifyData(data *model.NotifyAdminData) (*model.NotifyAdminData, *model.AppError)
SaveBrandImage(imageData *multipart.FileHeader) *model.AppError SaveBrandImage(imageData *multipart.FileHeader) *model.AppError
SaveComplianceReport(job *model.Compliance) (*model.Compliance, *model.AppError) SaveComplianceReport(rctx request.CTX, job *model.Compliance) (*model.Compliance, *model.AppError)
SaveReactionForPost(c *request.Context, reaction *model.Reaction) (*model.Reaction, *model.AppError) SaveReactionForPost(c *request.Context, reaction *model.Reaction) (*model.Reaction, *model.AppError)
SaveSharedChannel(c request.CTX, sc *model.SharedChannel) (*model.SharedChannel, error) SaveSharedChannel(c request.CTX, sc *model.SharedChannel) (*model.SharedChannel, error)
SaveSharedChannelRemote(remote *model.SharedChannelRemote) (*model.SharedChannelRemote, error) SaveSharedChannelRemote(remote *model.SharedChannelRemote) (*model.SharedChannelRemote, error)

Просмотреть файл

@@ -10,6 +10,7 @@ import (
"github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/model"
"github.com/mattermost/mattermost/server/public/shared/mlog" "github.com/mattermost/mattermost/server/public/shared/mlog"
"github.com/mattermost/mattermost/server/public/shared/request"
"github.com/mattermost/mattermost/server/v8/channels/store" "github.com/mattermost/mattermost/server/v8/channels/store"
) )
@@ -26,13 +27,15 @@ func (a *App) GetComplianceReports(page, perPage int) (model.Compliances, *model
return compliances, nil return compliances, nil
} }
func (a *App) SaveComplianceReport(job *model.Compliance) (*model.Compliance, *model.AppError) { func (a *App) SaveComplianceReport(rctx request.CTX, job *model.Compliance) (*model.Compliance, *model.AppError) {
if license := a.Srv().License(); !*a.Config().ComplianceSettings.Enable || license == nil || !*license.Features.Compliance || a.Compliance() == nil { if license := a.Srv().License(); !*a.Config().ComplianceSettings.Enable || license == nil || !*license.Features.Compliance || a.Compliance() == nil {
return nil, model.NewAppError("saveComplianceReport", "ent.compliance.licence_disable.app_error", nil, "", http.StatusNotImplemented) return nil, model.NewAppError("saveComplianceReport", "ent.compliance.licence_disable.app_error", nil, "", http.StatusNotImplemented)
} }
job.Type = model.ComplianceTypeAdhoc job.Type = model.ComplianceTypeAdhoc
rctx.SetLogger(rctx.Logger().With(job.LoggerFields()...))
job, err := a.Srv().Store().Compliance().Save(job) job, err := a.Srv().Store().Compliance().Save(job)
if err != nil { if err != nil {
var appErr *model.AppError var appErr *model.AppError
@@ -45,10 +48,11 @@ func (a *App) SaveComplianceReport(job *model.Compliance) (*model.Compliance, *m
} }
jCopy := job.DeepCopy() jCopy := job.DeepCopy()
crctx := rctx.Clone()
a.Srv().Go(func() { a.Srv().Go(func() {
err := a.Compliance().RunComplianceJob(jCopy) err := a.Compliance().RunComplianceJob(crctx, jCopy)
if err != nil { if err != nil {
mlog.Warn("Error running compliance job", mlog.Err(err)) crctx.Logger().Warn("Error running compliance job", mlog.Err(err))
} }
}) })

Просмотреть файл

@@ -14736,7 +14736,7 @@ func (a *OpenTracingAppLayer) SaveBrandImage(imageData *multipart.FileHeader) *m
return resultVar0 return resultVar0
} }
func (a *OpenTracingAppLayer) SaveComplianceReport(job *model.Compliance) (*model.Compliance, *model.AppError) { func (a *OpenTracingAppLayer) SaveComplianceReport(rctx request.CTX, job *model.Compliance) (*model.Compliance, *model.AppError) {
origCtx := a.ctx origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SaveComplianceReport") span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SaveComplianceReport")
@@ -14748,7 +14748,7 @@ func (a *OpenTracingAppLayer) SaveComplianceReport(job *model.Compliance) (*mode
}() }()
defer span.Finish() defer span.Finish()
resultVar0, resultVar1 := a.app.SaveComplianceReport(job) resultVar0, resultVar1 := a.app.SaveComplianceReport(rctx, job)
if resultVar1 != nil { if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1)) span.LogFields(spanlog.Error(resultVar1))

Просмотреть файл

@@ -5,9 +5,10 @@ package einterfaces
import ( import (
"github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/model"
"github.com/mattermost/mattermost/server/public/shared/request"
) )
type ComplianceInterface interface { type ComplianceInterface interface {
StartComplianceDailyJob() StartComplianceDailyJob()
RunComplianceJob(job *model.Compliance) *model.AppError RunComplianceJob(rctx request.CTX, job *model.Compliance) *model.AppError
} }

Просмотреть файл

@@ -6,6 +6,7 @@ package mocks
import ( import (
model "github.com/mattermost/mattermost/server/public/model" model "github.com/mattermost/mattermost/server/public/model"
request "github.com/mattermost/mattermost/server/public/shared/request"
mock "github.com/stretchr/testify/mock" mock "github.com/stretchr/testify/mock"
) )
@@ -14,13 +15,13 @@ type ComplianceInterface struct {
mock.Mock mock.Mock
} }
// RunComplianceJob provides a mock function with given fields: job // RunComplianceJob provides a mock function with given fields: rctx, job
func (_m *ComplianceInterface) RunComplianceJob(job *model.Compliance) *model.AppError { func (_m *ComplianceInterface) RunComplianceJob(rctx request.CTX, job *model.Compliance) *model.AppError {
ret := _m.Called(job) ret := _m.Called(rctx, job)
var r0 *model.AppError var r0 *model.AppError
if rf, ok := ret.Get(0).(func(*model.Compliance) *model.AppError); ok { if rf, ok := ret.Get(0).(func(request.CTX, *model.Compliance) *model.AppError); ok {
r0 = rf(job) r0 = rf(rctx, job)
} else { } else {
if ret.Get(0) != nil { if ret.Get(0) != nil {
r0 = ret.Get(0).(*model.AppError) r0 = ret.Get(0).(*model.AppError)

Просмотреть файл

@@ -6,6 +6,8 @@ package model
import ( import (
"net/http" "net/http"
"strings" "strings"
"github.com/mattermost/mattermost/server/public/shared/mlog"
) )
const ( const (
@@ -123,3 +125,17 @@ func (c *Compliance) IsValid() *AppError {
return nil return nil
} }
// LoggerFields returns the logger annotations reflecting the given compliance job metadata.
func (c *Compliance) LoggerFields() []mlog.Field {
if c == nil {
return nil
}
return []mlog.Field{
mlog.String("job_id", c.Id),
mlog.String("job_type", c.Type),
mlog.String("job_name", c.JobName()),
mlog.Millis("job_create_at", c.CreateAt),
}
}