From cffe140aaf504b01214af972c4d95c8731357881 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Mon, 10 Feb 2025 17:59:34 +0000 Subject: [PATCH 1/8] chore: return template data for provisioner daemons --- coderd/apidoc/docs.go | 9 +++ coderd/apidoc/swagger.json | 9 +++ coderd/database/queries.sql.go | 29 ++++++--- .../database/queries/provisionerdaemons.sql | 9 ++- coderd/provisionerdaemons.go | 3 + codersdk/provisionerdaemons.go | 11 ++-- docs/reference/api/debug.md | 3 + docs/reference/api/enterprise.md | 62 ++++++++++--------- docs/reference/api/provisioning.md | 46 ++++++++------ docs/reference/api/schemas.md | 52 +++++++++++----- docs/reference/cli/provisioner_list.md | 8 +-- site/src/api/typesGenerated.ts | 3 + 12 files changed, 162 insertions(+), 82 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 5e4fcb001cc36..7af3a212410f2 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -13080,6 +13080,15 @@ const docTemplate = `{ "type": "string" } }, + "template_display_name": { + "type": "string" + }, + "template_icon": { + "type": "string" + }, + "template_name": { + "type": "string" + }, "version": { "type": "string" } diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 29658d0a5e7b9..00925dd3d344f 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -11809,6 +11809,15 @@ "type": "string" } }, + "template_display_name": { + "type": "string" + }, + "template_icon": { + "type": "string" + }, + "template_name": { + "type": "string" + }, "version": { "type": "string" } diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 7653094a22e2b..b6a14a665c09e 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -5576,7 +5576,10 @@ SELECT current_job.id AS current_job_id, current_job.job_status AS current_job_status, previous_job.id AS previous_job_id, - previous_job.job_status AS previous_job_status + previous_job.job_status AS previous_job_status, + tmpl.name AS template_name, + tmpl.display_name AS template_display_name, + tmpl.icon AS template_icon FROM provisioner_daemons pd JOIN @@ -5601,6 +5604,10 @@ LEFT JOIN LIMIT 1 ) ) +JOIN + template_versions version ON version.id = pd.version +LEFT JOIN + templates tmpl ON tmpl.id = version.template_id WHERE pd.organization_id = $2::uuid AND (COALESCE(array_length($3::uuid[], 1), 0) = 0 OR pd.id = ANY($3::uuid[])) @@ -5617,13 +5624,16 @@ type GetProvisionerDaemonsWithStatusByOrganizationParams struct { } type GetProvisionerDaemonsWithStatusByOrganizationRow struct { - ProvisionerDaemon ProvisionerDaemon `db:"provisioner_daemon" json:"provisioner_daemon"` - Status ProvisionerDaemonStatus `db:"status" json:"status"` - KeyName string `db:"key_name" json:"key_name"` - CurrentJobID uuid.NullUUID `db:"current_job_id" json:"current_job_id"` - CurrentJobStatus NullProvisionerJobStatus `db:"current_job_status" json:"current_job_status"` - PreviousJobID uuid.NullUUID `db:"previous_job_id" json:"previous_job_id"` - PreviousJobStatus NullProvisionerJobStatus `db:"previous_job_status" json:"previous_job_status"` + ProvisionerDaemon ProvisionerDaemon `db:"provisioner_daemon" json:"provisioner_daemon"` + Status ProvisionerDaemonStatus `db:"status" json:"status"` + KeyName string `db:"key_name" json:"key_name"` + CurrentJobID uuid.NullUUID `db:"current_job_id" json:"current_job_id"` + CurrentJobStatus NullProvisionerJobStatus `db:"current_job_status" json:"current_job_status"` + PreviousJobID uuid.NullUUID `db:"previous_job_id" json:"previous_job_id"` + PreviousJobStatus NullProvisionerJobStatus `db:"previous_job_status" json:"previous_job_status"` + TemplateName sql.NullString `db:"template_name" json:"template_name"` + TemplateDisplayName sql.NullString `db:"template_display_name" json:"template_display_name"` + TemplateIcon sql.NullString `db:"template_icon" json:"template_icon"` } func (q *sqlQuerier) GetProvisionerDaemonsWithStatusByOrganization(ctx context.Context, arg GetProvisionerDaemonsWithStatusByOrganizationParams) ([]GetProvisionerDaemonsWithStatusByOrganizationRow, error) { @@ -5658,6 +5668,9 @@ func (q *sqlQuerier) GetProvisionerDaemonsWithStatusByOrganization(ctx context.C &i.CurrentJobStatus, &i.PreviousJobID, &i.PreviousJobStatus, + &i.TemplateName, + &i.TemplateDisplayName, + &i.TemplateIcon, ); err != nil { return nil, err } diff --git a/coderd/database/queries/provisionerdaemons.sql b/coderd/database/queries/provisionerdaemons.sql index abf490c9ab47f..1034eb4961739 100644 --- a/coderd/database/queries/provisionerdaemons.sql +++ b/coderd/database/queries/provisionerdaemons.sql @@ -44,7 +44,10 @@ SELECT current_job.id AS current_job_id, current_job.job_status AS current_job_status, previous_job.id AS previous_job_id, - previous_job.job_status AS previous_job_status + previous_job.job_status AS previous_job_status, + tmpl.name AS template_name, + tmpl.display_name AS template_display_name, + tmpl.icon AS template_icon FROM provisioner_daemons pd JOIN @@ -69,6 +72,10 @@ LEFT JOIN LIMIT 1 ) ) +JOIN + template_versions version ON version.id = pd.version +LEFT JOIN + templates tmpl ON tmpl.id = version.template_id WHERE pd.organization_id = @organization_id::uuid AND (COALESCE(array_length(@ids::uuid[], 1), 0) = 0 OR pd.id = ANY(@ids::uuid[])) diff --git a/coderd/provisionerdaemons.go b/coderd/provisionerdaemons.go index 30add82e3e287..dad9393198201 100644 --- a/coderd/provisionerdaemons.go +++ b/coderd/provisionerdaemons.go @@ -75,6 +75,9 @@ func (api *API) provisionerDaemons(rw http.ResponseWriter, r *http.Request) { pd.Status = ptr.Ref(codersdk.ProvisionerDaemonStatus(dbDaemon.Status)) pd.CurrentJob = currentJob pd.PreviousJob = previousJob + pd.TemplateName = &dbDaemon.TemplateName.String + pd.TemplateDisplayName = &dbDaemon.TemplateDisplayName.String + pd.TemplateIcon = &dbDaemon.TemplateIcon.String return pd })) diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 9c8f131cca8a6..25f3c687c5317 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -62,10 +62,13 @@ type ProvisionerDaemon struct { Tags map[string]string `json:"tags" table:"tags"` // Optional fields. - KeyName *string `json:"key_name" table:"key name"` - Status *ProvisionerDaemonStatus `json:"status" enums:"offline,idle,busy" table:"status"` - CurrentJob *ProvisionerDaemonJob `json:"current_job" table:"current job,recursive"` - PreviousJob *ProvisionerDaemonJob `json:"previous_job" table:"previous job,recursive"` + KeyName *string `json:"key_name" table:"key name"` + Status *ProvisionerDaemonStatus `json:"status" enums:"offline,idle,busy" table:"status"` + CurrentJob *ProvisionerDaemonJob `json:"current_job" table:"current job,recursive"` + PreviousJob *ProvisionerDaemonJob `json:"previous_job" table:"previous job,recursive"` + TemplateName *string `json:"template_name" table:"template name"` + TemplateIcon *string `json:"template_icon" table:"template icon"` + TemplateDisplayName *string `json:"template_display_name" table:"template display name"` } type ProvisionerDaemonJob struct { diff --git a/docs/reference/api/debug.md b/docs/reference/api/debug.md index 63fd1aeda8f98..6dc844ba8a012 100644 --- a/docs/reference/api/debug.md +++ b/docs/reference/api/debug.md @@ -329,6 +329,9 @@ curl -X GET http://coder-server:8080/api/v2/debug/health \ "property1": "string", "property2": "string" }, + "template_display_name": "string", + "template_icon": "string", + "template_name": "string", "version": "string" }, "warnings": [ diff --git a/docs/reference/api/enterprise.md b/docs/reference/api/enterprise.md index a1a61f4a5b54a..9217186684b86 100644 --- a/docs/reference/api/enterprise.md +++ b/docs/reference/api/enterprise.md @@ -1649,6 +1649,9 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "property1": "string", "property2": "string" }, + "template_display_name": "string", + "template_icon": "string", + "template_name": "string", "version": "string" } ], @@ -1676,34 +1679,37 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi Status Code **200** -| Name | Type | Required | Restrictions | Description | -|----------------------|--------------------------------------------------------------------------------|----------|--------------|------------------| -| `[array item]` | array | false | | | -| `» daemons` | array | false | | | -| `»» api_version` | string | false | | | -| `»» created_at` | string(date-time) | false | | | -| `»» current_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | -| `»»» id` | string(uuid) | false | | | -| `»»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | | -| `»» id` | string(uuid) | false | | | -| `»» key_id` | string(uuid) | false | | | -| `»» key_name` | string | false | | Optional fields. | -| `»» last_seen_at` | string(date-time) | false | | | -| `»» name` | string | false | | | -| `»» organization_id` | string(uuid) | false | | | -| `»» previous_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | -| `»» provisioners` | array | false | | | -| `»» status` | [codersdk.ProvisionerDaemonStatus](schemas.md#codersdkprovisionerdaemonstatus) | false | | | -| `»» tags` | object | false | | | -| `»»» [any property]` | string | false | | | -| `»» version` | string | false | | | -| `» key` | [codersdk.ProvisionerKey](schemas.md#codersdkprovisionerkey) | false | | | -| `»» created_at` | string(date-time) | false | | | -| `»» id` | string(uuid) | false | | | -| `»» name` | string | false | | | -| `»» organization` | string(uuid) | false | | | -| `»» tags` | [codersdk.ProvisionerKeyTags](schemas.md#codersdkprovisionerkeytags) | false | | | -| `»»» [any property]` | string | false | | | +| Name | Type | Required | Restrictions | Description | +|----------------------------|--------------------------------------------------------------------------------|----------|--------------|------------------| +| `[array item]` | array | false | | | +| `» daemons` | array | false | | | +| `»» api_version` | string | false | | | +| `»» created_at` | string(date-time) | false | | | +| `»» current_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | +| `»»» id` | string(uuid) | false | | | +| `»»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | | +| `»» id` | string(uuid) | false | | | +| `»» key_id` | string(uuid) | false | | | +| `»» key_name` | string | false | | Optional fields. | +| `»» last_seen_at` | string(date-time) | false | | | +| `»» name` | string | false | | | +| `»» organization_id` | string(uuid) | false | | | +| `»» previous_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | +| `»» provisioners` | array | false | | | +| `»» status` | [codersdk.ProvisionerDaemonStatus](schemas.md#codersdkprovisionerdaemonstatus) | false | | | +| `»» tags` | object | false | | | +| `»»» [any property]` | string | false | | | +| `»» template_display_name` | string | false | | | +| `»» template_icon` | string | false | | | +| `»» template_name` | string | false | | | +| `»» version` | string | false | | | +| `» key` | [codersdk.ProvisionerKey](schemas.md#codersdkprovisionerkey) | false | | | +| `»» created_at` | string(date-time) | false | | | +| `»» id` | string(uuid) | false | | | +| `»» name` | string | false | | | +| `»» organization` | string(uuid) | false | | | +| `»» tags` | [codersdk.ProvisionerKeyTags](schemas.md#codersdkprovisionerkeytags) | false | | | +| `»»» [any property]` | string | false | | | #### Enumerated Values diff --git a/docs/reference/api/provisioning.md b/docs/reference/api/provisioning.md index bf3c36269fafa..bf9d0c5eaeca3 100644 --- a/docs/reference/api/provisioning.md +++ b/docs/reference/api/provisioning.md @@ -51,6 +51,9 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "property1": "string", "property2": "string" }, + "template_display_name": "string", + "template_icon": "string", + "template_name": "string", "version": "string" } ] @@ -66,26 +69,29 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi Status Code **200** -| Name | Type | Required | Restrictions | Description | -|---------------------|--------------------------------------------------------------------------------|----------|--------------|------------------| -| `[array item]` | array | false | | | -| `» api_version` | string | false | | | -| `» created_at` | string(date-time) | false | | | -| `» current_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | -| `»» id` | string(uuid) | false | | | -| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | | -| `» id` | string(uuid) | false | | | -| `» key_id` | string(uuid) | false | | | -| `» key_name` | string | false | | Optional fields. | -| `» last_seen_at` | string(date-time) | false | | | -| `» name` | string | false | | | -| `» organization_id` | string(uuid) | false | | | -| `» previous_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | -| `» provisioners` | array | false | | | -| `» status` | [codersdk.ProvisionerDaemonStatus](schemas.md#codersdkprovisionerdaemonstatus) | false | | | -| `» tags` | object | false | | | -| `»» [any property]` | string | false | | | -| `» version` | string | false | | | +| Name | Type | Required | Restrictions | Description | +|---------------------------|--------------------------------------------------------------------------------|----------|--------------|------------------| +| `[array item]` | array | false | | | +| `» api_version` | string | false | | | +| `» created_at` | string(date-time) | false | | | +| `» current_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | +| `»» id` | string(uuid) | false | | | +| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | | +| `» id` | string(uuid) | false | | | +| `» key_id` | string(uuid) | false | | | +| `» key_name` | string | false | | Optional fields. | +| `» last_seen_at` | string(date-time) | false | | | +| `» name` | string | false | | | +| `» organization_id` | string(uuid) | false | | | +| `» previous_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | +| `» provisioners` | array | false | | | +| `» status` | [codersdk.ProvisionerDaemonStatus](schemas.md#codersdkprovisionerdaemonstatus) | false | | | +| `» tags` | object | false | | | +| `»» [any property]` | string | false | | | +| `» template_display_name` | string | false | | | +| `» template_icon` | string | false | | | +| `» template_name` | string | false | | | +| `» version` | string | false | | | #### Enumerated Values diff --git a/docs/reference/api/schemas.md b/docs/reference/api/schemas.md index ebccd362c9c96..6c7354bd82658 100644 --- a/docs/reference/api/schemas.md +++ b/docs/reference/api/schemas.md @@ -4508,29 +4508,35 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith "property1": "string", "property2": "string" }, + "template_display_name": "string", + "template_icon": "string", + "template_name": "string", "version": "string" } ``` ### Properties -| Name | Type | Required | Restrictions | Description | -|--------------------|----------------------------------------------------------------------|----------|--------------|------------------| -| `api_version` | string | false | | | -| `created_at` | string | false | | | -| `current_job` | [codersdk.ProvisionerDaemonJob](#codersdkprovisionerdaemonjob) | false | | | -| `id` | string | false | | | -| `key_id` | string | false | | | -| `key_name` | string | false | | Optional fields. | -| `last_seen_at` | string | false | | | -| `name` | string | false | | | -| `organization_id` | string | false | | | -| `previous_job` | [codersdk.ProvisionerDaemonJob](#codersdkprovisionerdaemonjob) | false | | | -| `provisioners` | array of string | false | | | -| `status` | [codersdk.ProvisionerDaemonStatus](#codersdkprovisionerdaemonstatus) | false | | | -| `tags` | object | false | | | -| » `[any property]` | string | false | | | -| `version` | string | false | | | +| Name | Type | Required | Restrictions | Description | +|-------------------------|----------------------------------------------------------------------|----------|--------------|------------------| +| `api_version` | string | false | | | +| `created_at` | string | false | | | +| `current_job` | [codersdk.ProvisionerDaemonJob](#codersdkprovisionerdaemonjob) | false | | | +| `id` | string | false | | | +| `key_id` | string | false | | | +| `key_name` | string | false | | Optional fields. | +| `last_seen_at` | string | false | | | +| `name` | string | false | | | +| `organization_id` | string | false | | | +| `previous_job` | [codersdk.ProvisionerDaemonJob](#codersdkprovisionerdaemonjob) | false | | | +| `provisioners` | array of string | false | | | +| `status` | [codersdk.ProvisionerDaemonStatus](#codersdkprovisionerdaemonstatus) | false | | | +| `tags` | object | false | | | +| » `[any property]` | string | false | | | +| `template_display_name` | string | false | | | +| `template_icon` | string | false | | | +| `template_name` | string | false | | | +| `version` | string | false | | | #### Enumerated Values @@ -4830,6 +4836,9 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith "property1": "string", "property2": "string" }, + "template_display_name": "string", + "template_icon": "string", + "template_name": "string", "version": "string" } ], @@ -9848,6 +9857,9 @@ Zero means unspecified. There might be a limit, but the client need not try to r "property1": "string", "property2": "string" }, + "template_display_name": "string", + "template_icon": "string", + "template_name": "string", "version": "string" }, "warnings": [ @@ -9984,6 +9996,9 @@ Zero means unspecified. There might be a limit, but the client need not try to r "property1": "string", "property2": "string" }, + "template_display_name": "string", + "template_icon": "string", + "template_name": "string", "version": "string" }, "warnings": [ @@ -10051,6 +10066,9 @@ Zero means unspecified. There might be a limit, but the client need not try to r "property1": "string", "property2": "string" }, + "template_display_name": "string", + "template_icon": "string", + "template_name": "string", "version": "string" }, "warnings": [ diff --git a/docs/reference/cli/provisioner_list.md b/docs/reference/cli/provisioner_list.md index 11abd7dcc3d75..6bbd9c4373fd1 100644 --- a/docs/reference/cli/provisioner_list.md +++ b/docs/reference/cli/provisioner_list.md @@ -26,10 +26,10 @@ Select which organization (uuid or name) to use. ### -c, --column -| | | -|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Type | [id\|organization id\|created at\|last seen at\|name\|version\|api version\|tags\|key name\|status\|current job id\|current job status\|previous job id\|previous job status\|organization] | -| Default | name,organization,status,key name,created at,last seen at,version,tags | +| | | +|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Type | [id\|organization id\|created at\|last seen at\|name\|version\|api version\|tags\|key name\|status\|current job id\|current job status\|previous job id\|previous job status\|template name\|template icon\|template display name\|organization] | +| Default | name,organization,status,key name,created at,last seen at,version,tags | Columns to display in table output. diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 5ad807af38b6e..1c60d6ace0c43 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1585,6 +1585,9 @@ export interface ProvisionerDaemon { readonly status: ProvisionerDaemonStatus | null; readonly current_job: ProvisionerDaemonJob | null; readonly previous_job: ProvisionerDaemonJob | null; + readonly template_name: string | null; + readonly template_icon: string | null; + readonly template_display_name: string | null; } // From codersdk/provisionerdaemons.go From 89b571205339fc520a01401b7b6c53ad18ea50df Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Mon, 10 Feb 2025 18:05:36 +0000 Subject: [PATCH 2/8] Convert uuid to text --- coderd/database/queries.sql.go | 2 +- coderd/database/queries/provisionerdaemons.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index b6a14a665c09e..d1026cecfb558 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -5605,7 +5605,7 @@ LEFT JOIN ) ) JOIN - template_versions version ON version.id = pd.version + template_versions version ON version.id::text = pd.version LEFT JOIN templates tmpl ON tmpl.id = version.template_id WHERE diff --git a/coderd/database/queries/provisionerdaemons.sql b/coderd/database/queries/provisionerdaemons.sql index 1034eb4961739..23aff1717a7fc 100644 --- a/coderd/database/queries/provisionerdaemons.sql +++ b/coderd/database/queries/provisionerdaemons.sql @@ -73,7 +73,7 @@ LEFT JOIN ) ) JOIN - template_versions version ON version.id = pd.version + template_versions version ON version.id::text = pd.version LEFT JOIN templates tmpl ON tmpl.id = version.template_id WHERE From b15d1b28c49e750278c9f59113d6aae4bc993617 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Mon, 10 Feb 2025 18:14:01 +0000 Subject: [PATCH 3/8] Fix entities --- site/src/testHelpers/entities.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index a607df6bb87c9..faf542a78d26c 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -584,6 +584,9 @@ export const MockProvisioner: TypesGen.ProvisionerDaemon = { status: "idle", current_job: null, previous_job: null, + template_display_name: "Test Template", + template_icon: "/icon/code.svg", + template_name: "test-template", }; export const MockUserAuthProvisioner: TypesGen.ProvisionerDaemon = { @@ -3773,6 +3776,9 @@ export const MockHealth: TypesGen.HealthcheckReport = { current_job: null, previous_job: null, status: "idle", + template_display_name: "Test Template", + template_icon: "/icon/code.svg", + template_name: "test-template", }, warnings: [], }, @@ -3799,6 +3805,9 @@ export const MockHealth: TypesGen.HealthcheckReport = { current_job: null, previous_job: null, status: "idle", + template_display_name: "Test Template", + template_icon: "/icon/code.svg", + template_name: "test-template", }, warnings: [], }, @@ -3825,6 +3834,9 @@ export const MockHealth: TypesGen.HealthcheckReport = { current_job: null, previous_job: null, status: "idle", + template_display_name: "Test Template", + template_icon: "/icon/code.svg", + template_name: "test-template", }, warnings: [ { @@ -3982,6 +3994,9 @@ export const DeploymentHealthUnhealthy: TypesGen.HealthcheckReport = { current_job: null, previous_job: null, status: "idle", + template_display_name: "Test Template", + template_icon: "/icon/code.svg", + template_name: "test-template", }, warnings: [ { From 415bd205b018728ffd288a2ad93fcea9ec6e95be Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 11 Feb 2025 13:08:59 +0000 Subject: [PATCH 4/8] Apply PR review suggestions --- coderd/apidoc/docs.go | 18 +-- coderd/apidoc/swagger.json | 18 +-- coderd/database/queries.sql.go | 34 ++--- .../database/queries/provisionerdaemons.sql | 8 +- coderd/provisionerdaemons.go | 10 +- codersdk/provisionerdaemons.go | 18 +-- docs/reference/api/debug.md | 13 +- docs/reference/api/enterprise.md | 75 +++++------ docs/reference/api/provisioning.md | 59 ++++----- docs/reference/api/schemas.md | 118 ++++++++++-------- docs/reference/cli/provisioner_list.md | 8 +- site/src/api/typesGenerated.ts | 6 +- 12 files changed, 206 insertions(+), 179 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 7af3a212410f2..b83dc98c2a2ce 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -13080,15 +13080,6 @@ const docTemplate = `{ "type": "string" } }, - "template_display_name": { - "type": "string" - }, - "template_icon": { - "type": "string" - }, - "template_name": { - "type": "string" - }, "version": { "type": "string" } @@ -13115,6 +13106,15 @@ const docTemplate = `{ "$ref": "#/definitions/codersdk.ProvisionerJobStatus" } ] + }, + "template_display_name": { + "type": "string" + }, + "template_icon": { + "type": "string" + }, + "template_name": { + "type": "string" } } }, diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 00925dd3d344f..8c9bf31ce9e8e 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -11809,15 +11809,6 @@ "type": "string" } }, - "template_display_name": { - "type": "string" - }, - "template_icon": { - "type": "string" - }, - "template_name": { - "type": "string" - }, "version": { "type": "string" } @@ -11844,6 +11835,15 @@ "$ref": "#/definitions/codersdk.ProvisionerJobStatus" } ] + }, + "template_display_name": { + "type": "string" + }, + "template_icon": { + "type": "string" + }, + "template_name": { + "type": "string" } } }, diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index abb9059705d07..2c0adf3b186e0 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -5756,9 +5756,9 @@ SELECT current_job.job_status AS current_job_status, previous_job.id AS previous_job_id, previous_job.job_status AS previous_job_status, - tmpl.name AS template_name, - tmpl.display_name AS template_display_name, - tmpl.icon AS template_icon + tmpl.name AS current_job_template_name, + tmpl.display_name AS current_job_template_display_name, + tmpl.icon AS current_job_template_icon FROM provisioner_daemons pd JOIN @@ -5784,7 +5784,7 @@ LEFT JOIN ) ) JOIN - template_versions version ON version.id::text = pd.version + template_versions version ON version.id = (current_job.input->>'template_version_id')::uuid LEFT JOIN templates tmpl ON tmpl.id = version.template_id WHERE @@ -5803,16 +5803,16 @@ type GetProvisionerDaemonsWithStatusByOrganizationParams struct { } type GetProvisionerDaemonsWithStatusByOrganizationRow struct { - ProvisionerDaemon ProvisionerDaemon `db:"provisioner_daemon" json:"provisioner_daemon"` - Status ProvisionerDaemonStatus `db:"status" json:"status"` - KeyName string `db:"key_name" json:"key_name"` - CurrentJobID uuid.NullUUID `db:"current_job_id" json:"current_job_id"` - CurrentJobStatus NullProvisionerJobStatus `db:"current_job_status" json:"current_job_status"` - PreviousJobID uuid.NullUUID `db:"previous_job_id" json:"previous_job_id"` - PreviousJobStatus NullProvisionerJobStatus `db:"previous_job_status" json:"previous_job_status"` - TemplateName sql.NullString `db:"template_name" json:"template_name"` - TemplateDisplayName sql.NullString `db:"template_display_name" json:"template_display_name"` - TemplateIcon sql.NullString `db:"template_icon" json:"template_icon"` + ProvisionerDaemon ProvisionerDaemon `db:"provisioner_daemon" json:"provisioner_daemon"` + Status ProvisionerDaemonStatus `db:"status" json:"status"` + KeyName string `db:"key_name" json:"key_name"` + CurrentJobID uuid.NullUUID `db:"current_job_id" json:"current_job_id"` + CurrentJobStatus NullProvisionerJobStatus `db:"current_job_status" json:"current_job_status"` + PreviousJobID uuid.NullUUID `db:"previous_job_id" json:"previous_job_id"` + PreviousJobStatus NullProvisionerJobStatus `db:"previous_job_status" json:"previous_job_status"` + CurrentJobTemplateName sql.NullString `db:"current_job_template_name" json:"current_job_template_name"` + CurrentJobTemplateDisplayName sql.NullString `db:"current_job_template_display_name" json:"current_job_template_display_name"` + CurrentJobTemplateIcon sql.NullString `db:"current_job_template_icon" json:"current_job_template_icon"` } func (q *sqlQuerier) GetProvisionerDaemonsWithStatusByOrganization(ctx context.Context, arg GetProvisionerDaemonsWithStatusByOrganizationParams) ([]GetProvisionerDaemonsWithStatusByOrganizationRow, error) { @@ -5847,9 +5847,9 @@ func (q *sqlQuerier) GetProvisionerDaemonsWithStatusByOrganization(ctx context.C &i.CurrentJobStatus, &i.PreviousJobID, &i.PreviousJobStatus, - &i.TemplateName, - &i.TemplateDisplayName, - &i.TemplateIcon, + &i.CurrentJobTemplateName, + &i.CurrentJobTemplateDisplayName, + &i.CurrentJobTemplateIcon, ); err != nil { return nil, err } diff --git a/coderd/database/queries/provisionerdaemons.sql b/coderd/database/queries/provisionerdaemons.sql index 23aff1717a7fc..62024b01e88fd 100644 --- a/coderd/database/queries/provisionerdaemons.sql +++ b/coderd/database/queries/provisionerdaemons.sql @@ -45,9 +45,9 @@ SELECT current_job.job_status AS current_job_status, previous_job.id AS previous_job_id, previous_job.job_status AS previous_job_status, - tmpl.name AS template_name, - tmpl.display_name AS template_display_name, - tmpl.icon AS template_icon + tmpl.name AS current_job_template_name, + tmpl.display_name AS current_job_template_display_name, + tmpl.icon AS current_job_template_icon FROM provisioner_daemons pd JOIN @@ -73,7 +73,7 @@ LEFT JOIN ) ) JOIN - template_versions version ON version.id::text = pd.version + template_versions version ON version.id = (current_job.input->>'template_version_id')::uuid LEFT JOIN templates tmpl ON tmpl.id = version.template_id WHERE diff --git a/coderd/provisionerdaemons.go b/coderd/provisionerdaemons.go index dad9393198201..058cb8001e3df 100644 --- a/coderd/provisionerdaemons.go +++ b/coderd/provisionerdaemons.go @@ -59,8 +59,11 @@ func (api *API) provisionerDaemons(rw http.ResponseWriter, r *http.Request) { var currentJob, previousJob *codersdk.ProvisionerDaemonJob if dbDaemon.CurrentJobID.Valid { currentJob = &codersdk.ProvisionerDaemonJob{ - ID: dbDaemon.CurrentJobID.UUID, - Status: codersdk.ProvisionerJobStatus(dbDaemon.CurrentJobStatus.ProvisionerJobStatus), + ID: dbDaemon.CurrentJobID.UUID, + Status: codersdk.ProvisionerJobStatus(dbDaemon.CurrentJobStatus.ProvisionerJobStatus), + TemplateName: dbDaemon.CurrentJobTemplateName.String, + TemplateIcon: dbDaemon.CurrentJobTemplateIcon.String, + TemplateDisplayName: dbDaemon.CurrentJobTemplateDisplayName.String, } } if dbDaemon.PreviousJobID.Valid { @@ -75,9 +78,6 @@ func (api *API) provisionerDaemons(rw http.ResponseWriter, r *http.Request) { pd.Status = ptr.Ref(codersdk.ProvisionerDaemonStatus(dbDaemon.Status)) pd.CurrentJob = currentJob pd.PreviousJob = previousJob - pd.TemplateName = &dbDaemon.TemplateName.String - pd.TemplateDisplayName = &dbDaemon.TemplateDisplayName.String - pd.TemplateIcon = &dbDaemon.TemplateIcon.String return pd })) diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 25f3c687c5317..f6130f3b8235d 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -62,18 +62,18 @@ type ProvisionerDaemon struct { Tags map[string]string `json:"tags" table:"tags"` // Optional fields. - KeyName *string `json:"key_name" table:"key name"` - Status *ProvisionerDaemonStatus `json:"status" enums:"offline,idle,busy" table:"status"` - CurrentJob *ProvisionerDaemonJob `json:"current_job" table:"current job,recursive"` - PreviousJob *ProvisionerDaemonJob `json:"previous_job" table:"previous job,recursive"` - TemplateName *string `json:"template_name" table:"template name"` - TemplateIcon *string `json:"template_icon" table:"template icon"` - TemplateDisplayName *string `json:"template_display_name" table:"template display name"` + KeyName *string `json:"key_name" table:"key name"` + Status *ProvisionerDaemonStatus `json:"status" enums:"offline,idle,busy" table:"status"` + CurrentJob *ProvisionerDaemonJob `json:"current_job" table:"current job,recursive"` + PreviousJob *ProvisionerDaemonJob `json:"previous_job" table:"previous job,recursive"` } type ProvisionerDaemonJob struct { - ID uuid.UUID `json:"id" format:"uuid" table:"id"` - Status ProvisionerJobStatus `json:"status" enums:"pending,running,succeeded,canceling,canceled,failed" table:"status"` + ID uuid.UUID `json:"id" format:"uuid" table:"id"` + Status ProvisionerJobStatus `json:"status" enums:"pending,running,succeeded,canceling,canceled,failed" table:"status"` + TemplateName string `json:"template_name" table:"template name"` + TemplateIcon string `json:"template_icon" table:"template icon"` + TemplateDisplayName string `json:"template_display_name" table:"template display name"` } // MatchedProvisioners represents the number of provisioner daemons diff --git a/docs/reference/api/debug.md b/docs/reference/api/debug.md index 6dc844ba8a012..93fd3e7b638c2 100644 --- a/docs/reference/api/debug.md +++ b/docs/reference/api/debug.md @@ -309,7 +309,10 @@ curl -X GET http://coder-server:8080/api/v2/debug/health \ "created_at": "2019-08-24T14:15:22Z", "current_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", @@ -319,7 +322,10 @@ curl -X GET http://coder-server:8080/api/v2/debug/health \ "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6", "previous_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "provisioners": [ "string" @@ -329,9 +335,6 @@ curl -X GET http://coder-server:8080/api/v2/debug/health \ "property1": "string", "property2": "string" }, - "template_display_name": "string", - "template_icon": "string", - "template_name": "string", "version": "string" }, "warnings": [ diff --git a/docs/reference/api/enterprise.md b/docs/reference/api/enterprise.md index 9217186684b86..282cf20ab252d 100644 --- a/docs/reference/api/enterprise.md +++ b/docs/reference/api/enterprise.md @@ -1629,7 +1629,10 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "created_at": "2019-08-24T14:15:22Z", "current_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", @@ -1639,7 +1642,10 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6", "previous_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "provisioners": [ "string" @@ -1649,9 +1655,6 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "property1": "string", "property2": "string" }, - "template_display_name": "string", - "template_icon": "string", - "template_name": "string", "version": "string" } ], @@ -1679,37 +1682,37 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi Status Code **200** -| Name | Type | Required | Restrictions | Description | -|----------------------------|--------------------------------------------------------------------------------|----------|--------------|------------------| -| `[array item]` | array | false | | | -| `» daemons` | array | false | | | -| `»» api_version` | string | false | | | -| `»» created_at` | string(date-time) | false | | | -| `»» current_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | -| `»»» id` | string(uuid) | false | | | -| `»»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | | -| `»» id` | string(uuid) | false | | | -| `»» key_id` | string(uuid) | false | | | -| `»» key_name` | string | false | | Optional fields. | -| `»» last_seen_at` | string(date-time) | false | | | -| `»» name` | string | false | | | -| `»» organization_id` | string(uuid) | false | | | -| `»» previous_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | -| `»» provisioners` | array | false | | | -| `»» status` | [codersdk.ProvisionerDaemonStatus](schemas.md#codersdkprovisionerdaemonstatus) | false | | | -| `»» tags` | object | false | | | -| `»»» [any property]` | string | false | | | -| `»» template_display_name` | string | false | | | -| `»» template_icon` | string | false | | | -| `»» template_name` | string | false | | | -| `»» version` | string | false | | | -| `» key` | [codersdk.ProvisionerKey](schemas.md#codersdkprovisionerkey) | false | | | -| `»» created_at` | string(date-time) | false | | | -| `»» id` | string(uuid) | false | | | -| `»» name` | string | false | | | -| `»» organization` | string(uuid) | false | | | -| `»» tags` | [codersdk.ProvisionerKeyTags](schemas.md#codersdkprovisionerkeytags) | false | | | -| `»»» [any property]` | string | false | | | +| Name | Type | Required | Restrictions | Description | +|-----------------------------|--------------------------------------------------------------------------------|----------|--------------|------------------| +| `[array item]` | array | false | | | +| `» daemons` | array | false | | | +| `»» api_version` | string | false | | | +| `»» created_at` | string(date-time) | false | | | +| `»» current_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | +| `»»» id` | string(uuid) | false | | | +| `»»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | | +| `»»» template_display_name` | string | false | | | +| `»»» template_icon` | string | false | | | +| `»»» template_name` | string | false | | | +| `»» id` | string(uuid) | false | | | +| `»» key_id` | string(uuid) | false | | | +| `»» key_name` | string | false | | Optional fields. | +| `»» last_seen_at` | string(date-time) | false | | | +| `»» name` | string | false | | | +| `»» organization_id` | string(uuid) | false | | | +| `»» previous_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | +| `»» provisioners` | array | false | | | +| `»» status` | [codersdk.ProvisionerDaemonStatus](schemas.md#codersdkprovisionerdaemonstatus) | false | | | +| `»» tags` | object | false | | | +| `»»» [any property]` | string | false | | | +| `»» version` | string | false | | | +| `» key` | [codersdk.ProvisionerKey](schemas.md#codersdkprovisionerkey) | false | | | +| `»» created_at` | string(date-time) | false | | | +| `»» id` | string(uuid) | false | | | +| `»» name` | string | false | | | +| `»» organization` | string(uuid) | false | | | +| `»» tags` | [codersdk.ProvisionerKeyTags](schemas.md#codersdkprovisionerkeytags) | false | | | +| `»»» [any property]` | string | false | | | #### Enumerated Values diff --git a/docs/reference/api/provisioning.md b/docs/reference/api/provisioning.md index bf9d0c5eaeca3..a8f7fd7e83214 100644 --- a/docs/reference/api/provisioning.md +++ b/docs/reference/api/provisioning.md @@ -31,7 +31,10 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "created_at": "2019-08-24T14:15:22Z", "current_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", @@ -41,7 +44,10 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6", "previous_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "provisioners": [ "string" @@ -51,9 +57,6 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "property1": "string", "property2": "string" }, - "template_display_name": "string", - "template_icon": "string", - "template_name": "string", "version": "string" } ] @@ -69,29 +72,29 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi Status Code **200** -| Name | Type | Required | Restrictions | Description | -|---------------------------|--------------------------------------------------------------------------------|----------|--------------|------------------| -| `[array item]` | array | false | | | -| `» api_version` | string | false | | | -| `» created_at` | string(date-time) | false | | | -| `» current_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | -| `»» id` | string(uuid) | false | | | -| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | | -| `» id` | string(uuid) | false | | | -| `» key_id` | string(uuid) | false | | | -| `» key_name` | string | false | | Optional fields. | -| `» last_seen_at` | string(date-time) | false | | | -| `» name` | string | false | | | -| `» organization_id` | string(uuid) | false | | | -| `» previous_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | -| `» provisioners` | array | false | | | -| `» status` | [codersdk.ProvisionerDaemonStatus](schemas.md#codersdkprovisionerdaemonstatus) | false | | | -| `» tags` | object | false | | | -| `»» [any property]` | string | false | | | -| `» template_display_name` | string | false | | | -| `» template_icon` | string | false | | | -| `» template_name` | string | false | | | -| `» version` | string | false | | | +| Name | Type | Required | Restrictions | Description | +|----------------------------|--------------------------------------------------------------------------------|----------|--------------|------------------| +| `[array item]` | array | false | | | +| `» api_version` | string | false | | | +| `» created_at` | string(date-time) | false | | | +| `» current_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | +| `»» id` | string(uuid) | false | | | +| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | | +| `»» template_display_name` | string | false | | | +| `»» template_icon` | string | false | | | +| `»» template_name` | string | false | | | +| `» id` | string(uuid) | false | | | +| `» key_id` | string(uuid) | false | | | +| `» key_name` | string | false | | Optional fields. | +| `» last_seen_at` | string(date-time) | false | | | +| `» name` | string | false | | | +| `» organization_id` | string(uuid) | false | | | +| `» previous_job` | [codersdk.ProvisionerDaemonJob](schemas.md#codersdkprovisionerdaemonjob) | false | | | +| `» provisioners` | array | false | | | +| `» status` | [codersdk.ProvisionerDaemonStatus](schemas.md#codersdkprovisionerdaemonstatus) | false | | | +| `» tags` | object | false | | | +| `»» [any property]` | string | false | | | +| `» version` | string | false | | | #### Enumerated Values diff --git a/docs/reference/api/schemas.md b/docs/reference/api/schemas.md index 6c7354bd82658..93870a2b584e2 100644 --- a/docs/reference/api/schemas.md +++ b/docs/reference/api/schemas.md @@ -4488,7 +4488,10 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith "created_at": "2019-08-24T14:15:22Z", "current_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", @@ -4498,7 +4501,10 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6", "previous_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "provisioners": [ "string" @@ -4508,35 +4514,29 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith "property1": "string", "property2": "string" }, - "template_display_name": "string", - "template_icon": "string", - "template_name": "string", "version": "string" } ``` ### Properties -| Name | Type | Required | Restrictions | Description | -|-------------------------|----------------------------------------------------------------------|----------|--------------|------------------| -| `api_version` | string | false | | | -| `created_at` | string | false | | | -| `current_job` | [codersdk.ProvisionerDaemonJob](#codersdkprovisionerdaemonjob) | false | | | -| `id` | string | false | | | -| `key_id` | string | false | | | -| `key_name` | string | false | | Optional fields. | -| `last_seen_at` | string | false | | | -| `name` | string | false | | | -| `organization_id` | string | false | | | -| `previous_job` | [codersdk.ProvisionerDaemonJob](#codersdkprovisionerdaemonjob) | false | | | -| `provisioners` | array of string | false | | | -| `status` | [codersdk.ProvisionerDaemonStatus](#codersdkprovisionerdaemonstatus) | false | | | -| `tags` | object | false | | | -| » `[any property]` | string | false | | | -| `template_display_name` | string | false | | | -| `template_icon` | string | false | | | -| `template_name` | string | false | | | -| `version` | string | false | | | +| Name | Type | Required | Restrictions | Description | +|--------------------|----------------------------------------------------------------------|----------|--------------|------------------| +| `api_version` | string | false | | | +| `created_at` | string | false | | | +| `current_job` | [codersdk.ProvisionerDaemonJob](#codersdkprovisionerdaemonjob) | false | | | +| `id` | string | false | | | +| `key_id` | string | false | | | +| `key_name` | string | false | | Optional fields. | +| `last_seen_at` | string | false | | | +| `name` | string | false | | | +| `organization_id` | string | false | | | +| `previous_job` | [codersdk.ProvisionerDaemonJob](#codersdkprovisionerdaemonjob) | false | | | +| `provisioners` | array of string | false | | | +| `status` | [codersdk.ProvisionerDaemonStatus](#codersdkprovisionerdaemonstatus) | false | | | +| `tags` | object | false | | | +| » `[any property]` | string | false | | | +| `version` | string | false | | | #### Enumerated Values @@ -4551,16 +4551,22 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith ```json { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" } ``` ### Properties -| Name | Type | Required | Restrictions | Description | -|----------|----------------------------------------------------------------|----------|--------------|-------------| -| `id` | string | false | | | -| `status` | [codersdk.ProvisionerJobStatus](#codersdkprovisionerjobstatus) | false | | | +| Name | Type | Required | Restrictions | Description | +|-------------------------|----------------------------------------------------------------|----------|--------------|-------------| +| `id` | string | false | | | +| `status` | [codersdk.ProvisionerJobStatus](#codersdkprovisionerjobstatus) | false | | | +| `template_display_name` | string | false | | | +| `template_icon` | string | false | | | +| `template_name` | string | false | | | #### Enumerated Values @@ -4816,7 +4822,10 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith "created_at": "2019-08-24T14:15:22Z", "current_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", @@ -4826,7 +4835,10 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6", "previous_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "provisioners": [ "string" @@ -4836,9 +4848,6 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith "property1": "string", "property2": "string" }, - "template_display_name": "string", - "template_icon": "string", - "template_name": "string", "version": "string" } ], @@ -9837,7 +9846,10 @@ Zero means unspecified. There might be a limit, but the client need not try to r "created_at": "2019-08-24T14:15:22Z", "current_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", @@ -9847,7 +9859,10 @@ Zero means unspecified. There might be a limit, but the client need not try to r "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6", "previous_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "provisioners": [ "string" @@ -9857,9 +9872,6 @@ Zero means unspecified. There might be a limit, but the client need not try to r "property1": "string", "property2": "string" }, - "template_display_name": "string", - "template_icon": "string", - "template_name": "string", "version": "string" }, "warnings": [ @@ -9976,7 +9988,10 @@ Zero means unspecified. There might be a limit, but the client need not try to r "created_at": "2019-08-24T14:15:22Z", "current_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", @@ -9986,7 +10001,10 @@ Zero means unspecified. There might be a limit, but the client need not try to r "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6", "previous_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "provisioners": [ "string" @@ -9996,9 +10014,6 @@ Zero means unspecified. There might be a limit, but the client need not try to r "property1": "string", "property2": "string" }, - "template_display_name": "string", - "template_icon": "string", - "template_name": "string", "version": "string" }, "warnings": [ @@ -10046,7 +10061,10 @@ Zero means unspecified. There might be a limit, but the client need not try to r "created_at": "2019-08-24T14:15:22Z", "current_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5", @@ -10056,7 +10074,10 @@ Zero means unspecified. There might be a limit, but the client need not try to r "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6", "previous_job": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "status": "pending" + "status": "pending", + "template_display_name": "string", + "template_icon": "string", + "template_name": "string" }, "provisioners": [ "string" @@ -10066,9 +10087,6 @@ Zero means unspecified. There might be a limit, but the client need not try to r "property1": "string", "property2": "string" }, - "template_display_name": "string", - "template_icon": "string", - "template_name": "string", "version": "string" }, "warnings": [ diff --git a/docs/reference/cli/provisioner_list.md b/docs/reference/cli/provisioner_list.md index 6bbd9c4373fd1..93718ddd01ea8 100644 --- a/docs/reference/cli/provisioner_list.md +++ b/docs/reference/cli/provisioner_list.md @@ -26,10 +26,10 @@ Select which organization (uuid or name) to use. ### -c, --column -| | | -|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Type | [id\|organization id\|created at\|last seen at\|name\|version\|api version\|tags\|key name\|status\|current job id\|current job status\|previous job id\|previous job status\|template name\|template icon\|template display name\|organization] | -| Default | name,organization,status,key name,created at,last seen at,version,tags | +| | | +|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Type | [id\|organization id\|created at\|last seen at\|name\|version\|api version\|tags\|key name\|status\|current job id\|current job status\|current job template name\|current job template icon\|current job template display name\|previous job id\|previous job status\|previous job template name\|previous job template icon\|previous job template display name\|organization] | +| Default | name,organization,status,key name,created at,last seen at,version,tags | Columns to display in table output. diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 1c60d6ace0c43..8a779cca7de3f 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1585,15 +1585,15 @@ export interface ProvisionerDaemon { readonly status: ProvisionerDaemonStatus | null; readonly current_job: ProvisionerDaemonJob | null; readonly previous_job: ProvisionerDaemonJob | null; - readonly template_name: string | null; - readonly template_icon: string | null; - readonly template_display_name: string | null; } // From codersdk/provisionerdaemons.go export interface ProvisionerDaemonJob { readonly id: string; readonly status: ProvisionerJobStatus; + readonly template_name: string; + readonly template_icon: string; + readonly template_display_name: string; } // From codersdk/client.go From 9c7f873fd3fd67aa3825742392fe9e194d9eb7d2 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 11 Feb 2025 13:13:57 +0000 Subject: [PATCH 5/8] Fix --- site/src/testHelpers/entities.ts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index faf542a78d26c..a607df6bb87c9 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -584,9 +584,6 @@ export const MockProvisioner: TypesGen.ProvisionerDaemon = { status: "idle", current_job: null, previous_job: null, - template_display_name: "Test Template", - template_icon: "/icon/code.svg", - template_name: "test-template", }; export const MockUserAuthProvisioner: TypesGen.ProvisionerDaemon = { @@ -3776,9 +3773,6 @@ export const MockHealth: TypesGen.HealthcheckReport = { current_job: null, previous_job: null, status: "idle", - template_display_name: "Test Template", - template_icon: "/icon/code.svg", - template_name: "test-template", }, warnings: [], }, @@ -3805,9 +3799,6 @@ export const MockHealth: TypesGen.HealthcheckReport = { current_job: null, previous_job: null, status: "idle", - template_display_name: "Test Template", - template_icon: "/icon/code.svg", - template_name: "test-template", }, warnings: [], }, @@ -3834,9 +3825,6 @@ export const MockHealth: TypesGen.HealthcheckReport = { current_job: null, previous_job: null, status: "idle", - template_display_name: "Test Template", - template_icon: "/icon/code.svg", - template_name: "test-template", }, warnings: [ { @@ -3994,9 +3982,6 @@ export const DeploymentHealthUnhealthy: TypesGen.HealthcheckReport = { current_job: null, previous_job: null, status: "idle", - template_display_name: "Test Template", - template_icon: "/icon/code.svg", - template_name: "test-template", }, warnings: [ { From 77b8ad67d838724c74b952862a19cd7a086f38c5 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 11 Feb 2025 13:21:09 +0000 Subject: [PATCH 6/8] Update golden file --- cli/testdata/coder_provisioner_list_--help.golden | 2 +- cli/testdata/coder_provisioner_list_--output_json.golden | 5 ++++- enterprise/cli/testdata/coder_provisioner_list_--help.golden | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cli/testdata/coder_provisioner_list_--help.golden b/cli/testdata/coder_provisioner_list_--help.golden index a9943cb9da392..111eb8315b162 100644 --- a/cli/testdata/coder_provisioner_list_--help.golden +++ b/cli/testdata/coder_provisioner_list_--help.golden @@ -11,7 +11,7 @@ OPTIONS: -O, --org string, $CODER_ORGANIZATION Select which organization (uuid or name) to use. - -c, --column [id|organization id|created at|last seen at|name|version|api version|tags|key name|status|current job id|current job status|previous job id|previous job status|organization] (default: name,organization,status,key name,created at,last seen at,version,tags) + -c, --column [id|organization id|created at|last seen at|name|version|api version|tags|key name|status|current job id|current job status|current job template name|current job template icon|current job template display name|previous job id|previous job status|previous job template name|previous job template icon|previous job template display name|organization] (default: name,organization,status,key name,created at,last seen at,version,tags) Columns to display in table output. -o, --output table|json (default: table) diff --git a/cli/testdata/coder_provisioner_list_--output_json.golden b/cli/testdata/coder_provisioner_list_--output_json.golden index cd0c085a8cc4a..d6983d11e5fa3 100644 --- a/cli/testdata/coder_provisioner_list_--output_json.golden +++ b/cli/testdata/coder_provisioner_list_--output_json.golden @@ -20,7 +20,10 @@ "current_job": null, "previous_job": { "id": "======[workspace build job ID]======", - "status": "succeeded" + "status": "succeeded", + "template_name": "", + "template_icon": "", + "template_display_name": "" }, "organization_name": "Coder" } diff --git a/enterprise/cli/testdata/coder_provisioner_list_--help.golden b/enterprise/cli/testdata/coder_provisioner_list_--help.golden index a9943cb9da392..111eb8315b162 100644 --- a/enterprise/cli/testdata/coder_provisioner_list_--help.golden +++ b/enterprise/cli/testdata/coder_provisioner_list_--help.golden @@ -11,7 +11,7 @@ OPTIONS: -O, --org string, $CODER_ORGANIZATION Select which organization (uuid or name) to use. - -c, --column [id|organization id|created at|last seen at|name|version|api version|tags|key name|status|current job id|current job status|previous job id|previous job status|organization] (default: name,organization,status,key name,created at,last seen at,version,tags) + -c, --column [id|organization id|created at|last seen at|name|version|api version|tags|key name|status|current job id|current job status|current job template name|current job template icon|current job template display name|previous job id|previous job status|previous job template name|previous job template icon|previous job template display name|organization] (default: name,organization,status,key name,created at,last seen at,version,tags) Columns to display in table output. -o, --output table|json (default: table) From ecc1f40b40dc5489f3a4908b8d5f25b2f3dfa772 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 11 Feb 2025 15:51:48 +0000 Subject: [PATCH 7/8] Use LEFT JOIN --- coderd/database/queries.sql.go | 2 +- coderd/database/queries/provisionerdaemons.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 2c0adf3b186e0..0fc173cac7fdc 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -5783,7 +5783,7 @@ LEFT JOIN LIMIT 1 ) ) -JOIN +LEFT JOIN template_versions version ON version.id = (current_job.input->>'template_version_id')::uuid LEFT JOIN templates tmpl ON tmpl.id = version.template_id diff --git a/coderd/database/queries/provisionerdaemons.sql b/coderd/database/queries/provisionerdaemons.sql index 62024b01e88fd..54ca5abc925dd 100644 --- a/coderd/database/queries/provisionerdaemons.sql +++ b/coderd/database/queries/provisionerdaemons.sql @@ -72,7 +72,7 @@ LEFT JOIN LIMIT 1 ) ) -JOIN +LEFT JOIN template_versions version ON version.id = (current_job.input->>'template_version_id')::uuid LEFT JOIN templates tmpl ON tmpl.id = version.template_id From 401c9329d0487cb4dd2026ed102408cce03030dd Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 11 Feb 2025 16:37:27 +0000 Subject: [PATCH 8/8] Use COALESCE --- coderd/database/queries.sql.go | 12 ++++++------ coderd/database/queries/provisionerdaemons.sql | 6 +++--- coderd/provisionerdaemons.go | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 0fc173cac7fdc..fec7157c5c715 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -5756,9 +5756,9 @@ SELECT current_job.job_status AS current_job_status, previous_job.id AS previous_job_id, previous_job.job_status AS previous_job_status, - tmpl.name AS current_job_template_name, - tmpl.display_name AS current_job_template_display_name, - tmpl.icon AS current_job_template_icon + COALESCE(tmpl.name, ''::text) AS current_job_template_name, + COALESCE(tmpl.display_name, ''::text) AS current_job_template_display_name, + COALESCE(tmpl.icon, ''::text) AS current_job_template_icon FROM provisioner_daemons pd JOIN @@ -5810,9 +5810,9 @@ type GetProvisionerDaemonsWithStatusByOrganizationRow struct { CurrentJobStatus NullProvisionerJobStatus `db:"current_job_status" json:"current_job_status"` PreviousJobID uuid.NullUUID `db:"previous_job_id" json:"previous_job_id"` PreviousJobStatus NullProvisionerJobStatus `db:"previous_job_status" json:"previous_job_status"` - CurrentJobTemplateName sql.NullString `db:"current_job_template_name" json:"current_job_template_name"` - CurrentJobTemplateDisplayName sql.NullString `db:"current_job_template_display_name" json:"current_job_template_display_name"` - CurrentJobTemplateIcon sql.NullString `db:"current_job_template_icon" json:"current_job_template_icon"` + CurrentJobTemplateName string `db:"current_job_template_name" json:"current_job_template_name"` + CurrentJobTemplateDisplayName string `db:"current_job_template_display_name" json:"current_job_template_display_name"` + CurrentJobTemplateIcon string `db:"current_job_template_icon" json:"current_job_template_icon"` } func (q *sqlQuerier) GetProvisionerDaemonsWithStatusByOrganization(ctx context.Context, arg GetProvisionerDaemonsWithStatusByOrganizationParams) ([]GetProvisionerDaemonsWithStatusByOrganizationRow, error) { diff --git a/coderd/database/queries/provisionerdaemons.sql b/coderd/database/queries/provisionerdaemons.sql index 54ca5abc925dd..b003153ee939d 100644 --- a/coderd/database/queries/provisionerdaemons.sql +++ b/coderd/database/queries/provisionerdaemons.sql @@ -45,9 +45,9 @@ SELECT current_job.job_status AS current_job_status, previous_job.id AS previous_job_id, previous_job.job_status AS previous_job_status, - tmpl.name AS current_job_template_name, - tmpl.display_name AS current_job_template_display_name, - tmpl.icon AS current_job_template_icon + COALESCE(tmpl.name, ''::text) AS current_job_template_name, + COALESCE(tmpl.display_name, ''::text) AS current_job_template_display_name, + COALESCE(tmpl.icon, ''::text) AS current_job_template_icon FROM provisioner_daemons pd JOIN diff --git a/coderd/provisionerdaemons.go b/coderd/provisionerdaemons.go index 058cb8001e3df..bf4dfb6c4d7dd 100644 --- a/coderd/provisionerdaemons.go +++ b/coderd/provisionerdaemons.go @@ -61,9 +61,9 @@ func (api *API) provisionerDaemons(rw http.ResponseWriter, r *http.Request) { currentJob = &codersdk.ProvisionerDaemonJob{ ID: dbDaemon.CurrentJobID.UUID, Status: codersdk.ProvisionerJobStatus(dbDaemon.CurrentJobStatus.ProvisionerJobStatus), - TemplateName: dbDaemon.CurrentJobTemplateName.String, - TemplateIcon: dbDaemon.CurrentJobTemplateIcon.String, - TemplateDisplayName: dbDaemon.CurrentJobTemplateDisplayName.String, + TemplateName: dbDaemon.CurrentJobTemplateName, + TemplateIcon: dbDaemon.CurrentJobTemplateIcon, + TemplateDisplayName: dbDaemon.CurrentJobTemplateDisplayName, } } if dbDaemon.PreviousJobID.Valid {