diff --git a/server/channels/api4/compliance.go b/server/channels/api4/compliance.go index c72c5bd8472..85805c3d95c 100644 --- a/server/channels/api4/compliance.go +++ b/server/channels/api4/compliance.go @@ -40,7 +40,7 @@ func createComplianceReport(c *Context, w http.ResponseWriter, r *http.Request) job.UserId = c.AppContext.Session().UserId - rjob, err := c.App.SaveComplianceReport(&job) + rjob, err := c.App.SaveComplianceReport(c.AppContext, &job) if err != nil { c.Err = err return diff --git a/server/channels/app/app_iface.go b/server/channels/app/app_iface.go index 9eccd5b7760..bfe207ad010 100644 --- a/server/channels/app/app_iface.go +++ b/server/channels/app/app_iface.go @@ -1008,7 +1008,7 @@ type AppIface interface { SaveAdminNotification(userId string, notifyData *model.NotifyAdminToUpgradeRequest) *model.AppError SaveAdminNotifyData(data *model.NotifyAdminData) (*model.NotifyAdminData, *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) SaveSharedChannel(c request.CTX, sc *model.SharedChannel) (*model.SharedChannel, error) SaveSharedChannelRemote(remote *model.SharedChannelRemote) (*model.SharedChannelRemote, error) diff --git a/server/channels/app/compliance.go b/server/channels/app/compliance.go index 736c6e9e928..d0fcd1cfc23 100644 --- a/server/channels/app/compliance.go +++ b/server/channels/app/compliance.go @@ -10,6 +10,7 @@ import ( "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/shared/mlog" + "github.com/mattermost/mattermost/server/public/shared/request" "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 } -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 { return nil, model.NewAppError("saveComplianceReport", "ent.compliance.licence_disable.app_error", nil, "", http.StatusNotImplemented) } job.Type = model.ComplianceTypeAdhoc + rctx.SetLogger(rctx.Logger().With(job.LoggerFields()...)) + job, err := a.Srv().Store().Compliance().Save(job) if err != nil { var appErr *model.AppError @@ -45,10 +48,11 @@ func (a *App) SaveComplianceReport(job *model.Compliance) (*model.Compliance, *m } jCopy := job.DeepCopy() + crctx := rctx.Clone() a.Srv().Go(func() { - err := a.Compliance().RunComplianceJob(jCopy) + err := a.Compliance().RunComplianceJob(crctx, jCopy) if err != nil { - mlog.Warn("Error running compliance job", mlog.Err(err)) + crctx.Logger().Warn("Error running compliance job", mlog.Err(err)) } }) diff --git a/server/channels/app/opentracing/opentracing_layer.go b/server/channels/app/opentracing/opentracing_layer.go index c95256e4492..d20daec9866 100644 --- a/server/channels/app/opentracing/opentracing_layer.go +++ b/server/channels/app/opentracing/opentracing_layer.go @@ -14736,7 +14736,7 @@ func (a *OpenTracingAppLayer) SaveBrandImage(imageData *multipart.FileHeader) *m 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 span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.SaveComplianceReport") @@ -14748,7 +14748,7 @@ func (a *OpenTracingAppLayer) SaveComplianceReport(job *model.Compliance) (*mode }() defer span.Finish() - resultVar0, resultVar1 := a.app.SaveComplianceReport(job) + resultVar0, resultVar1 := a.app.SaveComplianceReport(rctx, job) if resultVar1 != nil { span.LogFields(spanlog.Error(resultVar1)) diff --git a/server/einterfaces/compliance.go b/server/einterfaces/compliance.go index 4409ed2d7dc..02b0d904826 100644 --- a/server/einterfaces/compliance.go +++ b/server/einterfaces/compliance.go @@ -5,9 +5,10 @@ package einterfaces import ( "github.com/mattermost/mattermost/server/public/model" + "github.com/mattermost/mattermost/server/public/shared/request" ) type ComplianceInterface interface { StartComplianceDailyJob() - RunComplianceJob(job *model.Compliance) *model.AppError + RunComplianceJob(rctx request.CTX, job *model.Compliance) *model.AppError } diff --git a/server/einterfaces/mocks/ComplianceInterface.go b/server/einterfaces/mocks/ComplianceInterface.go index e94424f3e43..ea5d98b2581 100644 --- a/server/einterfaces/mocks/ComplianceInterface.go +++ b/server/einterfaces/mocks/ComplianceInterface.go @@ -6,6 +6,7 @@ package mocks import ( model "github.com/mattermost/mattermost/server/public/model" + request "github.com/mattermost/mattermost/server/public/shared/request" mock "github.com/stretchr/testify/mock" ) @@ -14,13 +15,13 @@ type ComplianceInterface struct { mock.Mock } -// RunComplianceJob provides a mock function with given fields: job -func (_m *ComplianceInterface) RunComplianceJob(job *model.Compliance) *model.AppError { - ret := _m.Called(job) +// RunComplianceJob provides a mock function with given fields: rctx, job +func (_m *ComplianceInterface) RunComplianceJob(rctx request.CTX, job *model.Compliance) *model.AppError { + ret := _m.Called(rctx, job) var r0 *model.AppError - if rf, ok := ret.Get(0).(func(*model.Compliance) *model.AppError); ok { - r0 = rf(job) + if rf, ok := ret.Get(0).(func(request.CTX, *model.Compliance) *model.AppError); ok { + r0 = rf(rctx, job) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*model.AppError) diff --git a/server/public/model/compliance.go b/server/public/model/compliance.go index 0385707c25d..c8c67f38911 100644 --- a/server/public/model/compliance.go +++ b/server/public/model/compliance.go @@ -6,6 +6,8 @@ package model import ( "net/http" "strings" + + "github.com/mattermost/mattermost/server/public/shared/mlog" ) const ( @@ -123,3 +125,17 @@ func (c *Compliance) IsValid() *AppError { 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), + } +}