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

Commit705b9cc

Browse files
feat(coderd): add workspace timings endpoint (#14648)
1 parentc330af0 commit705b9cc

File tree

19 files changed

+640
-2
lines changed

19 files changed

+640
-2
lines changed

‎coderd/apidoc/docs.go

Lines changed: 75 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/apidoc/swagger.json

Lines changed: 71 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/coderd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,7 @@ func New(options *Options) *API {
11571157
r.Post("/",api.postWorkspaceAgentPortShare)
11581158
r.Delete("/",api.deleteWorkspaceAgentPortShare)
11591159
})
1160+
r.Get("/timings",api.workspaceTimings)
11601161
})
11611162
})
11621163
r.Route("/workspacebuilds/{workspacebuild}",func(r chi.Router) {

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1791,6 +1791,10 @@ func (q *querier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (data
17911791
returnjob,nil
17921792
}
17931793

1794+
func (q*querier)GetProvisionerJobTimingsByJobID(ctx context.Context,jobID uuid.UUID) ([]database.ProvisionerJobTiming,error) {
1795+
returnq.db.GetProvisionerJobTimingsByJobID(ctx,jobID)
1796+
}
1797+
17941798
// TODO: we need to add a provisioner job resource
17951799
func (q*querier)GetProvisionerJobsByIDs(ctx context.Context,ids []uuid.UUID) ([]database.ProvisionerJob,error) {
17961800
// if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {

‎coderd/database/dbauthz/dbauthz_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,23 @@ 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+
jobID:=uuid.New()
556+
j:=dbgen.ProvisionerJob(s.T(),db,nil, database.ProvisionerJob{ID:jobID})
557+
t:=dbgen.ProvisionerJobTimings(s.T(),db, database.InsertProvisionerJobTimingsParams{
558+
JobID:jobID,
559+
StartedAt: []time.Time{dbtime.Now(),dbtime.Now()},
560+
EndedAt: []time.Time{dbtime.Now(),dbtime.Now()},
561+
Stage: []database.ProvisionerJobTimingStage{
562+
database.ProvisionerJobTimingStageInit,
563+
database.ProvisionerJobTimingStagePlan,
564+
},
565+
Source: []string{"source1","source2"},
566+
Action: []string{"action1","action2"},
567+
Resource: []string{"resource1","resource2"},
568+
})
569+
check.Args(j.ID).Asserts().Returns(t)
570+
}))
554571
s.Run("GetProvisionerJobsByIDs",s.Subtest(func(db database.Store,check*expects) {
555572
a:=dbgen.ProvisionerJob(s.T(),db,nil, database.ProvisionerJob{})
556573
b:=dbgen.ProvisionerJob(s.T(),db,nil, database.ProvisionerJob{})

‎coderd/database/dbgen/dbgen.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,12 @@ func CustomRole(t testing.TB, db database.Store, seed database.CustomRole) datab
893893
returnrole
894894
}
895895

896+
funcProvisionerJobTimings(t testing.TB,db database.Store,seed database.InsertProvisionerJobTimingsParams) []database.ProvisionerJobTiming {
897+
timings,err:=db.InsertProvisionerJobTimings(genCtx,seed)
898+
require.NoError(t,err,"insert provisioner job timings")
899+
returntimings
900+
}
901+
896902
funcmust[Vany](vV,errerror)V {
897903
iferr!=nil {
898904
panic(err)

‎coderd/database/dbmem/dbmem.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ type data struct {
195195
workspaces []database.Workspace
196196
workspaceProxies []database.WorkspaceProxy
197197
customRoles []database.CustomRole
198+
provisionerJobTimings []database.ProvisionerJobTiming
198199
runtimeConfigmap[string]string
199200
// Locks is a map of lock names. Any keys within the map are currently
200201
// locked.
@@ -3290,6 +3291,26 @@ func (q *FakeQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (
32903291
returnq.getProvisionerJobByIDNoLock(ctx,id)
32913292
}
32923293

3294+
func (q*FakeQuerier)GetProvisionerJobTimingsByJobID(_ context.Context,jobID uuid.UUID) ([]database.ProvisionerJobTiming,error) {
3295+
q.mutex.RLock()
3296+
deferq.mutex.RUnlock()
3297+
3298+
timings:=make([]database.ProvisionerJobTiming,0)
3299+
for_,timing:=rangeq.provisionerJobTimings {
3300+
iftiming.JobID==jobID {
3301+
timings=append(timings,timing)
3302+
}
3303+
}
3304+
iflen(timings)==0 {
3305+
returnnil,sql.ErrNoRows
3306+
}
3307+
sort.Slice(timings,func(i,jint)bool {
3308+
returntimings[i].StartedAt.Before(timings[j].StartedAt)
3309+
})
3310+
3311+
returntimings,nil
3312+
}
3313+
32933314
func (q*FakeQuerier)GetProvisionerJobsByIDs(_ context.Context,ids []uuid.UUID) ([]database.ProvisionerJob,error) {
32943315
q.mutex.RLock()
32953316
deferq.mutex.RUnlock()
@@ -6783,13 +6804,31 @@ func (q *FakeQuerier) InsertProvisionerJobLogs(_ context.Context, arg database.I
67836804
returnlogs,nil
67846805
}
67856806

6786-
func (*FakeQuerier)InsertProvisionerJobTimings(_ context.Context,arg database.InsertProvisionerJobTimingsParams) ([]database.ProvisionerJobTiming,error) {
6807+
func (q*FakeQuerier)InsertProvisionerJobTimings(_ context.Context,arg database.InsertProvisionerJobTimingsParams) ([]database.ProvisionerJobTiming,error) {
67876808
err:=validateDatabaseType(arg)
67886809
iferr!=nil {
67896810
returnnil,err
67906811
}
67916812

6792-
returnnil,nil
6813+
q.mutex.Lock()
6814+
deferq.mutex.Unlock()
6815+
6816+
insertedTimings:=make([]database.ProvisionerJobTiming,0,len(arg.StartedAt))
6817+
fori:=rangearg.StartedAt {
6818+
timing:= database.ProvisionerJobTiming{
6819+
JobID:arg.JobID,
6820+
StartedAt:arg.StartedAt[i],
6821+
EndedAt:arg.EndedAt[i],
6822+
Stage:arg.Stage[i],
6823+
Source:arg.Source[i],
6824+
Action:arg.Action[i],
6825+
Resource:arg.Resource[i],
6826+
}
6827+
q.provisionerJobTimings=append(q.provisionerJobTimings,timing)
6828+
insertedTimings=append(insertedTimings,timing)
6829+
}
6830+
6831+
returninsertedTimings,nil
67936832
}
67946833

67956834
func (q*FakeQuerier)InsertProvisionerKey(_ context.Context,arg database.InsertProvisionerKeyParams) (database.ProvisionerKey,error) {

‎coderd/database/dbmetrics/dbmetrics.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/dbmock/dbmock.go

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

‎coderd/database/querier.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp