Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbd6f426

Browse files
fix: return first workspace agent script timing per script (cherry-pick#16203) (#16208)
Co-authored-by: Danielle Maywood <danielle@themaywoods.com>Fixes#16124
1 parent075269a commitbd6f426

File tree

6 files changed

+77
-10
lines changed

6 files changed

+77
-10
lines changed

‎coderd/database/dbgen/dbgen.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,9 +209,17 @@ func WorkspaceAgentScript(t testing.TB, db database.Store, orig database.Workspa
209209
returnscripts[0]
210210
}
211211

212-
funcWorkspaceAgentScriptTimings(t testing.TB,db database.Store,script database.WorkspaceAgentScript,countint) []database.WorkspaceAgentScriptTiming {
213-
timings:=make([]database.WorkspaceAgentScriptTiming,count)
214-
fori:=rangecount {
212+
funcWorkspaceAgentScripts(t testing.TB,db database.Store,countint,orig database.WorkspaceAgentScript) []database.WorkspaceAgentScript {
213+
scripts:=make([]database.WorkspaceAgentScript,0,count)
214+
forrangecount {
215+
scripts=append(scripts,WorkspaceAgentScript(t,db,orig))
216+
}
217+
returnscripts
218+
}
219+
220+
funcWorkspaceAgentScriptTimings(t testing.TB,db database.Store,scripts []database.WorkspaceAgentScript) []database.WorkspaceAgentScriptTiming {
221+
timings:=make([]database.WorkspaceAgentScriptTiming,len(scripts))
222+
fori,script:=rangescripts {
215223
timings[i]=WorkspaceAgentScriptTiming(t,db, database.WorkspaceAgentScriptTiming{
216224
ScriptID:script.ID,
217225
})

‎coderd/database/dbmem/dbmem.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6018,6 +6018,15 @@ func (q *FakeQuerier) GetWorkspaceAgentScriptTimingsByBuildID(ctx context.Contex
60186018
WorkspaceAgentName:agent.Name,
60196019
})
60206020
}
6021+
6022+
// We want to only return the first script run for each Script ID.
6023+
slices.SortFunc(rows,func(a,b database.GetWorkspaceAgentScriptTimingsByBuildIDRow)int {
6024+
returna.StartedAt.Compare(b.StartedAt)
6025+
})
6026+
rows=slices.CompactFunc(rows,func(e1,e2 database.GetWorkspaceAgentScriptTimingsByBuildIDRow)bool {
6027+
returne1.ScriptID==e2.ScriptID
6028+
})
6029+
60216030
returnrows,nil
60226031
}
60236032

‎coderd/database/queries.sql.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries/workspaceagents.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ RETURNING workspace_agent_script_timings.*;
304304

305305
-- name: GetWorkspaceAgentScriptTimingsByBuildID :many
306306
SELECT
307-
workspace_agent_script_timings.*,
307+
DISTINCTON (workspace_agent_script_timings.script_id)workspace_agent_script_timings.*,
308308
workspace_agent_scripts.display_name,
309309
workspace_agents.idas workspace_agent_id,
310310
workspace_agents.nameas workspace_agent_name
@@ -313,4 +313,5 @@ INNER JOIN workspace_agent_scripts ON workspace_agent_scripts.id = workspace_age
313313
INNER JOIN workspace_agentsONworkspace_agents.id=workspace_agent_scripts.workspace_agent_id
314314
INNER JOIN workspace_resourcesONworkspace_resources.id=workspace_agents.resource_id
315315
INNER JOIN workspace_buildsONworkspace_builds.job_id=workspace_resources.job_id
316-
WHEREworkspace_builds.id= $1;
316+
WHEREworkspace_builds.id= $1
317+
ORDER BYworkspace_agent_script_timings.script_id,workspace_agent_script_timings.started_at;

‎coderd/workspacebuilds_test.go

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/stretchr/testify/require"
1515
"go.opentelemetry.io/otel"
1616
"go.opentelemetry.io/otel/propagation"
17+
"golang.org/x/exp/slices"
1718
"golang.org/x/xerrors"
1819

1920
"cdr.dev/slog"
@@ -1421,6 +1422,47 @@ func TestWorkspaceBuildTimings(t *testing.T) {
14211422
}
14221423
})
14231424

