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

Skip to content

Commit 77306f3

Browse files
authored
feat(coderd): add filters and fix template for provisioner daemons (#16558)
This change adds provisioner daemon ID filter to the provisioner daemons endpoint, and also implements the limiting to 50 results. Test coverage is greatly improved and template information for jobs associated to the daemon was also fixed. Updates #15084 Updates #15192 Related #16532
1 parent a69961b commit 77306f3

File tree

13 files changed

+533
-65
lines changed

13 files changed

+533
-65
lines changed

cli/testdata/coder_provisioner_list_--output_json.golden

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"previous_job": {
2222
"id": "======[workspace build job ID]======",
2323
"status": "succeeded",
24-
"template_name": "",
24+
"template_name": "test-template",
2525
"template_icon": "",
2626
"template_display_name": ""
2727
},

coderd/apidoc/docs.go

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

coderd/apidoc/swagger.json

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

coderd/database/dbmem/dbmem.go

+68-8
Original file line numberDiff line numberDiff line change
@@ -3931,7 +3931,7 @@ func (q *FakeQuerier) GetProvisionerDaemonsByOrganization(_ context.Context, arg
39313931
return daemons, nil
39323932
}
39333933

3934-
func (q *FakeQuerier) GetProvisionerDaemonsWithStatusByOrganization(_ context.Context, arg database.GetProvisionerDaemonsWithStatusByOrganizationParams) ([]database.GetProvisionerDaemonsWithStatusByOrganizationRow, error) {
3934+
func (q *FakeQuerier) GetProvisionerDaemonsWithStatusByOrganization(ctx context.Context, arg database.GetProvisionerDaemonsWithStatusByOrganizationParams) ([]database.GetProvisionerDaemonsWithStatusByOrganizationRow, error) {
39353935
err := validateDatabaseType(arg)
39363936
if err != nil {
39373937
return nil, err
@@ -3981,6 +3981,31 @@ func (q *FakeQuerier) GetProvisionerDaemonsWithStatusByOrganization(_ context.Co
39813981
status = database.ProvisionerDaemonStatusIdle
39823982
}
39833983
}
3984+
var currentTemplate database.Template
3985+
if currentJob.ID != uuid.Nil {
3986+
var input codersdk.ProvisionerJobInput
3987+
err := json.Unmarshal(currentJob.Input, &input)
3988+
if err != nil {
3989+
return nil, err
3990+
}
3991+
if input.WorkspaceBuildID != nil {
3992+
b, err := q.getWorkspaceBuildByIDNoLock(ctx, *input.WorkspaceBuildID)
3993+
if err != nil {
3994+
return nil, err
3995+
}
3996+
input.TemplateVersionID = &b.TemplateVersionID
3997+
}
3998+
if input.TemplateVersionID != nil {
3999+
v, err := q.getTemplateVersionByIDNoLock(ctx, *input.TemplateVersionID)
4000+
if err != nil {
4001+
return nil, err
4002+
}
4003+
currentTemplate, err = q.getTemplateByIDNoLock(ctx, v.TemplateID.UUID)
4004+
if err != nil {
4005+
return nil, err
4006+
}
4007+
}
4008+
}
39844009

39854010
var previousJob database.ProvisionerJob
39864011
for _, job := range q.provisionerJobs {
@@ -3997,6 +4022,31 @@ func (q *FakeQuerier) GetProvisionerDaemonsWithStatusByOrganization(_ context.Co
39974022
}
39984023
}
39994024
}
4025+
var previousTemplate database.Template
4026+
if previousJob.ID != uuid.Nil {
4027+
var input codersdk.ProvisionerJobInput
4028+
err := json.Unmarshal(previousJob.Input, &input)
4029+
if err != nil {
4030+
return nil, err
4031+
}
4032+
if input.WorkspaceBuildID != nil {
4033+
b, err := q.getWorkspaceBuildByIDNoLock(ctx, *input.WorkspaceBuildID)
4034+
if err != nil {
4035+
return nil, err
4036+
}
4037+
input.TemplateVersionID = &b.TemplateVersionID
4038+
}
4039+
if input.TemplateVersionID != nil {
4040+
v, err := q.getTemplateVersionByIDNoLock(ctx, *input.TemplateVersionID)
4041+
if err != nil {
4042+
return nil, err
4043+
}
4044+
previousTemplate, err = q.getTemplateByIDNoLock(ctx, v.TemplateID.UUID)
4045+
if err != nil {
4046+
return nil, err
4047+
}
4048+
}
4049+
}
40004050

40014051
// Get the provisioner key name
40024052
var keyName string
@@ -4008,20 +4058,30 @@ func (q *FakeQuerier) GetProvisionerDaemonsWithStatusByOrganization(_ context.Co
40084058
}
40094059

40104060
rows = append(rows, database.GetProvisionerDaemonsWithStatusByOrganizationRow{
4011-
ProvisionerDaemon: daemon,
4012-
Status: status,
4013-
KeyName: keyName,
4014-
CurrentJobID: uuid.NullUUID{UUID: currentJob.ID, Valid: currentJob.ID != uuid.Nil},
4015-
CurrentJobStatus: database.NullProvisionerJobStatus{ProvisionerJobStatus: currentJob.JobStatus, Valid: currentJob.ID != uuid.Nil},
4016-
PreviousJobID: uuid.NullUUID{UUID: previousJob.ID, Valid: previousJob.ID != uuid.Nil},
4017-
PreviousJobStatus: database.NullProvisionerJobStatus{ProvisionerJobStatus: previousJob.JobStatus, Valid: previousJob.ID != uuid.Nil},
4061+
ProvisionerDaemon: daemon,
4062+
Status: status,
4063+
KeyName: keyName,
4064+
CurrentJobID: uuid.NullUUID{UUID: currentJob.ID, Valid: currentJob.ID != uuid.Nil},
4065+
CurrentJobStatus: database.NullProvisionerJobStatus{ProvisionerJobStatus: currentJob.JobStatus, Valid: currentJob.ID != uuid.Nil},
4066+
CurrentJobTemplateName: currentTemplate.Name,
4067+
CurrentJobTemplateDisplayName: currentTemplate.DisplayName,
4068+
CurrentJobTemplateIcon: currentTemplate.Icon,
4069+
PreviousJobID: uuid.NullUUID{UUID: previousJob.ID, Valid: previousJob.ID != uuid.Nil},
4070+
PreviousJobStatus: database.NullProvisionerJobStatus{ProvisionerJobStatus: previousJob.JobStatus, Valid: previousJob.ID != uuid.Nil},
4071+
PreviousJobTemplateName: previousTemplate.Name,
4072+
PreviousJobTemplateDisplayName: previousTemplate.DisplayName,
4073+
PreviousJobTemplateIcon: previousTemplate.Icon,
40184074
})
40194075
}
40204076

40214077
slices.SortFunc(rows, func(a, b database.GetProvisionerDaemonsWithStatusByOrganizationRow) int {
40224078
return a.ProvisionerDaemon.CreatedAt.Compare(b.ProvisionerDaemon.CreatedAt)
40234079
})
40244080

4081+
if arg.Limit.Valid && arg.Limit.Int32 > 0 && len(rows) > int(arg.Limit.Int32) {
4082+
rows = rows[:arg.Limit.Int32]
4083+
}
4084+
40254085
return rows, nil
40264086
}
40274087

