@@ -494,51 +494,6 @@ func (server *Server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*p
494
494
ProvisionerJobs : []telemetry.ProvisionerJob {telemetry .ConvertProvisionerJob (job )},
495
495
})
496
496
497
- // if job.Type == database.ProvisionerJobTypeWorkspaceBuild {
498
- // auditor := server.Auditor.Load()
499
- // build, err := server.Database.GetWorkspaceBuildByJobID(ctx, job.ID)
500
- // var auditAction database.AuditAction
501
- // if build.Transition == database.WorkspaceTransitionStart {
502
- // auditAction = database.AuditActionStart
503
- // } else if build.Transition == database.WorkspaceTransitionStop {
504
- // auditAction = database.AuditActionStop
505
- // } else if build.Transition == database.WorkspaceTransitionDelete {
506
- // auditAction = database.AuditActionDelete
507
- // } else {
508
- // auditAction = database.AuditActionWrite
509
- // }
510
- // if err != nil {
511
- // server.Logger.Error(ctx, "failed to create audit log")
512
- // } else {
513
- // workspace, err := server.Database.GetWorkspaceByID(ctx, build.WorkspaceID)
514
- // if err != nil {
515
- // server.Logger.Error(ctx, "failed to create audit log")
516
- // } else {
517
- // // We pass the workspace name to the Auditor so that it
518
- // // can form a friendly string for the user.
519
- // workspaceResourceInfo := map[string]string{
520
- // "workspaceName": workspace.Name,
521
- // }
522
- //
523
- // wriBytes, err := json.Marshal(workspaceResourceInfo)
524
- // if err != nil {
525
- // server.Logger.Error(ctx, "could not marshal workspace name", slog.Error(err))
526
- // }
527
- // audit.BuildAudit(ctx, &audit.BuildAuditParams[database.WorkspaceBuild]{
528
- // Audit: *auditor,
529
- // Log: server.Logger,
530
- // UserID: job.InitiatorID,
531
- // JobID: job.ID,
532
- // Action: auditAction,
533
- // New: build,
534
- // Status: 500,
535
- // AdditionalFields: wriBytes,
536
- // })
537
- // }
538
- //
539
- // }
540
- // }
541
-
542
497
switch jobType := failJob .Type .(type ) {
543
498
case * proto.FailedJob_WorkspaceBuild_ :
544
499
if jobType .WorkspaceBuild .State == nil {
@@ -571,16 +526,7 @@ func (server *Server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*p
571
526
if getBuildErr != nil {
572
527
server .Logger .Error (ctx , "failed to create audit log - get build err" , slog .Error (err ))
573
528
} else {
574
- var auditAction database.AuditAction
575
- if build .Transition == database .WorkspaceTransitionStart {
576
- auditAction = database .AuditActionStart
577
- } else if build .Transition == database .WorkspaceTransitionStop {
578
- auditAction = database .AuditActionStop
579
- } else if build .Transition == database .WorkspaceTransitionDelete {
580
- auditAction = database .AuditActionDelete
581
- } else {
582
- auditAction = database .AuditActionWrite
583
- }
529
+ auditAction := determineAuditAction (build .Transition )
584
530
workspace , getWorkspaceErr := server .Database .GetWorkspaceByID (ctx , build .WorkspaceID )
585
531
if getWorkspaceErr != nil {
586
532
server .Logger .Error (ctx , "failed to create audit log - get workspace err" , slog .Error (err ))
@@ -688,11 +634,12 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
688
634
return nil , xerrors .Errorf ("get workspace build: %w" , err )
689
635
}
690
636
637
+ workspace , getWorkspaceError := server .Database .GetWorkspaceByID (ctx , workspaceBuild .WorkspaceID )
638
+
691
639
err = server .Database .InTx (func (db database.Store ) error {
692
640
now := database .Now ()
693
641
var workspaceDeadline time.Time
694
- workspace , err := db .GetWorkspaceByID (ctx , workspaceBuild .WorkspaceID )
695
- if err == nil {
642
+ if getWorkspaceError == nil {
696
643
if workspace .Ttl .Valid {
697
644
workspaceDeadline = now .Add (time .Duration (workspace .Ttl .Int64 ))
698
645
}
@@ -748,6 +695,34 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
748
695
return nil , xerrors .Errorf ("complete job: %w" , err )
749
696
}
750
697
698
+ if getWorkspaceError == nil {
699
+ auditor := server .Auditor .Load ()
700
+
701
+ auditAction := determineAuditAction (workspaceBuild .Transition )
702
+
703
+ // We pass the workspace name to the Auditor so that it
704
+ // can form a friendly string for the user.
705
+ workspaceResourceInfo := map [string ]string {
706
+ "workspaceName" : workspace .Name ,
707
+ }
708
+
709
+ wriBytes , err := json .Marshal (workspaceResourceInfo )
710
+ if err != nil {
711
+ server .Logger .Error (ctx , "could not marshal workspace name" , slog .Error (err ))
712
+ }
713
+
714
+ audit .BuildAudit (ctx , & audit.BuildAuditParams [database.WorkspaceBuild ]{
715
+ Audit : * auditor ,
716
+ Log : server .Logger ,
717
+ UserID : job .InitiatorID ,
718
+ JobID : job .ID ,
719
+ Action : auditAction ,
720
+ New : workspaceBuild ,
721
+ Status : 200 ,
722
+ AdditionalFields : wriBytes ,
723
+ })
724
+ }
725
+
751
726
err = server .Pubsub .Publish (codersdk .WorkspaceNotifyChannel (workspaceBuild .WorkspaceID ), []byte {})
752
727
if err != nil {
753
728
return nil , xerrors .Errorf ("update workspace: %w" , err )
@@ -1059,6 +1034,19 @@ func convertWorkspaceTransition(transition database.WorkspaceTransition) (sdkpro
1059
1034
}
1060
1035
}
1061
1036
1037
+ func determineAuditAction (transition database.WorkspaceTransition ) database.AuditAction {
1038
+ switch transition {
1039
+ case database .WorkspaceTransitionStart :
1040
+ return database .AuditActionStart
1041
+ case database .WorkspaceTransitionStop :
1042
+ return database .AuditActionStop
1043
+ case database .WorkspaceTransitionDelete :
1044
+ return database .AuditActionDelete
1045
+ default :
1046
+ return database .AuditActionWrite
1047
+ }
1048
+ }
1049
+
1062
1050
// WorkspaceProvisionJob is the payload for the "workspace_provision" job type.
1063
1051
type WorkspaceProvisionJob struct {
1064
1052
WorkspaceBuildID uuid.UUID `json:"workspace_build_id"`
0 commit comments