Skip to content

Commit 2342d52

Browse files
committed
WIP
1 parent 0782614 commit 2342d52

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

coderd/notifications/events.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var (
1212
TemplateWorkspaceDormant = uuid.MustParse("0ea69165-ec14-4314-91f1-69566ac3c5a0")
1313
TemplateWorkspaceAutoUpdated = uuid.MustParse("c34a0c09-0704-4cac-bd1c-0c0146811c2b")
1414
TemplateWorkspaceMarkedForDeletion = uuid.MustParse("51ce2fdf-c9ca-4be1-8d70-628674f9bc42")
15+
TemplateWorkspaceManualBuildFailed = uuid.MustParse("2faeee0f-26cb-4e96-821c-85ccb9f71513")
1516
)
1617

1718
// Account-related events.

coderd/notifications/notifications_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,19 @@ func TestNotificationTemplatesCanRender(t *testing.T) {
736736
},
737737
},
738738
},
739+
{
740+
name: "TemplateWorkspaceManualBuildFailed",
741+
id: notifications.TemplateWorkspaceManualBuildFailed,
742+
payload: types.MessagePayload{
743+
UserName: "bobby",
744+
Labels: map[string]string{
745+
"name": "bobby-workspace",
746+
"template_name": "bobby-template",
747+
"initiator": "joe",
748+
"workspace_owner_username": "mrbobby",
749+
},
750+
},
751+
},
739752
{
740753
name: "TemplateUserAccountCreated",
741754
id: notifications.TemplateUserAccountCreated,

coderd/provisionerdserver/provisionerdserver.go

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1098,7 +1098,8 @@ func (s *server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*proto.
10981098
func (s *server) notifyWorkspaceBuildFailed(ctx context.Context, workspace database.Workspace, build database.WorkspaceBuild) {
10991099
var reason string
11001100
if build.Reason.Valid() && build.Reason == database.BuildReasonInitiator {
1101-
return // failed workspace build initiated by a user should not notify
1101+
s.notifyWorkspaceManualBuildFailed(ctx, workspace, build)
1102+
return
11021103
}
11031104
reason = string(build.Reason)
11041105

@@ -1114,6 +1115,43 @@ func (s *server) notifyWorkspaceBuildFailed(ctx context.Context, workspace datab
11141115
}
11151116
}
11161117

1118+
func (s *server) notifyWorkspaceManualBuildFailed(ctx context.Context, workspace database.Workspace, build database.WorkspaceBuild) {
1119+
templateAdmins, err := s.Database.GetUsers(ctx, database.GetUsersParams{
1120+
RbacRole: []string{codersdk.RoleTemplateAdmin},
1121+
})
1122+
if err != nil {
1123+
s.Logger.Error(ctx, "unable to fetch template admins", slog.Error(err))
1124+
return
1125+
}
1126+
1127+
template, err := s.Database.GetTemplateByID(ctx, workspace.TemplateID)
1128+
if err != nil {
1129+
s.Logger.Error(ctx, "unable to fetch template", slog.Error(err))
1130+
return
1131+
}
1132+
1133+
workspaceOwner, err := s.Database.GetUserByID(ctx, workspace.OwnerID)
1134+
if err != nil {
1135+
s.Logger.Error(ctx, "unable to fetch workspace owner", slog.Error(err))
1136+
return
1137+
}
1138+
1139+
for _, templateAdmin := range templateAdmins {
1140+
if _, err := s.NotificationsEnqueuer.Enqueue(ctx, templateAdmin.ID, notifications.TemplateWorkspaceManualBuildFailed,
1141+
map[string]string{
1142+
"name": workspace.Name,
1143+
"template_name": template.Name,
1144+
"initiator": build.InitiatorByUsername,
1145+
"workspace_owner_username": workspaceOwner.Name,
1146+
}, "provisionerdserver",
1147+
// Associate this notification with all the related entities.
1148+
workspace.ID, workspace.OwnerID, workspace.TemplateID, workspace.OrganizationID,
1149+
); err != nil {
1150+
s.Logger.Warn(ctx, "failed to notify of failed workspace autobuild", slog.Error(err))
1151+
}
1152+
}
1153+
}
1154+
11171155
// CompleteJob is triggered by a provision daemon to mark a provisioner job as completed.
11181156
func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob) (*proto.Empty, error) {
11191157
ctx, span := s.startTrace(ctx, tracing.FuncName())

0 commit comments

Comments
 (0)