feat(coderd): add last_seen_at and version to provisioner_daemons table (#11033)

Related to #10676

- Adds columns last_seen_at and version to provisioner_daemons table
- Adds the above to codersdk.ProvisionerDaemons struct
This commit is contained in:
Cian Johnston 2023-12-05 13:54:38 +00:00 committed by GitHub
parent dd1f8331de
commit 5fad611020
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 57 additions and 11 deletions

7
coderd/apidoc/docs.go generated
View File

@ -9542,6 +9542,10 @@ const docTemplate = `{
"type": "string",
"format": "uuid"
},
"last_seen_at": {
"type": "string",
"format": "date-time"
},
"name": {
"type": "string"
},
@ -9564,6 +9568,9 @@ const docTemplate = `{
"$ref": "#/definitions/sql.NullTime"
}
]
},
"version": {
"type": "string"
}
}
},

View File

@ -8581,6 +8581,10 @@
"type": "string",
"format": "uuid"
},
"last_seen_at": {
"type": "string",
"format": "date-time"
},
"name": {
"type": "string"
},
@ -8603,6 +8607,9 @@
"$ref": "#/definitions/sql.NullTime"
}
]
},
"version": {
"type": "string"
}
}
},

View File

@ -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 DEFAULT ''::text NOT NULL
);
CREATE TABLE provisioner_job_logs (

View File

@ -0,0 +1,3 @@
ALTER TABLE provisioner_daemons
DROP COLUMN last_seen_at,
DROP COLUMN version;

View File

@ -0,0 +1,3 @@
ALTER TABLE provisioner_daemons
ADD COLUMN last_seen_at TIMESTAMP WITH TIME ZONE NULL,
ADD COLUMN version TEXT NOT NULL DEFAULT ''::TEXT;

View File

@ -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 string `db:"version" json:"version"`
}
type ProvisionerJob struct {

View File

@ -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
}

View File

@ -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 NullTime `json:"last_seen_at,omitempty" format:"date-time"`
Name string `json:"name"`
Version string `json:"version"`
Provisioners []ProvisionerType `json:"provisioners"`
Tags map[string]string `json:"tags"`
}

View File

@ -700,6 +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": "2019-08-24T14:15:22Z",
"name": "string",
"provisioners": ["string"],
"tags": {
@ -709,7 +710,8 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
"updated_at": {
"time": "string",
"valid": true
}
},
"version": "string"
}
]
```
@ -729,6 +731,7 @@ Status Code **200**
| `[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 | | |
@ -736,6 +739,7 @@ Status Code **200**
| `» 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).

6
docs/api/schemas.md generated
View File

@ -3770,6 +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": "2019-08-24T14:15:22Z",
"name": "string",
"provisioners": ["string"],
"tags": {
@ -3779,7 +3780,8 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in
"updated_at": {
"time": "string",
"valid": true
}
},
"version": "string"
}
```
@ -3789,11 +3791,13 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in
| ------------------ | ---------------------------- | -------- | ------------ | ----------- |
| `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

View File

@ -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: codersdk.NullTime{NullTime: daemon.LastSeenAt},
Name: daemon.Name,
Tags: daemon.Tags,
Version: daemon.Version,
}
for _, provisionerType := range daemon.Provisioners {
result.Provisioners = append(result.Provisioners, codersdk.ProvisionerType(provisionerType))

View File

@ -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",
},
];

View File

@ -748,7 +748,9 @@ export interface ProvisionerDaemon {
readonly id: string;
readonly created_at: string;
readonly updated_at?: string;
readonly last_seen_at?: string;
readonly name: string;
readonly version: string;
readonly provisioners: ProvisionerType[];
readonly tags: Record<string, string>;
}

View File

@ -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 = {