Skip to content

Commit 3d65010

Browse files
committed
Last TODO
1 parent d0331af commit 3d65010

File tree

9 files changed

+101
-40
lines changed

9 files changed

+101
-40
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1434,7 +1434,7 @@ func (q *querier) GetExternalAuthLinksByUserID(ctx context.Context, userID uuid.
14341434
return fetchWithPostFilter(q.auth, policy.ActionReadPersonal, q.db.GetExternalAuthLinksByUserID)(ctx, userID)
14351435
}
14361436

1437-
func (q *querier) GetFailedWorkspaceBuildsByTemplateID(ctx context.Context, arg database.GetFailedWorkspaceBuildsByTemplateIDParams) ([]database.WorkspaceBuild, error) {
1437+
func (q *querier) GetFailedWorkspaceBuildsByTemplateID(ctx context.Context, arg database.GetFailedWorkspaceBuildsByTemplateIDParams) ([]database.GetFailedWorkspaceBuildsByTemplateIDRow, error) {
14381438
panic("not implemented")
14391439
}
14401440

coderd/database/dbmem/dbmem.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2511,7 +2511,7 @@ func (q *FakeQuerier) GetExternalAuthLinksByUserID(_ context.Context, userID uui
25112511
return gals, nil
25122512
}
25132513

2514-
func (q *FakeQuerier) GetFailedWorkspaceBuildsByTemplateID(ctx context.Context, arg database.GetFailedWorkspaceBuildsByTemplateIDParams) ([]database.WorkspaceBuild, error) {
2514+
func (q *FakeQuerier) GetFailedWorkspaceBuildsByTemplateID(ctx context.Context, arg database.GetFailedWorkspaceBuildsByTemplateIDParams) ([]database.GetFailedWorkspaceBuildsByTemplateIDRow, error) {
25152515
err := validateDatabaseType(arg)
25162516
if err != nil {
25172517
return nil, err

coderd/database/dbmetrics/dbmetrics.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/models.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 34 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspacebuilds.sql

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,17 +207,32 @@ GROUP BY
207207

208208
-- name: GetFailedWorkspaceBuildsByTemplateID :many
209209
SELECT
210-
wb.*
210+
tv.name AS template_version_name,
211+
u.username AS workspace_owner_username,
212+
w.name AS workspace_name,
213+
wb.build_number AS workspace_build_number,
211214
FROM
212215
workspace_build_with_user AS wb
213216
JOIN
214217
workspaces AS w
215218
ON
216219
wb.workspace_id = w.id
220+
JOIN
221+
users AS u
222+
ON
223+
workspaces.owner_id = u.id
217224
JOIN
218225
provisioner_jobs AS pj
219226
ON
220227
wb.job_id = pj.id
228+
JOIN
229+
templates AS t
230+
ON
231+
w.template_id = t.id
232+
JOIN
233+
template_versions AS tv
234+
ON
235+
wb.template_version_id = tv.id
221236
WHERE
222237
w.template_id = $1
223238
AND wb.created_at > @since

coderd/notifications/reports/generator.go

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db dat
107107
}
108108

109109
for _, stats := range statsRows {
110-
var failedBuilds []database.WorkspaceBuild
110+
var failedBuilds []database.GetFailedWorkspaceBuildsByTemplateIDRow
111111
reportData := map[string]any{}
112112

113113
if stats.FailedBuilds > 0 {
@@ -201,7 +201,7 @@ func reportFailedWorkspaceBuilds(ctx context.Context, logger slog.Logger, db dat
201201
return nil
202202
}
203203

204-
func buildDataForReportFailedWorkspaceBuilds(frequencyDays int, stats database.GetWorkspaceBuildStatsByTemplatesRow, failedBuilds []database.WorkspaceBuild) map[string]any {
204+
func buildDataForReportFailedWorkspaceBuilds(frequencyDays int, stats database.GetWorkspaceBuildStatsByTemplatesRow, failedBuilds []database.GetFailedWorkspaceBuildsByTemplateIDRow) map[string]any {
205205
// Format frequency label
206206
var frequencyLabel string
207207
if frequencyDays == 7 {
@@ -214,15 +214,48 @@ func buildDataForReportFailedWorkspaceBuilds(frequencyDays int, stats database.G
214214
frequencyLabel = fmt.Sprintf("%d day%s", frequencyDays, plural)
215215
}
216216

217-
reportData := map[string]any{
218-
"failed_builds": stats.FailedBuilds,
219-
"total_builds": stats.TotalBuilds,
220-
"report_frequency": frequencyLabel,
221-
"template_version": map[string]any{
222-
// TODO
223-
},
217+
// Sorting order: template_version_name ASC, workspace build number DESC
218+
sort.Slice(failedBuilds, func(i, j int) bool {
219+
if failedBuilds[i].TemplateVersionName != failedBuilds[j].TemplateVersionName {
220+
return failedBuilds[i].TemplateVersionName < failedBuilds[j].TemplateVersionName
221+
}
222+
return failedBuilds[i].WorkspaceBuildNumber > failedBuilds[j].WorkspaceBuildNumber
223+
})
224+
225+
// Build notification model for template versions and failed workspace builds
226+
templateVersions := []map[string]any{}
227+
for _, failedBuild := range failedBuilds {
228+
c := len(templateVersions)
229+
230+
if len(templateVersions) == 0 || templateVersions[c-1]["template_version_name"] != failedBuild.TemplateVersionName {
231+
templateVersions = append(templateVersions, map[string]any{
232+
"template_version_name": failedBuild.TemplateVersionName,
233+
"failed_count": 1,
234+
"failed_builds": map[string]any{
235+
"workspace_owner_username": failedBuild.WorkspaceOwnerUsername,
236+
"workspace_name": failedBuild.WorkspaceName,
237+
"build_number": failedBuild.WorkspaceBuildNumber,
238+
},
239+
})
240+
continue
241+
}
242+
243+
//nolint:errorlint,forcetypeassert // only this function prepares the notification model
244+
builds := templateVersions[c-1]["failed_builds"].([]map[string]any)
245+
builds = append(builds, map[string]any{
246+
"workspace_owner_username": failedBuild.WorkspaceOwnerUsername,
247+
"workspace_name": failedBuild.WorkspaceName,
248+
"build_number": failedBuild.WorkspaceBuildNumber,
249+
})
250+
templateVersions[c-1]["failed_builds"] = builds
251+
}
252+
253+
return map[string]any{
254+
"failed_builds": stats.FailedBuilds,
255+
"total_builds": stats.TotalBuilds,
256+
"report_frequency": frequencyLabel,
257+
"template_versions": templateVersions,
224258
}
225-
return reportData
226259
}
227260

228261
func findTemplateAdmins(ctx context.Context, db database.Store, stats database.GetWorkspaceBuildStatsByTemplatesRow) ([]database.GetUsersRow, error) {

0 commit comments

Comments
 (0)