From cdc3f6a48a06e8f7264f65cb777756c20238ad4a Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 5 Dec 2023 11:07:13 +0000 Subject: [PATCH 1/5] feat(coderd): add last_seen_at and version to provisioner_daemons table --- coderd/database/dump.sql | 4 +++- .../000173_provisioner_last_seen_at.down.sql | 3 +++ .../000173_provisioner_last_seen_at.up.sql | 3 +++ coderd/database/models.go | 2 ++ coderd/database/queries.sql.go | 8 ++++++-- codersdk/provisionerdaemons.go | 2 ++ enterprise/coderd/provisionerdaemons.go | 12 +++++++----- 7 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 coderd/database/migrations/000173_provisioner_last_seen_at.down.sql create mode 100644 coderd/database/migrations/000173_provisioner_last_seen_at.up.sql diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index 9d79ae7c348da..4933a7c92cf08 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -513,7 +513,9 @@ CREATE TABLE provisioner_daemons ( name character varying(64) NOT NULL, provisioners provisioner_type[] NOT NULL, replica_id uuid, - tags jsonb DEFAULT '{}'::jsonb NOT NULL + tags jsonb DEFAULT '{}'::jsonb NOT NULL, + last_seen_at timestamp with time zone, + version text ); CREATE TABLE provisioner_job_logs ( diff --git a/coderd/database/migrations/000173_provisioner_last_seen_at.down.sql b/coderd/database/migrations/000173_provisioner_last_seen_at.down.sql new file mode 100644 index 0000000000000..cc4be4594e92c --- /dev/null +++ b/coderd/database/migrations/000173_provisioner_last_seen_at.down.sql @@ -0,0 +1,3 @@ +ALTER TABLE provisioner_daemons + DROP COLUMN last_seen_at, + DROP COLUMN version; diff --git a/coderd/database/migrations/000173_provisioner_last_seen_at.up.sql b/coderd/database/migrations/000173_provisioner_last_seen_at.up.sql new file mode 100644 index 0000000000000..0a8f0ab3fd718 --- /dev/null +++ b/coderd/database/migrations/000173_provisioner_last_seen_at.up.sql @@ -0,0 +1,3 @@ +ALTER TABLE provisioner_daemons + ADD COLUMN last_seen_at TIMESTAMP WITH TIME ZONE NULL, + ADD COLUMN version TEXT NULL; diff --git a/coderd/database/models.go b/coderd/database/models.go index c3e4fdf42fddb..c768b386964b0 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -1844,6 +1844,8 @@ type ProvisionerDaemon struct { Provisioners []ProvisionerType `db:"provisioners" json:"provisioners"` ReplicaID uuid.NullUUID `db:"replica_id" json:"replica_id"` Tags StringMap `db:"tags" json:"tags"` + LastSeenAt sql.NullTime `db:"last_seen_at" json:"last_seen_at"` + Version sql.NullString `db:"version" json:"version"` } type ProvisionerJob struct { diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index c4cc4246fdc1a..a99a1cefc9884 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -3004,7 +3004,7 @@ func (q *sqlQuerier) DeleteOldProvisionerDaemons(ctx context.Context) error { const getProvisionerDaemons = `-- name: GetProvisionerDaemons :many SELECT - id, created_at, updated_at, name, provisioners, replica_id, tags + id, created_at, updated_at, name, provisioners, replica_id, tags, last_seen_at, version FROM provisioner_daemons ` @@ -3026,6 +3026,8 @@ func (q *sqlQuerier) GetProvisionerDaemons(ctx context.Context) ([]ProvisionerDa pq.Array(&i.Provisioners), &i.ReplicaID, &i.Tags, + &i.LastSeenAt, + &i.Version, ); err != nil { return nil, err } @@ -3051,7 +3053,7 @@ INSERT INTO updated_at ) VALUES - ($1, $2, $3, $4, $5, $6) RETURNING id, created_at, updated_at, name, provisioners, replica_id, tags + ($1, $2, $3, $4, $5, $6) RETURNING id, created_at, updated_at, name, provisioners, replica_id, tags, last_seen_at, version ` type InsertProvisionerDaemonParams struct { @@ -3081,6 +3083,8 @@ func (q *sqlQuerier) InsertProvisionerDaemon(ctx context.Context, arg InsertProv pq.Array(&i.Provisioners), &i.ReplicaID, &i.Tags, + &i.LastSeenAt, + &i.Version, ) return i, err } diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 0b321e51662ab..0295f9361dcba 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -40,7 +40,9 @@ type ProvisionerDaemon struct { ID uuid.UUID `json:"id" format:"uuid"` CreatedAt time.Time `json:"created_at" format:"date-time"` UpdatedAt sql.NullTime `json:"updated_at" format:"date-time"` + LastSeenAt sql.NullTime `json:"last_seen_at,omitempty" format:"date-time"` Name string `json:"name"` + Version sql.NullString `json:"version,omitempty"` Provisioners []ProvisionerType `json:"provisioners"` Tags map[string]string `json:"tags"` } diff --git a/enterprise/coderd/provisionerdaemons.go b/enterprise/coderd/provisionerdaemons.go index e10489f45a6c7..357f4c015e0b1 100644 --- a/enterprise/coderd/provisionerdaemons.go +++ b/enterprise/coderd/provisionerdaemons.go @@ -310,11 +310,13 @@ func (api *API) provisionerDaemonServe(rw http.ResponseWriter, r *http.Request) func convertProvisionerDaemon(daemon database.ProvisionerDaemon) codersdk.ProvisionerDaemon { result := codersdk.ProvisionerDaemon{ - ID: daemon.ID, - CreatedAt: daemon.CreatedAt, - UpdatedAt: daemon.UpdatedAt, - Name: daemon.Name, - Tags: daemon.Tags, + ID: daemon.ID, + CreatedAt: daemon.CreatedAt, + UpdatedAt: daemon.UpdatedAt, + LastSeenAt: daemon.LastSeenAt, + Name: daemon.Name, + Tags: daemon.Tags, + Version: daemon.Version, } for _, provisionerType := range daemon.Provisioners { result.Provisioners = append(result.Provisioners, codersdk.ProvisionerType(provisionerType)) From 1c7c901fc9c6fc1ee7c83ef7d02bb889ec024628 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 5 Dec 2023 11:32:47 +0000 Subject: [PATCH 2/5] make gen --- coderd/apidoc/docs.go | 23 ++++++++++++++++++ coderd/apidoc/swagger.json | 23 ++++++++++++++++++ docs/api/enterprise.md | 38 +++++++++++++++++++---------- docs/api/schemas.md | 44 +++++++++++++++++++++++++++------- site/src/api/typesGenerated.ts | 4 ++++ 5 files changed, 111 insertions(+), 21 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 72003c9273f9a..9f277adb5d7f9 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -9542,6 +9542,14 @@ const docTemplate = `{ "type": "string", "format": "uuid" }, + "last_seen_at": { + "format": "date-time", + "allOf": [ + { + "$ref": "#/definitions/sql.NullTime" + } + ] + }, "name": { "type": "string" }, @@ -9564,6 +9572,9 @@ const docTemplate = `{ "$ref": "#/definitions/sql.NullTime" } ] + }, + "version": { + "$ref": "#/definitions/sql.NullString" } } }, @@ -12734,6 +12745,18 @@ const docTemplate = `{ } } }, + "sql.NullString": { + "type": "object", + "properties": { + "string": { + "type": "string" + }, + "valid": { + "description": "Valid is true if String is not NULL", + "type": "boolean" + } + } + }, "sql.NullTime": { "type": "object", "properties": { diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 477bb430fc55c..bd44a5ae8167c 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -8581,6 +8581,14 @@ "type": "string", "format": "uuid" }, + "last_seen_at": { + "format": "date-time", + "allOf": [ + { + "$ref": "#/definitions/sql.NullTime" + } + ] + }, "name": { "type": "string" }, @@ -8603,6 +8611,9 @@ "$ref": "#/definitions/sql.NullTime" } ] + }, + "version": { + "$ref": "#/definitions/sql.NullString" } } }, @@ -11607,6 +11618,18 @@ } } }, + "sql.NullString": { + "type": "object", + "properties": { + "string": { + "type": "string" + }, + "valid": { + "description": "Valid is true if String is not NULL", + "type": "boolean" + } + } + }, "sql.NullTime": { "type": "object", "properties": { diff --git a/docs/api/enterprise.md b/docs/api/enterprise.md index e25b48aedb34a..a62b047cae5cf 100644 --- a/docs/api/enterprise.md +++ b/docs/api/enterprise.md @@ -700,6 +700,10 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi { "created_at": "2019-08-24T14:15:22Z", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", + "last_seen_at": { + "time": "string", + "valid": true + }, "name": "string", "provisioners": ["string"], "tags": { @@ -709,6 +713,10 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "updated_at": { "time": "string", "valid": true + }, + "version": { + "string": "string", + "valid": true } } ] @@ -724,18 +732,24 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi Status Code **200** -| Name | Type | Required | Restrictions | Description | -| ------------------- | -------------------------------------- | -------- | ------------ | --------------------------------- | -| `[array item]` | array | false | | | -| `» created_at` | string(date-time) | false | | | -| `» id` | string(uuid) | false | | | -| `» name` | string | false | | | -| `» provisioners` | array | false | | | -| `» tags` | object | false | | | -| `»» [any property]` | string | false | | | -| `» updated_at` | [sql.NullTime](schemas.md#sqlnulltime) | false | | | -| `»» time` | string | false | | | -| `»» valid` | boolean | false | | Valid is true if Time is not NULL | +| Name | Type | Required | Restrictions | Description | +| ------------------- | ------------------------------------------ | -------- | ------------ | ----------------------------------- | +| `[array item]` | array | false | | | +| `» created_at` | string(date-time) | false | | | +| `» id` | string(uuid) | false | | | +| `» last_seen_at` | [sql.NullTime](schemas.md#sqlnulltime) | false | | | +| `»» time` | string | false | | | +| `»» valid` | boolean | false | | Valid is true if Time is not NULL | +| `» name` | string | false | | | +| `» provisioners` | array | false | | | +| `» tags` | object | false | | | +| `»» [any property]` | string | false | | | +| `» updated_at` | [sql.NullTime](schemas.md#sqlnulltime) | false | | | +| `»» time` | string | false | | | +| `»» valid` | boolean | false | | Valid is true if Time is not NULL | +| `» version` | [sql.NullString](schemas.md#sqlnullstring) | false | | | +| `»» string` | string | false | | | +| `»» valid` | boolean | false | | Valid is true if String is not NULL | To perform this operation, you must be authenticated. [Learn more](authentication.md). diff --git a/docs/api/schemas.md b/docs/api/schemas.md index cf05ec3ba3f41..168e391497de9 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -3770,6 +3770,10 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in { "created_at": "2019-08-24T14:15:22Z", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", + "last_seen_at": { + "time": "string", + "valid": true + }, "name": "string", "provisioners": ["string"], "tags": { @@ -3779,21 +3783,27 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in "updated_at": { "time": "string", "valid": true + }, + "version": { + "string": "string", + "valid": true } } ``` ### Properties -| Name | Type | Required | Restrictions | Description | -| ------------------ | ---------------------------- | -------- | ------------ | ----------- | -| `created_at` | string | false | | | -| `id` | string | false | | | -| `name` | string | false | | | -| `provisioners` | array of string | false | | | -| `tags` | object | false | | | -| » `[any property]` | string | false | | | -| `updated_at` | [sql.NullTime](#sqlnulltime) | false | | | +| Name | Type | Required | Restrictions | Description | +| ------------------ | -------------------------------- | -------- | ------------ | ----------- | +| `created_at` | string | false | | | +| `id` | string | false | | | +| `last_seen_at` | [sql.NullTime](#sqlnulltime) | false | | | +| `name` | string | false | | | +| `provisioners` | array of string | false | | | +| `tags` | object | false | | | +| » `[any property]` | string | false | | | +| `updated_at` | [sql.NullTime](#sqlnulltime) | false | | | +| `version` | [sql.NullString](#sqlnullstring) | false | | | ## codersdk.ProvisionerJob @@ -8180,6 +8190,22 @@ If the schedule is empty, the user will be updated to use the default schedule.| | `udp` | boolean | false | | a UDP STUN round trip completed | | `upnP` | string | false | | Upnp is whether UPnP appears present on the LAN. Empty means not checked. | +## sql.NullString + +```json +{ + "string": "string", + "valid": true +} +``` + +### Properties + +| Name | Type | Required | Restrictions | Description | +| -------- | ------- | -------- | ------------ | ----------------------------------- | +| `string` | string | false | | | +| `valid` | boolean | false | | Valid is true if String is not NULL | + ## sql.NullTime ```json diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 3f4763e583f79..48c10541c4c1f 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -748,7 +748,11 @@ export interface ProvisionerDaemon { readonly id: string; readonly created_at: string; readonly updated_at?: string; + readonly last_seen_at?: string; readonly name: string; + // Named type "database/sql.NullString" unknown, using "any" + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- External type + readonly version?: any; readonly provisioners: ProvisionerType[]; readonly tags: Record; } From ec1bc1d393ac5fd3d808903eabb92c4844f10517 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 5 Dec 2023 12:41:19 +0000 Subject: [PATCH 3/5] address PR comments --- coderd/apidoc/docs.go | 22 ++------- coderd/apidoc/swagger.json | 22 ++------- coderd/database/dump.sql | 2 +- .../000173_provisioner_last_seen_at.up.sql | 2 +- coderd/database/models.go | 2 +- codersdk/provisionerdaemons.go | 4 +- docs/api/enterprise.md | 42 +++++++--------- docs/api/schemas.md | 48 +++++-------------- enterprise/coderd/provisionerdaemons.go | 2 +- site/src/api/typesGenerated.ts | 4 +- 10 files changed, 42 insertions(+), 108 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 9f277adb5d7f9..49e8b238e8ffd 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -9543,12 +9543,8 @@ const docTemplate = `{ "format": "uuid" }, "last_seen_at": { - "format": "date-time", - "allOf": [ - { - "$ref": "#/definitions/sql.NullTime" - } - ] + "type": "string", + "format": "date-time" }, "name": { "type": "string" @@ -9574,7 +9570,7 @@ const docTemplate = `{ ] }, "version": { - "$ref": "#/definitions/sql.NullString" + "type": "string" } } }, @@ -12745,18 +12741,6 @@ const docTemplate = `{ } } }, - "sql.NullString": { - "type": "object", - "properties": { - "string": { - "type": "string" - }, - "valid": { - "description": "Valid is true if String is not NULL", - "type": "boolean" - } - } - }, "sql.NullTime": { "type": "object", "properties": { diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index bd44a5ae8167c..6191edfdf34df 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -8582,12 +8582,8 @@ "format": "uuid" }, "last_seen_at": { - "format": "date-time", - "allOf": [ - { - "$ref": "#/definitions/sql.NullTime" - } - ] + "type": "string", + "format": "date-time" }, "name": { "type": "string" @@ -8613,7 +8609,7 @@ ] }, "version": { - "$ref": "#/definitions/sql.NullString" + "type": "string" } } }, @@ -11618,18 +11614,6 @@ } } }, - "sql.NullString": { - "type": "object", - "properties": { - "string": { - "type": "string" - }, - "valid": { - "description": "Valid is true if String is not NULL", - "type": "boolean" - } - } - }, "sql.NullTime": { "type": "object", "properties": { diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index 4933a7c92cf08..2a439aad78144 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -515,7 +515,7 @@ CREATE TABLE provisioner_daemons ( replica_id uuid, tags jsonb DEFAULT '{}'::jsonb NOT NULL, last_seen_at timestamp with time zone, - version text + version text DEFAULT ''::text NOT NULL ); CREATE TABLE provisioner_job_logs ( diff --git a/coderd/database/migrations/000173_provisioner_last_seen_at.up.sql b/coderd/database/migrations/000173_provisioner_last_seen_at.up.sql index 0a8f0ab3fd718..2ac224dc0614c 100644 --- a/coderd/database/migrations/000173_provisioner_last_seen_at.up.sql +++ b/coderd/database/migrations/000173_provisioner_last_seen_at.up.sql @@ -1,3 +1,3 @@ ALTER TABLE provisioner_daemons ADD COLUMN last_seen_at TIMESTAMP WITH TIME ZONE NULL, - ADD COLUMN version TEXT NULL; + ADD COLUMN version TEXT NOT NULL DEFAULT ''::TEXT; diff --git a/coderd/database/models.go b/coderd/database/models.go index c768b386964b0..c5b40c66f58ab 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -1845,7 +1845,7 @@ type ProvisionerDaemon struct { ReplicaID uuid.NullUUID `db:"replica_id" json:"replica_id"` Tags StringMap `db:"tags" json:"tags"` LastSeenAt sql.NullTime `db:"last_seen_at" json:"last_seen_at"` - Version sql.NullString `db:"version" json:"version"` + Version string `db:"version" json:"version"` } type ProvisionerJob struct { diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 0295f9361dcba..1c6d488e1683d 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -40,9 +40,9 @@ type ProvisionerDaemon struct { ID uuid.UUID `json:"id" format:"uuid"` CreatedAt time.Time `json:"created_at" format:"date-time"` UpdatedAt sql.NullTime `json:"updated_at" format:"date-time"` - LastSeenAt sql.NullTime `json:"last_seen_at,omitempty" format:"date-time"` + LastSeenAt NullTime `json:"last_seen_at,omitempty" format:"date-time"` Name string `json:"name"` - Version sql.NullString `json:"version,omitempty"` + Version string `json:"version,omitempty"` Provisioners []ProvisionerType `json:"provisioners"` Tags map[string]string `json:"tags"` } diff --git a/docs/api/enterprise.md b/docs/api/enterprise.md index a62b047cae5cf..6393ffc974654 100644 --- a/docs/api/enterprise.md +++ b/docs/api/enterprise.md @@ -700,10 +700,7 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi { "created_at": "2019-08-24T14:15:22Z", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "last_seen_at": { - "time": "string", - "valid": true - }, + "last_seen_at": "2019-08-24T14:15:22Z", "name": "string", "provisioners": ["string"], "tags": { @@ -714,10 +711,7 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi "time": "string", "valid": true }, - "version": { - "string": "string", - "valid": true - } + "version": "string" } ] ``` @@ -732,24 +726,20 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi Status Code **200** -| Name | Type | Required | Restrictions | Description | -| ------------------- | ------------------------------------------ | -------- | ------------ | ----------------------------------- | -| `[array item]` | array | false | | | -| `» created_at` | string(date-time) | false | | | -| `» id` | string(uuid) | false | | | -| `» last_seen_at` | [sql.NullTime](schemas.md#sqlnulltime) | false | | | -| `»» time` | string | false | | | -| `»» valid` | boolean | false | | Valid is true if Time is not NULL | -| `» name` | string | false | | | -| `» provisioners` | array | false | | | -| `» tags` | object | false | | | -| `»» [any property]` | string | false | | | -| `» updated_at` | [sql.NullTime](schemas.md#sqlnulltime) | false | | | -| `»» time` | string | false | | | -| `»» valid` | boolean | false | | Valid is true if Time is not NULL | -| `» version` | [sql.NullString](schemas.md#sqlnullstring) | false | | | -| `»» string` | string | false | | | -| `»» valid` | boolean | false | | Valid is true if String is not NULL | +| Name | Type | Required | Restrictions | Description | +| ------------------- | -------------------------------------- | -------- | ------------ | --------------------------------- | +| `[array item]` | array | false | | | +| `» created_at` | string(date-time) | false | | | +| `» id` | string(uuid) | false | | | +| `» last_seen_at` | string(date-time) | false | | | +| `» name` | string | false | | | +| `» provisioners` | array | false | | | +| `» tags` | object | false | | | +| `»» [any property]` | string | false | | | +| `» updated_at` | [sql.NullTime](schemas.md#sqlnulltime) | false | | | +| `»» time` | string | false | | | +| `»» valid` | boolean | false | | Valid is true if Time is not NULL | +| `» version` | string | false | | | To perform this operation, you must be authenticated. [Learn more](authentication.md). diff --git a/docs/api/schemas.md b/docs/api/schemas.md index 168e391497de9..97b0e3783caff 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -3770,10 +3770,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in { "created_at": "2019-08-24T14:15:22Z", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", - "last_seen_at": { - "time": "string", - "valid": true - }, + "last_seen_at": "2019-08-24T14:15:22Z", "name": "string", "provisioners": ["string"], "tags": { @@ -3784,26 +3781,23 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in "time": "string", "valid": true }, - "version": { - "string": "string", - "valid": true - } + "version": "string" } ``` ### Properties -| Name | Type | Required | Restrictions | Description | -| ------------------ | -------------------------------- | -------- | ------------ | ----------- | -| `created_at` | string | false | | | -| `id` | string | false | | | -| `last_seen_at` | [sql.NullTime](#sqlnulltime) | false | | | -| `name` | string | false | | | -| `provisioners` | array of string | false | | | -| `tags` | object | false | | | -| » `[any property]` | string | false | | | -| `updated_at` | [sql.NullTime](#sqlnulltime) | false | | | -| `version` | [sql.NullString](#sqlnullstring) | false | | | +| Name | Type | Required | Restrictions | Description | +| ------------------ | ---------------------------- | -------- | ------------ | ----------- | +| `created_at` | string | false | | | +| `id` | string | false | | | +| `last_seen_at` | string | false | | | +| `name` | string | false | | | +| `provisioners` | array of string | false | | | +| `tags` | object | false | | | +| » `[any property]` | string | false | | | +| `updated_at` | [sql.NullTime](#sqlnulltime) | false | | | +| `version` | string | false | | | ## codersdk.ProvisionerJob @@ -8190,22 +8184,6 @@ If the schedule is empty, the user will be updated to use the default schedule.| | `udp` | boolean | false | | a UDP STUN round trip completed | | `upnP` | string | false | | Upnp is whether UPnP appears present on the LAN. Empty means not checked. | -## sql.NullString - -```json -{ - "string": "string", - "valid": true -} -``` - -### Properties - -| Name | Type | Required | Restrictions | Description | -| -------- | ------- | -------- | ------------ | ----------------------------------- | -| `string` | string | false | | | -| `valid` | boolean | false | | Valid is true if String is not NULL | - ## sql.NullTime ```json diff --git a/enterprise/coderd/provisionerdaemons.go b/enterprise/coderd/provisionerdaemons.go index 357f4c015e0b1..f0b824ecbe12f 100644 --- a/enterprise/coderd/provisionerdaemons.go +++ b/enterprise/coderd/provisionerdaemons.go @@ -313,7 +313,7 @@ func convertProvisionerDaemon(daemon database.ProvisionerDaemon) codersdk.Provis ID: daemon.ID, CreatedAt: daemon.CreatedAt, UpdatedAt: daemon.UpdatedAt, - LastSeenAt: daemon.LastSeenAt, + LastSeenAt: codersdk.NullTime{NullTime: daemon.LastSeenAt}, Name: daemon.Name, Tags: daemon.Tags, Version: daemon.Version, diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 48c10541c4c1f..7a4f6f104b933 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -750,9 +750,7 @@ export interface ProvisionerDaemon { readonly updated_at?: string; readonly last_seen_at?: string; readonly name: string; - // Named type "database/sql.NullString" unknown, using "any" - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- External type - readonly version?: any; + readonly version?: string; readonly provisioners: ProvisionerType[]; readonly tags: Record; } From 99f761099827afa08f662dc526436f600fc6640b Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 5 Dec 2023 12:46:41 +0000 Subject: [PATCH 4/5] rm omitempty on ProvisionerDaemon.Version --- codersdk/provisionerdaemons.go | 2 +- site/src/api/typesGenerated.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go index 1c6d488e1683d..ea35fdd70e4c2 100644 --- a/codersdk/provisionerdaemons.go +++ b/codersdk/provisionerdaemons.go @@ -42,7 +42,7 @@ type ProvisionerDaemon struct { UpdatedAt sql.NullTime `json:"updated_at" format:"date-time"` LastSeenAt NullTime `json:"last_seen_at,omitempty" format:"date-time"` Name string `json:"name"` - Version string `json:"version,omitempty"` + Version string `json:"version"` Provisioners []ProvisionerType `json:"provisioners"` Tags map[string]string `json:"tags"` } diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 7a4f6f104b933..c73fdfb9a472c 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -750,7 +750,7 @@ export interface ProvisionerDaemon { readonly updated_at?: string; readonly last_seen_at?: string; readonly name: string; - readonly version?: string; + readonly version: string; readonly provisioners: ProvisionerType[]; readonly tags: Record; } From df18a1379e796a594cab598f602408c2bf403892 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 5 Dec 2023 13:03:38 +0000 Subject: [PATCH 5/5] update ts --- site/src/api/api.ts | 2 ++ site/src/testHelpers/entities.ts | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/site/src/api/api.ts b/site/src/api/api.ts index 139c24e7369ad..9513ce023e449 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -78,6 +78,7 @@ export const provisioners: TypesGen.ProvisionerDaemon[] = [ created_at: "", provisioners: [], tags: {}, + version: "v2.34.5", }, { id: "cdr-basic", @@ -85,6 +86,7 @@ export const provisioners: TypesGen.ProvisionerDaemon[] = [ created_at: "", provisioners: [], tags: {}, + version: "v2.34.5", }, ]; diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 6596ed358158b..48ce84c7bcf2b 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -325,11 +325,13 @@ export const SuspendedMockUser: TypesGen.User = { }; export const MockProvisioner: TypesGen.ProvisionerDaemon = { - created_at: "", + created_at: "2022-05-17T17:39:01.382927298Z", + updated_at: "2022-05-17T17:39:01.382927298Z", id: "test-provisioner", name: "Test Provisioner", provisioners: ["echo"], tags: {}, + version: "v2.34.5", }; export const MockProvisionerJob: TypesGen.ProvisionerJob = {