Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9c8ecb8

Browse files
feat(coderd): return agent script timings (#14923)
Add the agent script timings into the `/workspacebuilds/:workspacebuild/timings` response. Close #14876
1 parent 79d24d2 commit 9c8ecb8

23 files changed

+978
-292
lines changed

coderd/agentapi/scripts.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func (s *ScriptsAPI) ScriptCompleted(ctx context.Context, req *agentproto.Worksp
4747

4848
//nolint:gocritic // We need permissions to write to the DB here and we are in the context of the agent.
4949
ctx = dbauthz.AsProvisionerd(ctx)
50-
err = s.Database.InsertWorkspaceAgentScriptTimings(ctx, database.InsertWorkspaceAgentScriptTimingsParams{
50+
_, err = s.Database.InsertWorkspaceAgentScriptTimings(ctx, database.InsertWorkspaceAgentScriptTimingsParams{
5151
ScriptID: scriptID,
5252
Stage: stage,
5353
Status: status,

coderd/apidoc/docs.go

+78-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

+74-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/coderd.go

+1
Original file line numberDiff line numberDiff line change
@@ -1173,6 +1173,7 @@ func New(options *Options) *API {
11731173
r.Get("/parameters", api.workspaceBuildParameters)
11741174
r.Get("/resources", api.workspaceBuildResourcesDeprecated)
11751175
r.Get("/state", api.workspaceBuildState)
1176+
r.Get("/timings", api.workspaceBuildTimings)
11761177
})
11771178
r.Route("/authcheck", func(r chi.Router) {
11781179
r.Use(apiKeyMiddleware)

coderd/database/dbauthz/dbauthz.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -2421,6 +2421,13 @@ func (q *querier) GetWorkspaceAgentPortShare(ctx context.Context, arg database.G
24212421
return q.db.GetWorkspaceAgentPortShare(ctx, arg)
24222422
}
24232423

2424+
func (q *querier) GetWorkspaceAgentScriptTimingsByBuildID(ctx context.Context, id uuid.UUID) ([]database.GetWorkspaceAgentScriptTimingsByBuildIDRow, error) {
2425+
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {
2426+
return nil, err
2427+
}
2428+
return q.db.GetWorkspaceAgentScriptTimingsByBuildID(ctx, id)
2429+
}
2430+
24242431
func (q *querier) GetWorkspaceAgentScriptsByAgentIDs(ctx context.Context, ids []uuid.UUID) ([]database.WorkspaceAgentScript, error) {
24252432
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {
24262433
return nil, err
@@ -3034,9 +3041,9 @@ func (q *querier) InsertWorkspaceAgentMetadata(ctx context.Context, arg database
30343041
return q.db.InsertWorkspaceAgentMetadata(ctx, arg)
30353042
}
30363043

3037-
func (q *querier) InsertWorkspaceAgentScriptTimings(ctx context.Context, arg database.InsertWorkspaceAgentScriptTimingsParams) error {
3044+
func (q *querier) InsertWorkspaceAgentScriptTimings(ctx context.Context, arg database.InsertWorkspaceAgentScriptTimingsParams) (database.WorkspaceAgentScriptTiming, error) {
30383045
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
3039-
return err
3046+
return database.WorkspaceAgentScriptTiming{}, err
30403047
}
30413048
return q.db.InsertWorkspaceAgentScriptTimings(ctx, arg)
30423049
}

coderd/database/dbauthz/dbauthz_test.go

+40-20
Original file line numberDiff line numberDiff line change
@@ -551,26 +551,6 @@ func (s *MethodTestSuite) TestProvisionerJob() {
551551
check.Args(database.UpdateProvisionerJobWithCancelByIDParams{ID: j.ID}).
552552
Asserts(v.RBACObject(tpl), []policy.Action{policy.ActionRead, policy.ActionUpdate}).Returns()
553553
}))
554-
s.Run("GetProvisionerJobTimingsByJobID", s.Subtest(func(db database.Store, check *expects) {
555-
w := dbgen.Workspace(s.T(), db, database.Workspace{})
556-
j := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{
557-
Type: database.ProvisionerJobTypeWorkspaceBuild,
558-
})
559-
_ = dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{JobID: j.ID, WorkspaceID: w.ID})
560-
t := dbgen.ProvisionerJobTimings(s.T(), db, database.InsertProvisionerJobTimingsParams{
561-
JobID: j.ID,
562-
StartedAt: []time.Time{dbtime.Now(), dbtime.Now()},
563-
EndedAt: []time.Time{dbtime.Now(), dbtime.Now()},
564-
Stage: []database.ProvisionerJobTimingStage{
565-
database.ProvisionerJobTimingStageInit,
566-
database.ProvisionerJobTimingStagePlan,
567-
},
568-
Source: []string{"source1", "source2"},
569-
Action: []string{"action1", "action2"},
570-
Resource: []string{"resource1", "resource2"},
571-
})
572-
check.Args(j.ID).Asserts(w, policy.ActionRead).Returns(t)
573-
}))
574554
s.Run("GetProvisionerJobsByIDs", s.Subtest(func(db database.Store, check *expects) {
575555
a := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{})
576556
b := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{})
@@ -2867,6 +2847,46 @@ func (s *MethodTestSuite) TestSystemFunctions() {
28672847
LastGeneratedAt: dbtime.Now(),
28682848
}).Asserts(rbac.ResourceSystem, policy.ActionCreate)
28692849
}))
2850+
s.Run("GetProvisionerJobTimingsByJobID", s.Subtest(func(db database.Store, check *expects) {
2851+
w := dbgen.Workspace(s.T(), db, database.Workspace{})
2852+
j := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{
2853+
Type: database.ProvisionerJobTypeWorkspaceBuild,
2854+
})
2855+
b := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{JobID: j.ID, WorkspaceID: w.ID})
2856+
t := dbgen.ProvisionerJobTimings(s.T(), db, b, 2)
2857+
check.Args(j.ID).Asserts(w, policy.ActionRead).Returns(t)
2858+
}))
2859+
s.Run("GetWorkspaceAgentScriptTimingsByBuildID", s.Subtest(func(db database.Store, check *expects) {
2860+
workspace := dbgen.Workspace(s.T(), db, database.Workspace{})
2861+
job := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{
2862+
Type: database.ProvisionerJobTypeWorkspaceBuild,
2863+
})
2864+
build := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{JobID: job.ID, WorkspaceID: workspace.ID})
2865+
resource := dbgen.WorkspaceResource(s.T(), db, database.WorkspaceResource{
2866+
JobID: build.JobID,
2867+
})
2868+
agent := dbgen.WorkspaceAgent(s.T(), db, database.WorkspaceAgent{
2869+
ResourceID: resource.ID,
2870+
})
2871+
script := dbgen.WorkspaceAgentScript(s.T(), db, database.WorkspaceAgentScript{
2872+
WorkspaceAgentID: agent.ID,
2873+
})
2874+
timing := dbgen.WorkspaceAgentScriptTiming(s.T(), db, database.WorkspaceAgentScriptTiming{
2875+
ScriptID: script.ID,
2876+
})
2877+
rows := []database.GetWorkspaceAgentScriptTimingsByBuildIDRow{
2878+
{
2879+
StartedAt: timing.StartedAt,
2880+
EndedAt: timing.EndedAt,
2881+
Stage: timing.Stage,
2882+
ScriptID: timing.ScriptID,
2883+
ExitCode: timing.ExitCode,
2884+
Status: timing.Status,
2885+
DisplayName: script.DisplayName,
2886+
},
2887+
}
2888+
check.Args(build.ID).Asserts(rbac.ResourceSystem, policy.ActionRead).Returns(rows)
2889+
}))
28702890
}
28712891

28722892
func (s *MethodTestSuite) TestNotifications() {

0 commit comments

Comments
 (0)