1425+
t.Run("MultipleTimingsForSameAgentScript",func(t*testing.T) {
1426+
t.Parallel()
1427+
1428+
// Given: a build with multiple timings for the same script
1429+
build:=makeBuild(t)
1430+
resource:=dbgen.WorkspaceResource(t,db, database.WorkspaceResource{
1431+
JobID:build.JobID,
1432+
})
1433+
agent:=dbgen.WorkspaceAgent(t,db, database.WorkspaceAgent{
1434+
ResourceID:resource.ID,
1435+
})
1436+
script:=dbgen.WorkspaceAgentScript(t,db, database.WorkspaceAgentScript{
1437+
WorkspaceAgentID:agent.ID,
1438+
})
1439+
timings:=make([]database.WorkspaceAgentScriptTiming,3)
1440+
scriptStartedAt:=dbtime.Now()
1441+
fori:=rangetimings {
1442+
timings[i]=dbgen.WorkspaceAgentScriptTiming(t,db, database.WorkspaceAgentScriptTiming{
1443+
StartedAt:scriptStartedAt,
1444+
EndedAt:scriptStartedAt.Add(1*time.Minute),
1445+
ScriptID:script.ID,
1446+
})
1447+
1448+
// Add an hour to the previous "started at" so we can
1449+
// reliably differentiate the scripts from each other.
1450+
scriptStartedAt=scriptStartedAt.Add(1*time.Hour)
1451+
}
1452+
1453+
// When: fetching timings for the build
1454+
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitLong)
1455+
t.Cleanup(cancel)
1456+
res,err:=client.WorkspaceBuildTimings(ctx,build.ID)
1457+
require.NoError(t,err)
1458+
1459+
// Then: return a response with the first agent script timing
1460+
require.Len(t,res.AgentScriptTimings,1)
1461+
1462+
require.Equal(t,timings[0].StartedAt.UnixMilli(),res.AgentScriptTimings[0].StartedAt.UnixMilli())
1463+
require.Equal(t,timings[0].EndedAt.UnixMilli(),res.AgentScriptTimings[0].EndedAt.UnixMilli())
1464+
})
1465+
14241466
t.Run("AgentScriptTimings",func(t*testing.T) {
14251467
t.Parallel()
14261468

@@ -1432,10 +1474,10 @@ func TestWorkspaceBuildTimings(t *testing.T) {
14321474
agent:=dbgen.WorkspaceAgent(t,db, database.WorkspaceAgent{
14331475
ResourceID:resource.ID,
14341476
})
1435-
script:=dbgen.WorkspaceAgentScript(t,db, database.WorkspaceAgentScript{
1477+
scripts:=dbgen.WorkspaceAgentScripts(t,db,5, database.WorkspaceAgentScript{
14361478
WorkspaceAgentID:agent.ID,
14371479
})
1438-
agentScriptTimings:=dbgen.WorkspaceAgentScriptTimings(t,db,script,5)
1480+
agentScriptTimings:=dbgen.WorkspaceAgentScriptTimings(t,db,scripts)
14391481

14401482
// When: fetching timings for the build
14411483
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitLong)
@@ -1445,6 +1487,12 @@ func TestWorkspaceBuildTimings(t *testing.T) {
14451487

14461488
// Then: return a response with the expected timings
14471489
require.Len(t,res.AgentScriptTimings,5)
1490+
slices.SortFunc(res.AgentScriptTimings,func(a,b codersdk.AgentScriptTiming)int {
1491+
returna.StartedAt.Compare(b.StartedAt)
1492+
})
1493+
slices.SortFunc(agentScriptTimings,func(a,b database.WorkspaceAgentScriptTiming)int {
1494+
returna.StartedAt.Compare(b.StartedAt)
1495+
})
14481496
fori:=rangeres.AgentScriptTimings {
14491497
timingRes:=res.AgentScriptTimings[i]
14501498
genTiming:=agentScriptTimings[i]

‎coderd/workspaces_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3757,10 +3757,10 @@ func TestWorkspaceTimings(t *testing.T) {
37573757
agent:=dbgen.WorkspaceAgent(t,db, database.WorkspaceAgent{
37583758
ResourceID:resource.ID,
37593759
})
3760-
script:=dbgen.WorkspaceAgentScript(t,db, database.WorkspaceAgentScript{
3760+
scripts:=dbgen.WorkspaceAgentScripts(t,db,3, database.WorkspaceAgentScript{
37613761
WorkspaceAgentID:agent.ID,
37623762
})
3763-
dbgen.WorkspaceAgentScriptTimings(t,db,script,3)
3763+
dbgen.WorkspaceAgentScriptTimings(t,db,scripts)
37643764

37653765
// When: fetching the timings
37663766
ctx,cancel:=context.WithTimeout(context.Background(),testutil.WaitLong)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp