Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit951dfaa

Browse files
authored
feat: add workspace_id to workspace_build audit logs (#12718)
1 parent0966fe2 commit951dfaa

File tree

3 files changed

+42
-16
lines changed

3 files changed

+42
-16
lines changed

‎coderd/audit/audit.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type AdditionalFields struct {
2121
BuildNumberstring`json:"build_number"`
2222
BuildReason database.BuildReason`json:"build_reason"`
2323
WorkspaceOwnerstring`json:"workspace_owner"`
24+
WorkspaceID uuid.UUID`json:"workpace_id"`
2425
}
2526

2627
funcNewNop()Auditor {

‎coderd/provisionerdserver/provisionerdserver.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,7 @@ func (s *server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*proto.
999999
WorkspaceName:workspace.Name,
10001000
BuildNumber:strconv.FormatInt(int64(build.BuildNumber),10),
10011001
BuildReason:database.BuildReason(string(build.Reason)),
1002+
WorkspaceID:workspace.ID,
10021003
}
10031004

10041005
wriBytes,err:=json.Marshal(buildResourceInfo)
@@ -1382,6 +1383,7 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
13821383
WorkspaceName:workspace.Name,
13831384
BuildNumber:strconv.FormatInt(int64(workspaceBuild.BuildNumber),10),
13841385
BuildReason:database.BuildReason(string(workspaceBuild.Reason)),
1386+
WorkspaceID:workspace.ID,
13851387
}
13861388

13871389
wriBytes,err:=json.Marshal(buildResourceInfo)

‎coderd/provisionerdserver/provisionerdserver_test.go

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,6 @@ import (
4444
"github.com/coder/serpent"
4545
)
4646

47-
funcmockAuditor()*atomic.Pointer[audit.Auditor] {
48-
ptr:=&atomic.Pointer[audit.Auditor]{}
49-
mock:=audit.Auditor(audit.NewMock())
50-
ptr.Store(&mock)
51-
returnptr
52-
}
53-
5447
functestTemplateScheduleStore()*atomic.Pointer[schedule.TemplateScheduleStore] {
5548
ptr:=&atomic.Pointer[schedule.TemplateScheduleStore]{}
5649
store:=schedule.NewAGPLTemplateScheduleStore()
@@ -822,20 +815,18 @@ func TestFailJob(t *testing.T) {
822815
//
823816
//(*Server).FailJob audit log - get build {"error": "sql: no rows in result set"}
824817
ignoreLogErrors:=true
825-
srv,db,ps,pd:=setup(t,ignoreLogErrors,&overrides{})
818+
auditor:=audit.NewMock()
819+
srv,db,ps,pd:=setup(t,ignoreLogErrors,&overrides{
820+
auditor:auditor,
821+
})
822+
org:=dbgen.Organization(t,db, database.Organization{})
826823
workspace,err:=db.InsertWorkspace(ctx, database.InsertWorkspaceParams{
827824
ID:uuid.New(),
828825
AutomaticUpdates:database.AutomaticUpdatesNever,
826+
OrganizationID:org.ID,
829827
})
830828
require.NoError(t,err)
831829
buildID:=uuid.New()
832-
err=db.InsertWorkspaceBuild(ctx, database.InsertWorkspaceBuildParams{
833-
ID:buildID,
834-
WorkspaceID:workspace.ID,
835-
Transition:database.WorkspaceTransitionStart,
836-
Reason:database.BuildReasonInitiator,
837-
})
838-
require.NoError(t,err)
839830
input,err:=json.Marshal(provisionerdserver.WorkspaceProvisionJob{
840831
WorkspaceBuildID:buildID,
841832
})
@@ -849,6 +840,15 @@ func TestFailJob(t *testing.T) {
849840
StorageMethod:database.ProvisionerStorageMethodFile,
850841
})
851842
require.NoError(t,err)
843+
err=db.InsertWorkspaceBuild(ctx, database.InsertWorkspaceBuildParams{
844+
ID:buildID,
845+
WorkspaceID:workspace.ID,
846+
Transition:database.WorkspaceTransitionStart,
847+
Reason:database.BuildReasonInitiator,
848+
JobID:job.ID,
849+
})
850+
require.NoError(t,err)
851+
852852
_,err=db.AcquireProvisionerJob(ctx, database.AcquireProvisionerJobParams{
853853
WorkerID: uuid.NullUUID{
854854
UUID:pd.ID,
@@ -871,6 +871,7 @@ func TestFailJob(t *testing.T) {
871871
require.NoError(t,err)
872872
defercloseLogsSubscribe()
873873

874+
auditor.ResetLogs()
874875
_,err=srv.FailJob(ctx,&proto.FailedJob{
875876
JobId:job.ID.String(),
876877
Type:&proto.FailedJob_WorkspaceBuild_{
@@ -885,6 +886,13 @@ func TestFailJob(t *testing.T) {
885886
build,err:=db.GetWorkspaceBuildByID(ctx,buildID)
886887
require.NoError(t,err)
887888
require.Equal(t,"some state",string(build.ProvisionerState))
889+
require.Len(t,auditor.AuditLogs(),1)
890+
891+
// Assert that the workspace_id field get populated
892+
varadditionalFields audit.AdditionalFields
893+
err=json.Unmarshal(auditor.AuditLogs()[0].AdditionalFields,&additionalFields)
894+
require.NoError(t,err)
895+
require.Equal(t,workspace.ID,additionalFields.WorkspaceID)
888896
})
889897
}
890898

@@ -1130,12 +1138,14 @@ func TestCompleteJob(t *testing.T) {
11301138
start:=time.Now()
11311139
tss:=&atomic.Pointer[schedule.TemplateScheduleStore]{}
11321140
uqhss:=&atomic.Pointer[schedule.UserQuietHoursScheduleStore]{}
1141+
auditor:=audit.NewMock()
11331142
srv,db,ps,pd:=setup(t,false,&overrides{
11341143
timeNowFn:func() time.Time {
11351144
returnc.now.Add(time.Since(start))
11361145
},
11371146
templateScheduleStore:tss,
11381147
userQuietHoursScheduleStore:uqhss,
1148+
auditor:auditor,
11391149
})
11401150

11411151
vartemplateScheduleStore schedule.TemplateScheduleStore= schedule.MockTemplateScheduleStore{
@@ -1291,6 +1301,12 @@ func TestCompleteJob(t *testing.T) {
12911301
require.WithinDuration(t,c.expectedMaxDeadline,workspaceBuild.MaxDeadline,15*time.Second,"max deadline does not match expected")
12921302
require.GreaterOrEqual(t,workspaceBuild.MaxDeadline.Unix(),workspaceBuild.Deadline.Unix(),"max deadline is smaller than deadline")
12931303
}
1304+
1305+
require.Len(t,auditor.AuditLogs(),1)
1306+
varadditionalFields audit.AdditionalFields
1307+
err=json.Unmarshal(auditor.AuditLogs()[0].AdditionalFields,&additionalFields)
1308+
require.NoError(t,err)
1309+
require.Equal(t,workspace.ID,additionalFields.WorkspaceID)
12941310
})
12951311
}
12961312
})
@@ -1506,6 +1522,7 @@ type overrides struct {
15061522
acquireJobLongPollDuration time.Duration
15071523
heartbeatFnfunc(ctx context.Context)error
15081524
heartbeatInterval time.Duration
1525+
auditor audit.Auditor
15091526
}
15101527

15111528
funcsetup(t*testing.T,ignoreLogErrorsbool,ov*overrides) (proto.DRPCProvisionerDaemonServer, database.Store, pubsub.Pubsub, database.ProvisionerDaemon) {
@@ -1560,6 +1577,12 @@ func setup(t *testing.T, ignoreLogErrors bool, ov *overrides) (proto.DRPCProvisi
15601577
ifov.timeNowFn!=nil {
15611578
timeNowFn=ov.timeNowFn
15621579
}
1580+
auditPtr:=&atomic.Pointer[audit.Auditor]{}
1581+
varauditor audit.Auditor=audit.NewMock()
1582+
ifov.auditor!=nil {
1583+
auditor=ov.auditor
1584+
}
1585+
auditPtr.Store(&auditor)
15631586
pollDur=ov.acquireJobLongPollDuration
15641587

15651588
daemon,err:=db.UpsertProvisionerDaemon(ov.ctx, database.UpsertProvisionerDaemonParams{
@@ -1588,7 +1611,7 @@ func setup(t *testing.T, ignoreLogErrors bool, ov *overrides) (proto.DRPCProvisi
15881611
telemetry.NewNoop(),
15891612
trace.NewNoopTracerProvider().Tracer("noop"),
15901613
&atomic.Pointer[proto.QuotaCommitter]{},
1591-
mockAuditor(),
1614+
auditPtr,
15921615
tss,
15931616
uqhss,
15941617
deploymentValues,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp