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

Commit6960d19

Browse files
authored
feat: add provisioning timings to understand slow build times (#14274)
1 parent9c8c6a9 commit6960d19

File tree

42 files changed

+2653
-701
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2653
-701
lines changed

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2793,6 +2793,14 @@ func (q *querier) InsertProvisionerJobLogs(ctx context.Context, arg database.Ins
27932793
returnq.db.InsertProvisionerJobLogs(ctx,arg)
27942794
}
27952795

2796+
// TODO: We need to create a ProvisionerJob resource type
2797+
func (q*querier)InsertProvisionerJobTimings(ctx context.Context,arg database.InsertProvisionerJobTimingsParams) ([]database.ProvisionerJobTiming,error) {
2798+
// if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
2799+
// return nil, err
2800+
// }
2801+
returnq.db.InsertProvisionerJobTimings(ctx,arg)
2802+
}
2803+
27962804
func (q*querier)InsertProvisionerKey(ctx context.Context,arg database.InsertProvisionerKeyParams) (database.ProvisionerKey,error) {
27972805
returninsert(q.log,q.auth,rbac.ResourceProvisionerKeys.InOrg(arg.OrganizationID).WithID(arg.ID),q.db.InsertProvisionerKey)(ctx,arg)
27982806
}

‎coderd/database/dbauthz/dbauthz_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2470,6 +2470,13 @@ func (s *MethodTestSuite) TestSystemFunctions() {
24702470
JobID:j.ID,
24712471
}).Asserts(/*rbac.ResourceSystem, policy.ActionCreate*/ )
24722472
}))
2473+
s.Run("InsertProvisionerJobTimings",s.Subtest(func(db database.Store,check*expects) {
2474+
// TODO: we need to create a ProvisionerJob resource
2475+
j:=dbgen.ProvisionerJob(s.T(),db,nil, database.ProvisionerJob{})
2476+
check.Args(database.InsertProvisionerJobTimingsParams{
2477+
JobID:j.ID,
2478+
}).Asserts(/*rbac.ResourceSystem, policy.ActionCreate*/ )
2479+
}))
24732480
s.Run("UpsertProvisionerDaemon",s.Subtest(func(db database.Store,check*expects) {
24742481
org:=dbgen.Organization(s.T(),db, database.Organization{})
24752482
pd:=rbac.ResourceProvisionerDaemon.InOrg(org.ID)

‎coderd/database/dbmem/dbmem.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6652,6 +6652,15 @@ func (q *FakeQuerier) InsertProvisionerJobLogs(_ context.Context, arg database.I
66526652
returnlogs,nil
66536653
}
66546654

6655+
func (*FakeQuerier)InsertProvisionerJobTimings(_ context.Context,arg database.InsertProvisionerJobTimingsParams) ([]database.ProvisionerJobTiming,error) {
6656+
err:=validateDatabaseType(arg)
6657+
iferr!=nil {
6658+
returnnil,err
6659+
}
6660+
6661+
returnnil,nil
6662+
}
6663+
66556664
func (q*FakeQuerier)InsertProvisionerKey(_ context.Context,arg database.InsertProvisionerKeyParams) (database.ProvisionerKey,error) {
66566665
err:=validateDatabaseType(arg)
66576666
iferr!=nil {

‎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/dbtime/dbtime.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ func Now() time.Time {
99

1010
// Time returns a time compatible with Postgres. Postgres only stores dates with
1111
// microsecond precision.
12+
// FIXME(dannyk): refactor all calls to Time() to expect the input time to be modified to UTC; there are currently a
13+
//
14+
//few calls whose behavior would change subtly.
15+
//See https://github.com/coder/coder/pull/14274#discussion_r1718427461
1216
funcTime(t time.Time) time.Time {
1317
returnt.Round(time.Microsecond)
1418
}

‎coderd/database/dump.sql

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

‎coderd/database/foreign_key_constraint.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
DROPVIEW IF EXISTS provisioner_job_stats;
2+
3+
DROPTYPE IF EXISTS provisioner_job_timing_stage CASCADE;
4+
5+
DROPTABLE IF EXISTS provisioner_job_timings;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
CREATETYPEprovisioner_job_timing_stageAS ENUM (
2+
'init',
3+
'plan',
4+
'graph',
5+
'apply'
6+
);
7+
8+
CREATETABLEprovisioner_job_timings
9+
(
10+
job_id uuidNOT NULLREFERENCES provisioner_jobs (id)ON DELETE CASCADE,
11+
started_attimestamp with time zonenot null,
12+
ended_attimestamp with time zonenot null,
13+
stage provisioner_job_timing_stagenot null,
14+
sourcetextnot null,
15+
actiontextnot null,
16+
resourcetextnot null
17+
);
18+
19+
CREATEVIEWprovisioner_job_statsAS
20+
SELECTpj.idAS job_id,
21+
pj.job_status,
22+
wb.workspace_id,
23+
pj.worker_id,
24+
pj.error,
25+
pj.error_code,
26+
pj.updated_at,
27+
GREATEST(EXTRACT(EPOCHFROM (pj.started_at-pj.created_at)),0)AS queued_secs,
28+
GREATEST(EXTRACT(EPOCHFROM (pj.completed_at-pj.started_at)),0)AS completion_secs,
29+
GREATEST(EXTRACT(EPOCHFROM (pj.canceled_at-pj.started_at)),0)AS canceled_secs,
30+
GREATEST(EXTRACT(EPOCHFROM (
31+
MAX(CASE WHENpjt.stage='init'::provisioner_job_timing_stage THENpjt.ended_at END)-
32+
MIN(CASE WHENpjt.stage='init'::provisioner_job_timing_stage THENpjt.started_at END))),0)AS init_secs,
33+
GREATEST(EXTRACT(EPOCHFROM (
34+
MAX(CASE WHENpjt.stage='plan'::provisioner_job_timing_stage THENpjt.ended_at END)-
35+
MIN(CASE WHENpjt.stage='plan'::provisioner_job_timing_stage THENpjt.started_at END))),0)AS plan_secs,
36+
GREATEST(EXTRACT(EPOCHFROM (
37+
MAX(CASE WHENpjt.stage='graph'::provisioner_job_timing_stage THENpjt.ended_at END)-
38+
MIN(CASE WHENpjt.stage='graph'::provisioner_job_timing_stage THENpjt.started_at END))),0)AS graph_secs,
39+
GREATEST(EXTRACT(EPOCHFROM (
40+
MAX(CASE WHENpjt.stage='apply'::provisioner_job_timing_stage THENpjt.ended_at END)-
41+
MIN(CASE WHENpjt.stage='apply'::provisioner_job_timing_stage THENpjt.started_at END))),0)AS apply_secs
42+
FROM provisioner_jobs pj
43+
JOIN workspace_builds wbONwb.job_id=pj.id
44+
LEFT JOIN provisioner_job_timings pjtONpjt.job_id=pj.id
45+
GROUP BYpj.id,wb.workspace_id;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
INSERT INTO provisioner_job_timings (job_id, started_at, ended_at, stage, source, action, resource)
2+
VALUES
3+
-- Job 1 - init stage
4+
('424a58cb-61d6-4627-9907-613c396c4a38', NOW()- INTERVAL'1 hour 55 minutes', NOW()- INTERVAL'1 hour 50 minutes','init','source1','action1','resource1'),
5+
6+
-- Job 1 - plan stage
7+
('424a58cb-61d6-4627-9907-613c396c4a38', NOW()- INTERVAL'1 hour 50 minutes', NOW()- INTERVAL'1 hour 40 minutes','plan','source2','action2','resource2'),
8+
9+
-- Job 1 - graph stage
10+
('424a58cb-61d6-4627-9907-613c396c4a38', NOW()- INTERVAL'1 hour 40 minutes', NOW()- INTERVAL'1 hour 30 minutes','graph','source3','action3','resource3'),
11+
12+
-- Job 1 - apply stage
13+
('424a58cb-61d6-4627-9907-613c396c4a38', NOW()- INTERVAL'1 hour 30 minutes', NOW()- INTERVAL'1 hour 20 minutes','apply','source4','action4','resource4');

‎coderd/database/models.go

Lines changed: 91 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