mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
* feat: Add stage to build logs This adds a stage property to logs, and refactors the job logs cliui. It also adds tests to the cliui for build logs! * Fix comments
792 lines
12 KiB
SQL
792 lines
12 KiB
SQL
-- Database queries are generated using sqlc. See:
|
|
-- https://docs.sqlc.dev/en/latest/tutorials/getting-started-postgresql.html
|
|
--
|
|
-- Run "make gen" to generate models and query functions.
|
|
;
|
|
|
|
-- Acquires the lock for a single job that isn't started, completed,
|
|
-- canceled, and that matches an array of provisioner types.
|
|
--
|
|
-- SKIP LOCKED is used to jump over locked rows. This prevents
|
|
-- multiple provisioners from acquiring the same jobs. See:
|
|
-- https://www.postgresql.org/docs/9.5/sql-select.html#SQL-FOR-UPDATE-SHARE
|
|
-- name: AcquireProvisionerJob :one
|
|
UPDATE
|
|
provisioner_jobs
|
|
SET
|
|
started_at = @started_at,
|
|
updated_at = @started_at,
|
|
worker_id = @worker_id
|
|
WHERE
|
|
id = (
|
|
SELECT
|
|
id
|
|
FROM
|
|
provisioner_jobs AS nested
|
|
WHERE
|
|
nested.started_at IS NULL
|
|
AND nested.canceled_at IS NULL
|
|
AND nested.completed_at IS NULL
|
|
AND nested.provisioner = ANY(@types :: provisioner_type [ ])
|
|
ORDER BY
|
|
nested.created_at FOR
|
|
UPDATE
|
|
SKIP LOCKED
|
|
LIMIT
|
|
1
|
|
) RETURNING *;
|
|
|
|
-- name: DeleteParameterValueByID :exec
|
|
DELETE FROM
|
|
parameter_values
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: GetAPIKeyByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
api_keys
|
|
WHERE
|
|
id = $1
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetFileByHash :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
files
|
|
WHERE
|
|
hash = $1
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetUserByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
users
|
|
WHERE
|
|
id = $1
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetUserByEmailOrUsername :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
users
|
|
WHERE
|
|
LOWER(username) = LOWER(@username)
|
|
OR email = @email
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetUserCount :one
|
|
SELECT
|
|
COUNT(*)
|
|
FROM
|
|
users;
|
|
|
|
-- name: GetOrganizationByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
organizations
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: GetOrganizationByName :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
organizations
|
|
WHERE
|
|
LOWER(name) = LOWER(@name)
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetOrganizationsByUserID :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
organizations
|
|
WHERE
|
|
id = (
|
|
SELECT
|
|
organization_id
|
|
FROM
|
|
organization_members
|
|
WHERE
|
|
user_id = $1
|
|
);
|
|
|
|
-- name: GetOrganizationMemberByUserID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
organization_members
|
|
WHERE
|
|
organization_id = $1
|
|
AND user_id = $2
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetParameterValuesByScope :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
parameter_values
|
|
WHERE
|
|
scope = $1
|
|
AND scope_id = $2;
|
|
|
|
-- name: GetParameterValueByScopeAndName :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
parameter_values
|
|
WHERE
|
|
scope = $1
|
|
AND scope_id = $2
|
|
AND name = $3
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetProjectByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
projects
|
|
WHERE
|
|
id = $1
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetProjectsByIDs :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
projects
|
|
WHERE
|
|
id = ANY(@ids :: uuid [ ]);
|
|
|
|
-- name: GetProjectByOrganizationAndName :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
projects
|
|
WHERE
|
|
organization_id = @organization_id
|
|
AND deleted = @deleted
|
|
AND LOWER(name) = LOWER(@name)
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetProjectsByOrganization :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
projects
|
|
WHERE
|
|
organization_id = $1
|
|
AND deleted = $2;
|
|
|
|
-- name: GetParameterSchemasByJobID :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
parameter_schemas
|
|
WHERE
|
|
job_id = $1;
|
|
|
|
-- name: GetProjectVersionsByProjectID :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
project_versions
|
|
WHERE
|
|
project_id = $1 :: uuid;
|
|
|
|
-- name: GetProjectVersionByJobID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
project_versions
|
|
WHERE
|
|
job_id = $1;
|
|
|
|
-- name: GetProjectVersionByProjectIDAndName :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
project_versions
|
|
WHERE
|
|
project_id = $1
|
|
AND name = $2;
|
|
|
|
-- name: GetProjectVersionByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
project_versions
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: GetProvisionerLogsByIDBetween :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
provisioner_job_logs
|
|
WHERE
|
|
job_id = @job_id
|
|
AND (
|
|
created_at >= @created_after
|
|
OR created_at <= @created_before
|
|
)
|
|
ORDER BY
|
|
created_at;
|
|
|
|
-- name: GetProvisionerDaemonByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
provisioner_daemons
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: GetProvisionerDaemons :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
provisioner_daemons;
|
|
|
|
-- name: GetWorkspaceAgentByAuthToken :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_agents
|
|
WHERE
|
|
auth_token = $1
|
|
ORDER BY
|
|
created_at DESC;
|
|
|
|
-- name: GetWorkspaceAgentByInstanceID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_agents
|
|
WHERE
|
|
auth_instance_id = @auth_instance_id :: text
|
|
ORDER BY
|
|
created_at DESC;
|
|
|
|
-- name: GetProvisionerJobByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
provisioner_jobs
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: GetProvisionerJobsByIDs :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
provisioner_jobs
|
|
WHERE
|
|
id = ANY(@ids :: uuid [ ]);
|
|
|
|
-- name: GetWorkspaceByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspaces
|
|
WHERE
|
|
id = $1
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetWorkspacesByProjectID :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspaces
|
|
WHERE
|
|
project_id = $1
|
|
AND deleted = $2;
|
|
|
|
-- name: GetWorkspacesByUserID :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspaces
|
|
WHERE
|
|
owner_id = $1
|
|
AND deleted = $2;
|
|
|
|
-- name: GetWorkspaceByUserIDAndName :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspaces
|
|
WHERE
|
|
owner_id = @owner_id
|
|
AND deleted = @deleted
|
|
AND LOWER(name) = LOWER(@name);
|
|
|
|
-- name: GetWorkspaceOwnerCountsByProjectIDs :many
|
|
SELECT
|
|
project_id,
|
|
COUNT(DISTINCT owner_id)
|
|
FROM
|
|
workspaces
|
|
WHERE
|
|
project_id = ANY(@ids :: uuid [ ])
|
|
GROUP BY
|
|
project_id,
|
|
owner_id;
|
|
|
|
-- name: GetWorkspaceBuildByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_builds
|
|
WHERE
|
|
id = $1
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetWorkspaceBuildByJobID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_builds
|
|
WHERE
|
|
job_id = $1
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetWorkspaceBuildByWorkspaceIDAndName :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_builds
|
|
WHERE
|
|
workspace_id = $1
|
|
AND name = $2;
|
|
|
|
-- name: GetWorkspaceBuildByWorkspaceID :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_builds
|
|
WHERE
|
|
workspace_id = $1;
|
|
|
|
-- name: GetWorkspaceBuildByWorkspaceIDWithoutAfter :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_builds
|
|
WHERE
|
|
workspace_id = $1
|
|
AND after_id IS NULL
|
|
LIMIT
|
|
1;
|
|
|
|
-- name: GetWorkspaceBuildsByWorkspaceIDsWithoutAfter :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_builds
|
|
WHERE
|
|
workspace_id = ANY(@ids :: uuid [ ])
|
|
AND after_id IS NULL;
|
|
|
|
-- name: GetWorkspaceResourceByID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_resources
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: GetWorkspaceResourcesByJobID :many
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_resources
|
|
WHERE
|
|
job_id = $1;
|
|
|
|
-- name: GetWorkspaceAgentByResourceID :one
|
|
SELECT
|
|
*
|
|
FROM
|
|
workspace_agents
|
|
WHERE
|
|
resource_id = $1;
|
|
|
|
-- name: InsertAPIKey :one
|
|
INSERT INTO
|
|
api_keys (
|
|
id,
|
|
hashed_secret,
|
|
user_id,
|
|
application,
|
|
name,
|
|
last_used,
|
|
expires_at,
|
|
created_at,
|
|
updated_at,
|
|
login_type,
|
|
oidc_access_token,
|
|
oidc_refresh_token,
|
|
oidc_id_token,
|
|
oidc_expiry,
|
|
devurl_token
|
|
)
|
|
VALUES
|
|
(
|
|
$1,
|
|
$2,
|
|
$3,
|
|
$4,
|
|
$5,
|
|
$6,
|
|
$7,
|
|
$8,
|
|
$9,
|
|
$10,
|
|
$11,
|
|
$12,
|
|
$13,
|
|
$14,
|
|
$15
|
|
) RETURNING *;
|
|
|
|
-- name: InsertFile :one
|
|
INSERT INTO
|
|
files (hash, created_at, created_by, mimetype, data)
|
|
VALUES
|
|
($1, $2, $3, $4, $5) RETURNING *;
|
|
|
|
-- name: InsertProvisionerJobLogs :many
|
|
INSERT INTO
|
|
provisioner_job_logs
|
|
SELECT
|
|
unnest(@id :: uuid [ ]) AS id,
|
|
@job_id :: uuid AS job_id,
|
|
unnest(@created_at :: timestamptz [ ]) AS created_at,
|
|
unnest(@source :: log_source [ ]) as source,
|
|
unnest(@level :: log_level [ ]) as level,
|
|
unnest(@stage :: varchar(128) [ ]) as stage,
|
|
unnest(@output :: varchar(1024) [ ]) as output RETURNING *;
|
|
|
|
-- name: InsertOrganization :one
|
|
INSERT INTO
|
|
organizations (id, name, description, created_at, updated_at)
|
|
VALUES
|
|
($1, $2, $3, $4, $5) RETURNING *;
|
|
|
|
-- name: InsertOrganizationMember :one
|
|
INSERT INTO
|
|
organization_members (
|
|
organization_id,
|
|
user_id,
|
|
created_at,
|
|
updated_at,
|
|
roles
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5) RETURNING *;
|
|
|
|
-- name: InsertParameterValue :one
|
|
INSERT INTO
|
|
parameter_values (
|
|
id,
|
|
name,
|
|
created_at,
|
|
updated_at,
|
|
scope,
|
|
scope_id,
|
|
source_scheme,
|
|
source_value,
|
|
destination_scheme
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *;
|
|
|
|
-- name: InsertProject :one
|
|
INSERT INTO
|
|
projects (
|
|
id,
|
|
created_at,
|
|
updated_at,
|
|
organization_id,
|
|
name,
|
|
provisioner,
|
|
active_version_id
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6, $7) RETURNING *;
|
|
|
|
-- name: InsertWorkspaceResource :one
|
|
INSERT INTO
|
|
workspace_resources (
|
|
id,
|
|
created_at,
|
|
job_id,
|
|
transition,
|
|
address,
|
|
type,
|
|
name,
|
|
agent_id
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *;
|
|
|
|
-- name: InsertProjectVersion :one
|
|
INSERT INTO
|
|
project_versions (
|
|
id,
|
|
project_id,
|
|
organization_id,
|
|
created_at,
|
|
updated_at,
|
|
name,
|
|
description,
|
|
job_id
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *;
|
|
|
|
-- name: InsertParameterSchema :one
|
|
INSERT INTO
|
|
parameter_schemas (
|
|
id,
|
|
created_at,
|
|
job_id,
|
|
name,
|
|
description,
|
|
default_source_scheme,
|
|
default_source_value,
|
|
allow_override_source,
|
|
default_destination_scheme,
|
|
allow_override_destination,
|
|
default_refresh,
|
|
redisplay_value,
|
|
validation_error,
|
|
validation_condition,
|
|
validation_type_system,
|
|
validation_value_type
|
|
)
|
|
VALUES
|
|
(
|
|
$1,
|
|
$2,
|
|
$3,
|
|
$4,
|
|
$5,
|
|
$6,
|
|
$7,
|
|
$8,
|
|
$9,
|
|
$10,
|
|
$11,
|
|
$12,
|
|
$13,
|
|
$14,
|
|
$15,
|
|
$16
|
|
) RETURNING *;
|
|
|
|
-- name: InsertProvisionerDaemon :one
|
|
INSERT INTO
|
|
provisioner_daemons (id, created_at, organization_id, name, provisioners)
|
|
VALUES
|
|
($1, $2, $3, $4, $5) RETURNING *;
|
|
|
|
-- name: InsertProvisionerJob :one
|
|
INSERT INTO
|
|
provisioner_jobs (
|
|
id,
|
|
created_at,
|
|
updated_at,
|
|
organization_id,
|
|
initiator_id,
|
|
provisioner,
|
|
storage_method,
|
|
storage_source,
|
|
type,
|
|
input
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING *;
|
|
|
|
-- name: InsertUser :one
|
|
INSERT INTO
|
|
users (
|
|
id,
|
|
email,
|
|
name,
|
|
login_type,
|
|
revoked,
|
|
hashed_password,
|
|
created_at,
|
|
updated_at,
|
|
username
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, false, $5, $6, $7, $8) RETURNING *;
|
|
|
|
-- name: InsertWorkspace :one
|
|
INSERT INTO
|
|
workspaces (
|
|
id,
|
|
created_at,
|
|
updated_at,
|
|
owner_id,
|
|
project_id,
|
|
name
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6) RETURNING *;
|
|
|
|
-- name: InsertWorkspaceAgent :one
|
|
INSERT INTO
|
|
workspace_agents (
|
|
id,
|
|
created_at,
|
|
updated_at,
|
|
resource_id,
|
|
auth_token,
|
|
auth_instance_id,
|
|
environment_variables,
|
|
startup_script,
|
|
instance_metadata,
|
|
resource_metadata
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING *;
|
|
|
|
-- name: InsertWorkspaceBuild :one
|
|
INSERT INTO
|
|
workspace_builds (
|
|
id,
|
|
created_at,
|
|
updated_at,
|
|
workspace_id,
|
|
project_version_id,
|
|
before_id,
|
|
name,
|
|
transition,
|
|
initiator,
|
|
job_id,
|
|
provisioner_state
|
|
)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING *;
|
|
|
|
-- name: UpdateAPIKeyByID :exec
|
|
UPDATE
|
|
api_keys
|
|
SET
|
|
last_used = $2,
|
|
expires_at = $3,
|
|
oidc_access_token = $4,
|
|
oidc_refresh_token = $5,
|
|
oidc_expiry = $6
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateProjectActiveVersionByID :exec
|
|
UPDATE
|
|
projects
|
|
SET
|
|
active_version_id = $2
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateProjectDeletedByID :exec
|
|
UPDATE
|
|
projects
|
|
SET
|
|
deleted = $2
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateProjectVersionByID :exec
|
|
UPDATE
|
|
project_versions
|
|
SET
|
|
project_id = $2,
|
|
updated_at = $3
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateProvisionerDaemonByID :exec
|
|
UPDATE
|
|
provisioner_daemons
|
|
SET
|
|
updated_at = $2,
|
|
provisioners = $3
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateProvisionerJobByID :exec
|
|
UPDATE
|
|
provisioner_jobs
|
|
SET
|
|
updated_at = $2
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateProvisionerJobWithCancelByID :exec
|
|
UPDATE
|
|
provisioner_jobs
|
|
SET
|
|
canceled_at = $2
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateProvisionerJobWithCompleteByID :exec
|
|
UPDATE
|
|
provisioner_jobs
|
|
SET
|
|
updated_at = $2,
|
|
completed_at = $3,
|
|
error = $4
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateWorkspaceDeletedByID :exec
|
|
UPDATE
|
|
workspaces
|
|
SET
|
|
deleted = $2
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateWorkspaceAgentConnectionByID :exec
|
|
UPDATE
|
|
workspace_agents
|
|
SET
|
|
first_connected_at = $2,
|
|
last_connected_at = $3,
|
|
disconnected_at = $4
|
|
WHERE
|
|
id = $1;
|
|
|
|
-- name: UpdateWorkspaceBuildByID :exec
|
|
UPDATE
|
|
workspace_builds
|
|
SET
|
|
updated_at = $2,
|
|
after_id = $3,
|
|
provisioner_state = $4
|
|
WHERE
|
|
id = $1;
|