Skip to content

Commit b705b69

Browse files
committed
fix tests
1 parent ee83546 commit b705b69

File tree

5 files changed

+86
-79
lines changed

5 files changed

+86
-79
lines changed

coderd/database/dbfake/dbfake.go

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -607,12 +607,12 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
607607
}
608608
if arg.Limit > 0 {
609609
if int(arg.Limit) > len(workspaces) {
610-
return convertToWorkspaceRows(workspaces, int64(beforePageCount)), nil
610+
return q.convertToWorkspaceRowsNoLock(ctx, workspaces, int64(beforePageCount)), nil
611611
}
612612
workspaces = workspaces[:arg.Limit]
613613
}
614614

615-
return convertToWorkspaceRows(workspaces, int64(beforePageCount)), nil
615+
return q.convertToWorkspaceRowsNoLock(ctx, workspaces, int64(beforePageCount)), nil
616616
}
617617

618618
// mapAgentStatus determines the agent status based on different timestamps like created_at, last_connected_at, disconnected_at, etc.
@@ -649,10 +649,10 @@ func mapAgentStatus(dbAgent database.WorkspaceAgent, agentInactiveDisconnectTime
649649
return status
650650
}
651651

652-
func convertToWorkspaceRows(workspaces []database.Workspace, count int64) []database.GetWorkspacesRow {
653-
rows := make([]database.GetWorkspacesRow, len(workspaces))
654-
for i, w := range workspaces {
655-
rows[i] = database.GetWorkspacesRow{
652+
func (q *fakeQuerier) convertToWorkspaceRowsNoLock(ctx context.Context, workspaces []database.Workspace, count int64) []database.GetWorkspacesRow {
653+
rows := make([]database.GetWorkspacesRow, 0, len(workspaces))
654+
for _, w := range workspaces {
655+
wr := database.GetWorkspacesRow{
656656
ID: w.ID,
657657
CreatedAt: w.CreatedAt,
658658
UpdatedAt: w.UpdatedAt,
@@ -666,6 +666,31 @@ func convertToWorkspaceRows(workspaces []database.Workspace, count int64) []data
666666
LastUsedAt: w.LastUsedAt,
667667
Count: count,
668668
}
669+
670+
for _, t := range q.templates {
671+
if t.ID == w.TemplateID {
672+
wr.TemplateName = sql.NullString{
673+
Valid: true,
674+
String: t.Name,
675+
}
676+
break
677+
}
678+
}
679+
680+
if build, err := q.getLatestWorkspaceBuildByWorkspaceIDNoLock(ctx, w.ID); err == nil {
681+
for _, tv := range q.templateVersions {
682+
if tv.ID == build.TemplateVersionID {
683+
wr.TemplateVersionID = tv.ID
684+
wr.TemplateVersionName = sql.NullString{
685+
Valid: true,
686+
String: tv.Name,
687+
}
688+
break
689+
}
690+
}
691+
}
692+
693+
rows = append(rows, wr)
669694
}
670695
return rows
671696
}

coderd/database/queries.sql.go

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

coderd/database/queries/workspaces.sql

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,11 @@ WHERE
7575

7676
-- name: GetWorkspaces :many
7777
SELECT
78-
workspaces.*, latest_build.template_version_id as template_version_id, COUNT(*) OVER () as count
78+
workspaces.*,
79+
templates.name AS template_name,
80+
latest_build.template_version_id,
81+
latest_build.template_version_name,
82+
COUNT(*) OVER () as count
7983
FROM
8084
workspaces
8185
JOIN
@@ -86,6 +90,7 @@ LEFT JOIN LATERAL (
8690
SELECT
8791
workspace_builds.transition,
8892
workspace_builds.template_version_id,
93+
template_versions.name AS template_version_name,
8994
provisioner_jobs.id AS provisioner_job_id,
9095
provisioner_jobs.started_at,
9196
provisioner_jobs.updated_at,
@@ -98,13 +103,21 @@ LEFT JOIN LATERAL (
98103
provisioner_jobs
99104
ON
100105
provisioner_jobs.id = workspace_builds.job_id
106+
LEFT JOIN
107+
template_versions
108+
ON
109+
template_versions.id = workspace_builds.template_version_id
101110
WHERE
102111
workspace_builds.workspace_id = workspaces.id
103112
ORDER BY
104113
build_number DESC
105114
LIMIT
106115
1
107116
) latest_build ON TRUE
117+
LEFT JOIN
118+
templates
119+
ON
120+
templates.id = workspaces.template_id
108121
WHERE
109122
-- Optionally include deleted workspaces
110123
workspaces.deleted = @deleted

coderd/prometheusmetrics/prometheusmetrics.go

Lines changed: 4 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,6 @@ func Agents(ctx context.Context, logger slog.Logger, registerer prometheus.Regis
225225
logger.Debug(ctx, "agent metrics collection is starting")
226226
timer := prometheus.NewTimer(metricsCollectorAgents)
227227

228-
// Need to define these ahead of time bc of the use of gotos below
229-
var templateNamesByID map[uuid.UUID]string
230-
var templateVersionNamesByID map[uuid.UUID]string
231-
232228
workspaceRows, err := db.GetWorkspaces(ctx, database.GetWorkspacesParams{
233229
AgentInactiveDisconnectTimeoutSeconds: int64(agentInactiveDisconnectTimeout.Seconds()),
234230
})
@@ -237,19 +233,13 @@ func Agents(ctx context.Context, logger slog.Logger, registerer prometheus.Regis
237233
goto done
238234
}
239235

240-
templateNamesByID, templateVersionNamesByID, err = getTemplatesAndVersionNamesFromWorkspaces(ctx, db, workspaceRows)
241-
if err != nil {
242-
logger.Error(ctx, "can't get template info", slog.Error(err))
243-
goto done
244-
}
245-
246236
for _, workspace := range workspaceRows {
247-
templateName, found := templateNamesByID[workspace.TemplateID]
248-
if !found {
237+
templateName := workspace.TemplateName.String
238+
if !workspace.TemplateName.Valid {
249239
templateName = "unknown"
250240
}
251-
templateVersionName, found := templateVersionNamesByID[workspace.TemplateID]
252-
if !found {
241+
templateVersionName := workspace.TemplateVersionName.String
242+
if !workspace.TemplateVersionName.Valid {
253243
templateVersionName = "unknown"
254244
}
255245
user, err := db.GetUserByID(ctx, workspace.OwnerID)
@@ -343,46 +333,6 @@ func Agents(ctx context.Context, logger slog.Logger, registerer prometheus.Regis
343333
}, nil
344334
}
345335

346-
func getTemplatesAndVersionNamesFromWorkspaces(ctx context.Context, db database.Store, workspaceRows []database.GetWorkspacesRow) (map[uuid.UUID]string, map[uuid.UUID]string, error) {
347-
// Aggregate the used template and version IDs to minimize DB calls
348-
usedTemplateIDs := map[uuid.UUID]struct{}{}
349-
usedTemplateVersionIDs := map[uuid.UUID]struct{}{}
350-
for _, workspace := range workspaceRows {
351-
usedTemplateIDs[workspace.TemplateID] = struct{}{}
352-
usedTemplateVersionIDs[workspace.TemplateVersionID] = struct{}{}
353-
}
354-
templatesToGet := make([]uuid.UUID, 0, len(usedTemplateIDs))
355-
for id := range usedTemplateIDs {
356-
templatesToGet = append(templatesToGet, id)
357-
}
358-
templateVersionsToGet := make([]uuid.UUID, 0, len(usedTemplateVersionIDs))
359-
for id := range usedTemplateVersionIDs {
360-
templateVersionsToGet = append(templateVersionsToGet, id)
361-
}
362-
363-
templates, err := db.GetTemplatesWithFilter(ctx, database.GetTemplatesWithFilterParams{
364-
IDs: templatesToGet,
365-
})
366-
if err != nil {
367-
return nil, nil, err
368-
}
369-
templateNamesByID := make(map[uuid.UUID]string, len(templates))
370-
for _, template := range templates {
371-
templateNamesByID[template.ID] = template.Name
372-
}
373-
374-
versions, err := db.GetTemplateVersionsByIDs(ctx, templateVersionsToGet)
375-
if err != nil {
376-
return nil, nil, err
377-
}
378-
templateVersionNamesByID := make(map[uuid.UUID]string, len(versions))
379-
for _, version := range versions {
380-
templateVersionNamesByID[version.ID] = version.Name
381-
}
382-
383-
return templateNamesByID, templateVersionNamesByID, nil
384-
}
385-
386336
func AgentStats(ctx context.Context, logger slog.Logger, registerer prometheus.Registerer, db database.Store, initialCreateAfter time.Time, duration time.Duration) (func(), error) {
387337
if duration == 0 {
388338
duration = 1 * time.Minute

coderd/prometheusmetrics/prometheusmetrics_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ func TestAgents(t *testing.T) {
312312
// when
313313
closeFunc, err := prometheusmetrics.Agents(ctx, slogtest.Make(t, &slogtest.Options{
314314
IgnoreErrors: true,
315-
}), registry, db, &coordinatorPtr, derpMap, agentInactiveDisconnectTimeout, time.Millisecond)
315+
}), registry, db, &coordinatorPtr, derpMap, agentInactiveDisconnectTimeout, time.Second)
316316
require.NoError(t, err)
317317
t.Cleanup(closeFunc)
318318

@@ -332,8 +332,10 @@ func TestAgents(t *testing.T) {
332332
for _, metric := range metrics {
333333
switch metric.GetName() {
334334
case "coderd_agents_up":
335-
assert.Equal(t, "testuser", metric.Metric[0].Label[0].GetValue()) // Username
336-
assert.Equal(t, workspace.Name, metric.Metric[0].Label[1].GetValue()) // Workspace name
335+
assert.Equal(t, template.Name, metric.Metric[0].Label[0].GetValue()) // Template name
336+
assert.Equal(t, version.Name, metric.Metric[0].Label[1].GetValue()) // Template version name
337+
assert.Equal(t, "testuser", metric.Metric[0].Label[2].GetValue()) // Username
338+
assert.Equal(t, workspace.Name, metric.Metric[0].Label[3].GetValue()) // Workspace name
337339
assert.Equal(t, 1, int(metric.Metric[0].Gauge.GetValue())) // Metric value
338340
agentsUp = true
339341
case "coderd_agents_connections":

0 commit comments

Comments
 (0)