coderd/database/querier.go

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

coderd/database/queries.sql.go

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

coderd/database/queries/provisionerdaemons.sql

+23-6
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,12 @@ SELECT
4545
current_job.job_status AS current_job_status,
4646
previous_job.id AS previous_job_id,
4747
previous_job.job_status AS previous_job_status,
48-
COALESCE(tmpl.name, ''::text) AS current_job_template_name,
49-
COALESCE(tmpl.display_name, ''::text) AS current_job_template_display_name,
50-
COALESCE(tmpl.icon, ''::text) AS current_job_template_icon
48+
COALESCE(current_template.name, ''::text) AS current_job_template_name,
49+
COALESCE(current_template.display_name, ''::text) AS current_job_template_display_name,
50+
COALESCE(current_template.icon, ''::text) AS current_job_template_icon,
51+
COALESCE(previous_template.name, ''::text) AS previous_job_template_name,
52+
COALESCE(previous_template.display_name, ''::text) AS previous_job_template_display_name,
53+
COALESCE(previous_template.icon, ''::text) AS previous_job_template_icon
5154
FROM
5255
provisioner_daemons pd
5356
JOIN
@@ -72,16 +75,30 @@ LEFT JOIN
7275
LIMIT 1
7376
)
7477
)
78+
-- Current job information.
7579
LEFT JOIN
76-
template_versions version ON version.id = (current_job.input->>'template_version_id')::uuid
80+
workspace_builds current_build ON current_build.id = CASE WHEN current_job.input ? 'workspace_build_id' THEN (current_job.input->>'workspace_build_id')::uuid END
7781
LEFT JOIN
78-
templates tmpl ON tmpl.id = version.template_id
82+
-- We should always have a template version, either explicitly or implicitly via workspace build.
83+
template_versions current_version ON current_version.id = CASE WHEN current_job.input ? 'template_version_id' THEN (current_job.input->>'template_version_id')::uuid ELSE current_build.template_version_id END
84+
LEFT JOIN
85+
templates current_template ON current_template.id = current_version.template_id
86+
-- Previous job information.
87+
LEFT JOIN
88+
workspace_builds previous_build ON previous_build.id = CASE WHEN previous_job.input ? 'workspace_build_id' THEN (previous_job.input->>'workspace_build_id')::uuid END
89+
LEFT JOIN
90+
-- We should always have a template version, either explicitly or implicitly via workspace build.
91+
template_versions previous_version ON previous_version.id = CASE WHEN previous_job.input ? 'template_version_id' THEN (previous_job.input->>'template_version_id')::uuid ELSE previous_build.template_version_id END
92+
LEFT JOIN
93+
templates previous_template ON previous_template.id = previous_version.template_id
7994
WHERE
8095
pd.organization_id = @organization_id::uuid
8196
AND (COALESCE(array_length(@ids::uuid[], 1), 0) = 0 OR pd.id = ANY(@ids::uuid[]))
8297
AND (@tags::tagset = 'null'::tagset OR provisioner_tagset_contains(pd.tags::tagset, @tags::tagset))
8398
ORDER BY
84-
pd.created_at ASC;
99+
pd.created_at ASC
100+
LIMIT
101+
sqlc.narg('limit')::int;
85102

86103
-- name: DeleteOldProvisionerDaemons :exec
87104
-- Delete provisioner daemons that have been created at least a week ago

0 commit comments

Comments
 (0)