Skip to content

Commit ab1fec0

Browse files
committed
logging workspace build successes
1 parent df3a6ce commit ab1fec0

File tree

1 file changed

+45
-57
lines changed

1 file changed

+45
-57
lines changed

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 45 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -494,51 +494,6 @@ func (server *Server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*p
494494
ProvisionerJobs: []telemetry.ProvisionerJob{telemetry.ConvertProvisionerJob(job)},
495495
})
496496

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-
542497
switch jobType := failJob.Type.(type) {
543498
case *proto.FailedJob_WorkspaceBuild_:
544499
if jobType.WorkspaceBuild.State == nil {
@@ -571,16 +526,7 @@ func (server *Server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*p
571526
if getBuildErr != nil {
572527
server.Logger.Error(ctx, "failed to create audit log - get build err", slog.Error(err))
573528
} 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)
584530
workspace, getWorkspaceErr := server.Database.GetWorkspaceByID(ctx, build.WorkspaceID)
585531
if getWorkspaceErr != nil {
586532
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
688634
return nil, xerrors.Errorf("get workspace build: %w", err)
689635
}
690636

637+
workspace, getWorkspaceError := server.Database.GetWorkspaceByID(ctx, workspaceBuild.WorkspaceID)
638+
691639
err = server.Database.InTx(func(db database.Store) error {
692640
now := database.Now()
693641
var workspaceDeadline time.Time
694-
workspace, err := db.GetWorkspaceByID(ctx, workspaceBuild.WorkspaceID)
695-
if err == nil {
642+
if getWorkspaceError == nil {
696643
if workspace.Ttl.Valid {
697644
workspaceDeadline = now.Add(time.Duration(workspace.Ttl.Int64))
698645
}
@@ -748,6 +695,34 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
748695
return nil, xerrors.Errorf("complete job: %w", err)
749696
}
750697

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+
751726
err = server.Pubsub.Publish(codersdk.WorkspaceNotifyChannel(workspaceBuild.WorkspaceID), []byte{})
752727
if err != nil {
753728
return nil, xerrors.Errorf("update workspace: %w", err)
@@ -1059,6 +1034,19 @@ func convertWorkspaceTransition(transition database.WorkspaceTransition) (sdkpro
10591034
}
10601035
}
10611036

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+
10621050
// WorkspaceProvisionJob is the payload for the "workspace_provision" job type.
10631051
type WorkspaceProvisionJob struct {
10641052
WorkspaceBuildID uuid.UUID `json:"workspace_build_id"`

0 commit comments

Comments
 (0)