From 40e6878e40269656075d492040dd9c7894a0d775 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sun, 9 Oct 2022 19:42:06 +0000 Subject: [PATCH 1/5] Hide build logs older than 30 days --- coderd/database/databasefake/databasefake.go | 9 ++++--- coderd/database/querier.go | 4 +-- coderd/database/queries.sql.go | 27 ++++++++++--------- coderd/database/queries/workspacebuilds.sql | 5 ++-- coderd/workspaceapps_test.go | 15 +++++------ coderd/workspacebuilds.go | 23 +++++++++++++--- coderd/workspacebuilds_test.go | 13 +++++++++ codersdk/client.go | 9 ++++--- codersdk/workspaces.go | 8 ++++-- site/src/api/api.ts | 3 ++- site/src/api/typesGenerated.ts | 1 + .../xServices/workspace/workspaceXService.ts | 8 +++++- 12 files changed, 86 insertions(+), 39 deletions(-) diff --git a/coderd/database/databasefake/databasefake.go b/coderd/database/databasefake/databasefake.go index 7a07597b2c0af..a9f24f9c40658 100644 --- a/coderd/database/databasefake/databasefake.go +++ b/coderd/database/databasefake/databasefake.go @@ -821,14 +821,17 @@ func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context, return returnBuilds, nil } -func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceID(_ context.Context, - params database.GetWorkspaceBuildByWorkspaceIDParams, +func (q *fakeQuerier) GetWorkspaceBuildsByWorkspaceID(_ context.Context, + params database.GetWorkspaceBuildsByWorkspaceIDParams, ) ([]database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() history := make([]database.WorkspaceBuild, 0) for _, workspaceBuild := range q.workspaceBuilds { + if workspaceBuild.CreatedAt.Before(params.Since) { + continue + } if workspaceBuild.WorkspaceID.String() == params.WorkspaceID.String() { history = append(history, workspaceBuild) } @@ -877,7 +880,7 @@ func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceID(_ context.Context, return history, nil } -func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(_ context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) { +func (q *fakeQuerier) GetWorkspaceBuildsByWorkspaceIDAndBuildNumber(_ context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() diff --git a/coderd/database/querier.go b/coderd/database/querier.go index c802485666edc..e453975e703b9 100644 --- a/coderd/database/querier.go +++ b/coderd/database/querier.go @@ -88,8 +88,8 @@ type querier interface { GetWorkspaceAppsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceApp, error) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (WorkspaceBuild, error) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (WorkspaceBuild, error) - GetWorkspaceBuildByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDParams) ([]WorkspaceBuild, error) - GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) + GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDParams) ([]WorkspaceBuild, error) + GetWorkspaceBuildsByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) GetWorkspaceBuildsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceBuild, error) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (Workspace, error) GetWorkspaceByOwnerIDAndName(ctx context.Context, arg GetWorkspaceByOwnerIDAndNameParams) (Workspace, error) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 2d1dc70b59956..0bfb9d60d0ab7 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -4368,18 +4368,19 @@ func (q *sqlQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UU return i, err } -const getWorkspaceBuildByWorkspaceID = `-- name: GetWorkspaceBuildByWorkspaceID :many +const getWorkspaceBuildsByWorkspaceID = `-- name: GetWorkspaceBuildsByWorkspaceID :many SELECT id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE workspace_builds.workspace_id = $1 + AND workspace_builds.created_at > $2 AND CASE -- This allows using the last element on a page as effectively a cursor. -- This is an important option for scripts that need to paginate without -- duplicating or missing data. - WHEN $2 :: uuid != '00000000-00000000-00000000-00000000' THEN ( + WHEN $3 :: uuid != '00000000-00000000-00000000-00000000' THEN ( -- The pagination cursor is the last ID of the previous page. -- The query is ordered by the build_number field, so select all -- rows after the cursor. @@ -4389,28 +4390,30 @@ WHERE FROM workspace_builds WHERE - id = $2 + id = $3 ) ) ELSE true END ORDER BY - build_number desc OFFSET $3 + build_number desc OFFSET $4 LIMIT -- A null limit means "no limit", so 0 means return all - NULLIF($4 :: int, 0) + NULLIF($5 :: int, 0) ` -type GetWorkspaceBuildByWorkspaceIDParams struct { +type GetWorkspaceBuildsByWorkspaceIDParams struct { WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` + Since time.Time `db:"since" json:"since"` AfterID uuid.UUID `db:"after_id" json:"after_id"` OffsetOpt int32 `db:"offset_opt" json:"offset_opt"` LimitOpt int32 `db:"limit_opt" json:"limit_opt"` } -func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDParams) ([]WorkspaceBuild, error) { - rows, err := q.db.QueryContext(ctx, getWorkspaceBuildByWorkspaceID, +func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDParams) ([]WorkspaceBuild, error) { + rows, err := q.db.QueryContext(ctx, getWorkspaceBuildsByWorkspaceID, arg.WorkspaceID, + arg.Since, arg.AfterID, arg.OffsetOpt, arg.LimitOpt, @@ -4449,7 +4452,7 @@ func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceID(ctx context.Context, arg Get return items, nil } -const getWorkspaceBuildByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one +const getWorkspaceBuildsByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildsByWorkspaceIDAndBuildNumber :one SELECT id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM @@ -4459,13 +4462,13 @@ WHERE AND build_number = $2 ` -type GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams struct { +type GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams struct { WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` BuildNumber int32 `db:"build_number" json:"build_number"` } -func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) { - row := q.db.QueryRowContext(ctx, getWorkspaceBuildByWorkspaceIDAndBuildNumber, arg.WorkspaceID, arg.BuildNumber) +func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) { + row := q.db.QueryRowContext(ctx, getWorkspaceBuildsByWorkspaceIDAndBuildNumber, arg.WorkspaceID, arg.BuildNumber) var i WorkspaceBuild err := row.Scan( &i.ID, diff --git a/coderd/database/queries/workspacebuilds.sql b/coderd/database/queries/workspacebuilds.sql index 550354d63ef2d..e90d14e0970f8 100644 --- a/coderd/database/queries/workspacebuilds.sql +++ b/coderd/database/queries/workspacebuilds.sql @@ -21,7 +21,7 @@ LIMIT -- name: GetWorkspaceBuildsCreatedAfter :many SELECT * FROM workspace_builds WHERE created_at > $1; --- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one +-- name: GetWorkspaceBuildsByWorkspaceIDAndBuildNumber :one SELECT * FROM @@ -30,13 +30,14 @@ WHERE workspace_id = $1 AND build_number = $2; --- name: GetWorkspaceBuildByWorkspaceID :many +-- name: GetWorkspaceBuildsByWorkspaceID :many SELECT * FROM workspace_builds WHERE workspace_builds.workspace_id = $1 + AND workspace_builds.created_at > @since AND CASE -- This allows using the last element on a page as effectively a cursor. -- This is an important option for scripts that need to paginate without diff --git a/coderd/workspaceapps_test.go b/coderd/workspaceapps_test.go index b1a090aba3431..d4c22aba4c0d8 100644 --- a/coderd/workspaceapps_test.go +++ b/coderd/workspaceapps_test.go @@ -299,10 +299,9 @@ func TestWorkspaceApplicationAuth(t *testing.T) { require.Equal(t, u.String(), gotLocation.Query().Get("redirect_uri")) // Load the application auth-redirect endpoint. - qp := codersdk.WithQueryParams(map[string]string{ - "redirect_uri": u.String(), - }) - resp, err = client.Request(ctx, http.MethodGet, "/api/v2/applications/auth-redirect", nil, qp) + resp, err = client.Request(ctx, http.MethodGet, "/api/v2/applications/auth-redirect", nil, codersdk.WithQueryParam( + "redirect_uri", u.String(), + )) require.NoError(t, err) defer resp.Body.Close() @@ -434,15 +433,13 @@ func TestWorkspaceApplicationAuth(t *testing.T) { c := c t.Run(c.name, func(t *testing.T) { t.Parallel() - qp := map[string]string{} - if c.redirectURI != "" { - qp["redirect_uri"] = c.redirectURI - } ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) defer cancel() - resp, err := client.Request(ctx, http.MethodGet, "/api/v2/applications/auth-redirect", nil, codersdk.WithQueryParams(qp)) + resp, err := client.Request(ctx, http.MethodGet, "/api/v2/applications/auth-redirect", nil, + codersdk.WithQueryParam("redirect_uri", c.redirectURI), + ) require.NoError(t, err) defer resp.Body.Close() require.Equal(t, http.StatusBadRequest, resp.StatusCode) diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index 6ece8d379b153..06b120858c970 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -8,6 +8,7 @@ import ( "fmt" "net/http" "strconv" + "time" "github.com/go-chi/chi/v5" "github.com/google/uuid" @@ -75,6 +76,21 @@ func (api *API) workspaceBuilds(rw http.ResponseWriter, r *http.Request) { return } + var since time.Time + + sinceParam := r.URL.Query().Get("since") + if sinceParam != "" { + var err error + since, err = time.Parse(time.RFC3339, sinceParam) + if err != nil { + httpapi.Write(r.Context(), rw, http.StatusBadRequest, codersdk.Response{ + Message: "bad `since` format, must be RFC3339", + Detail: err.Error(), + }) + return + } + } + var workspaceBuilds []database.WorkspaceBuild // Ensure all db calls happen in the same tx err := api.Database.InTx(func(store database.Store) error { @@ -97,13 +113,14 @@ func (api *API) workspaceBuilds(rw http.ResponseWriter, r *http.Request) { } } - req := database.GetWorkspaceBuildByWorkspaceIDParams{ + req := database.GetWorkspaceBuildsByWorkspaceIDParams{ WorkspaceID: workspace.ID, AfterID: paginationParams.AfterID, OffsetOpt: int32(paginationParams.Offset), LimitOpt: int32(paginationParams.Limit), + Since: database.Time(since), } - workspaceBuilds, err = store.GetWorkspaceBuildByWorkspaceID(ctx, req) + workspaceBuilds, err = store.GetWorkspaceBuildsByWorkspaceID(ctx, req) if xerrors.Is(err, sql.ErrNoRows) { err = nil } @@ -185,7 +202,7 @@ func (api *API) workspaceBuildByBuildNumber(rw http.ResponseWriter, r *http.Requ return } - workspaceBuild, err := api.Database.GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx, database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams{ + workspaceBuild, err := api.Database.GetWorkspaceBuildsByWorkspaceIDAndBuildNumber(ctx, database.GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams{ WorkspaceID: workspace.ID, BuildNumber: int32(buildNumber), }) diff --git a/coderd/workspacebuilds_test.go b/coderd/workspacebuilds_test.go index 1fbcd76b53d7c..9e35010345536 100644 --- a/coderd/workspacebuilds_test.go +++ b/coderd/workspacebuilds_test.go @@ -163,6 +163,19 @@ func TestWorkspaceBuilds(t *testing.T) { require.Equal(t, int32(1), builds[0].BuildNumber) require.Equal(t, user.Username, builds[0].InitiatorUsername) require.NoError(t, err) + + // Test since + builds, err = client.WorkspaceBuilds(ctx, + codersdk.WorkspaceBuildsRequest{WorkspaceID: workspace.ID, Since: database.Now().Add(time.Minute)}, + ) + require.NoError(t, err) + require.Len(t, builds, 0) + + builds, err = client.WorkspaceBuilds(ctx, + codersdk.WorkspaceBuildsRequest{WorkspaceID: workspace.ID, Since: database.Now().Add(-time.Hour)}, + ) + require.NoError(t, err) + require.Len(t, builds, 1) }) t.Run("PaginateNonExistentRow", func(t *testing.T) { diff --git a/codersdk/client.go b/codersdk/client.go index afc37396feaa5..0c3d89a92843b 100644 --- a/codersdk/client.go +++ b/codersdk/client.go @@ -44,12 +44,13 @@ type Client struct { type RequestOption func(*http.Request) -func WithQueryParams(params map[string]string) RequestOption { +func WithQueryParam(key, value string) RequestOption { return func(r *http.Request) { - q := r.URL.Query() - for k, v := range params { - q.Add(k, v) + if value == "" { + return } + q := r.URL.Query() + q.Add(key, value) r.URL.RawQuery = q.Encode() } } diff --git a/codersdk/workspaces.go b/codersdk/workspaces.go index a9a2c68e9c5c7..3b20b0b4999bc 100644 --- a/codersdk/workspaces.go +++ b/codersdk/workspaces.go @@ -90,11 +90,15 @@ func (c *Client) getWorkspace(ctx context.Context, id uuid.UUID, opts ...Request type WorkspaceBuildsRequest struct { WorkspaceID uuid.UUID Pagination + Since time.Time } func (c *Client) WorkspaceBuilds(ctx context.Context, req WorkspaceBuildsRequest) ([]WorkspaceBuild, error) { - res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaces/%s/builds", req.WorkspaceID), - nil, req.Pagination.asRequestOption()) + res, err := c.Request( + ctx, http.MethodGet, + fmt.Sprintf("/api/v2/workspaces/%s/builds", req.WorkspaceID), + nil, req.Pagination.asRequestOption(), WithQueryParam("since", req.Since.Format(time.RFC3339)), + ) if err != nil { return nil, err } diff --git a/site/src/api/api.ts b/site/src/api/api.ts index ed03fb145a0ef..9564b324167d2 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -406,9 +406,10 @@ export const regenerateUserSSHKey = async (userId = "me"): Promise => { const response = await axios.get( - `/api/v2/workspaces/${workspaceId}/builds`, + `/api/v2/workspaces/${workspaceId}/builds?since=${since.toISOString()}`, ) return response.data } diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index b14154e0969e2..182ccd98a3b1e 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -645,6 +645,7 @@ export interface WorkspaceBuild { // From codersdk/workspaces.go export interface WorkspaceBuildsRequest extends Pagination { readonly WorkspaceID: string + readonly Since: string } // From codersdk/workspaces.go diff --git a/site/src/xServices/workspace/workspaceXService.ts b/site/src/xServices/workspace/workspaceXService.ts index e8cee0d67f6e5..0594dcedd1643 100644 --- a/site/src/xServices/workspace/workspaceXService.ts +++ b/site/src/xServices/workspace/workspaceXService.ts @@ -1,4 +1,5 @@ import { getErrorMessage } from "api/errors" +import dayjs from "dayjs" import { workspaceScheduleBannerMachine } from "xServices/workspaceSchedule/workspaceScheduleBannerXService" import { assign, createMachine, send } from "xstate" import * as API from "../../api/api" @@ -670,7 +671,12 @@ export const workspaceMachine = createMachine( }, getBuilds: async (context) => { if (context.workspace) { - return await API.getWorkspaceBuilds(context.workspace.id) + // For now, we only retrieve the last month of builds to minimize + // page bloat. We should add pagination in the future. + return await API.getWorkspaceBuilds( + context.workspace.id, + dayjs().add(-30, "day").toDate(), + ) } else { throw Error("Cannot get builds without id") } From 06421e9861a14ce8d7d52643fe707e1e613e7aad Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sun, 9 Oct 2022 19:44:18 +0000 Subject: [PATCH 2/5] fixup! Hide build logs older than 30 days --- coderd/database/databasefake/databasefake.go | 2 +- coderd/database/querier.go | 2 +- coderd/database/queries.sql.go | 8 ++++---- coderd/database/queries/workspacebuilds.sql | 2 +- coderd/workspacebuilds.go | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/coderd/database/databasefake/databasefake.go b/coderd/database/databasefake/databasefake.go index a9f24f9c40658..7b0c3515eb4cc 100644 --- a/coderd/database/databasefake/databasefake.go +++ b/coderd/database/databasefake/databasefake.go @@ -880,7 +880,7 @@ func (q *fakeQuerier) GetWorkspaceBuildsByWorkspaceID(_ context.Context, return history, nil } -func (q *fakeQuerier) GetWorkspaceBuildsByWorkspaceIDAndBuildNumber(_ context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) { +func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(_ context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) { q.mutex.RLock() defer q.mutex.RUnlock() diff --git a/coderd/database/querier.go b/coderd/database/querier.go index e453975e703b9..ea35264250ea9 100644 --- a/coderd/database/querier.go +++ b/coderd/database/querier.go @@ -89,7 +89,7 @@ type querier interface { GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (WorkspaceBuild, error) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (WorkspaceBuild, error) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDParams) ([]WorkspaceBuild, error) - GetWorkspaceBuildsByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) + GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) GetWorkspaceBuildsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceBuild, error) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (Workspace, error) GetWorkspaceByOwnerIDAndName(ctx context.Context, arg GetWorkspaceByOwnerIDAndNameParams) (Workspace, error) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 0bfb9d60d0ab7..61dad0dac09e9 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -4452,7 +4452,7 @@ func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg Ge return items, nil } -const getWorkspaceBuildsByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildsByWorkspaceIDAndBuildNumber :one +const GetWorkspaceBuildByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one SELECT id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM @@ -4462,13 +4462,13 @@ WHERE AND build_number = $2 ` -type GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams struct { +type GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams struct { WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` BuildNumber int32 `db:"build_number" json:"build_number"` } -func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) { - row := q.db.QueryRowContext(ctx, getWorkspaceBuildsByWorkspaceIDAndBuildNumber, arg.WorkspaceID, arg.BuildNumber) +func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) { + row := q.db.QueryRowContext(ctx, GetWorkspaceBuildByWorkspaceIDAndBuildNumber, arg.WorkspaceID, arg.BuildNumber) var i WorkspaceBuild err := row.Scan( &i.ID, diff --git a/coderd/database/queries/workspacebuilds.sql b/coderd/database/queries/workspacebuilds.sql index e90d14e0970f8..cdb7d0e130f07 100644 --- a/coderd/database/queries/workspacebuilds.sql +++ b/coderd/database/queries/workspacebuilds.sql @@ -21,7 +21,7 @@ LIMIT -- name: GetWorkspaceBuildsCreatedAfter :many SELECT * FROM workspace_builds WHERE created_at > $1; --- name: GetWorkspaceBuildsByWorkspaceIDAndBuildNumber :one +-- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one SELECT * FROM diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index 06b120858c970..e044bae5a4784 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -202,7 +202,7 @@ func (api *API) workspaceBuildByBuildNumber(rw http.ResponseWriter, r *http.Requ return } - workspaceBuild, err := api.Database.GetWorkspaceBuildsByWorkspaceIDAndBuildNumber(ctx, database.GetWorkspaceBuildsByWorkspaceIDAndBuildNumberParams{ + workspaceBuild, err := api.Database.GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx, database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams{ WorkspaceID: workspace.ID, BuildNumber: int32(buildNumber), }) From 33bd1786f8c018b4c4de44cd9989eee07eafc731 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sun, 9 Oct 2022 19:51:27 +0000 Subject: [PATCH 3/5] fixup! Hide build logs older than 30 days --- coderd/database/querier.go | 2 +- coderd/database/queries.sql.go | 70 ++++++++++----------- provisionerd/proto/provisionerd_drpc.pb.go | 2 +- provisionersdk/proto/provisioner_drpc.pb.go | 2 +- 4 files changed, 38 insertions(+), 38 deletions(-) diff --git a/coderd/database/querier.go b/coderd/database/querier.go index ea35264250ea9..35dd5bf27dff8 100644 --- a/coderd/database/querier.go +++ b/coderd/database/querier.go @@ -88,8 +88,8 @@ type querier interface { GetWorkspaceAppsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceApp, error) GetWorkspaceBuildByID(ctx context.Context, id uuid.UUID) (WorkspaceBuild, error) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (WorkspaceBuild, error) - GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDParams) ([]WorkspaceBuild, error) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) + GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg GetWorkspaceBuildsByWorkspaceIDParams) ([]WorkspaceBuild, error) GetWorkspaceBuildsCreatedAfter(ctx context.Context, createdAt time.Time) ([]WorkspaceBuild, error) GetWorkspaceByID(ctx context.Context, id uuid.UUID) (Workspace, error) GetWorkspaceByOwnerIDAndName(ctx context.Context, arg GetWorkspaceByOwnerIDAndNameParams) (Workspace, error) diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 61dad0dac09e9..e2c6b978ffe93 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -4368,6 +4368,41 @@ func (q *sqlQuerier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UU return i, err } +const getWorkspaceBuildByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one +SELECT + id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason +FROM + workspace_builds +WHERE + workspace_id = $1 + AND build_number = $2 +` + +type GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams struct { + WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` + BuildNumber int32 `db:"build_number" json:"build_number"` +} + +func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) { + row := q.db.QueryRowContext(ctx, getWorkspaceBuildByWorkspaceIDAndBuildNumber, arg.WorkspaceID, arg.BuildNumber) + var i WorkspaceBuild + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.WorkspaceID, + &i.TemplateVersionID, + &i.BuildNumber, + &i.Transition, + &i.InitiatorID, + &i.ProvisionerState, + &i.JobID, + &i.Deadline, + &i.Reason, + ) + return i, err +} + const getWorkspaceBuildsByWorkspaceID = `-- name: GetWorkspaceBuildsByWorkspaceID :many SELECT id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason @@ -4452,41 +4487,6 @@ func (q *sqlQuerier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg Ge return items, nil } -const GetWorkspaceBuildByWorkspaceIDAndBuildNumber = `-- name: GetWorkspaceBuildByWorkspaceIDAndBuildNumber :one -SELECT - id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason -FROM - workspace_builds -WHERE - workspace_id = $1 - AND build_number = $2 -` - -type GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams struct { - WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"` - BuildNumber int32 `db:"build_number" json:"build_number"` -} - -func (q *sqlQuerier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (WorkspaceBuild, error) { - row := q.db.QueryRowContext(ctx, GetWorkspaceBuildByWorkspaceIDAndBuildNumber, arg.WorkspaceID, arg.BuildNumber) - var i WorkspaceBuild - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.WorkspaceID, - &i.TemplateVersionID, - &i.BuildNumber, - &i.Transition, - &i.InitiatorID, - &i.ProvisionerState, - &i.JobID, - &i.Deadline, - &i.Reason, - ) - return i, err -} - const getWorkspaceBuildsCreatedAfter = `-- name: GetWorkspaceBuildsCreatedAfter :many SELECT id, created_at, updated_at, workspace_id, template_version_id, build_number, transition, initiator_id, provisioner_state, job_id, deadline, reason FROM workspace_builds WHERE created_at > $1 ` diff --git a/provisionerd/proto/provisionerd_drpc.pb.go b/provisionerd/proto/provisionerd_drpc.pb.go index 646f855eabc70..7ede95dcad75d 100644 --- a/provisionerd/proto/provisionerd_drpc.pb.go +++ b/provisionerd/proto/provisionerd_drpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-drpc. DO NOT EDIT. -// protoc-gen-go-drpc version: v0.0.26 +// protoc-gen-go-drpc version: v0.0.33-0.20220923152156-858cfad9e41d // source: provisionerd/proto/provisionerd.proto package proto diff --git a/provisionersdk/proto/provisioner_drpc.pb.go b/provisionersdk/proto/provisioner_drpc.pb.go index c990f6f645b7f..9931b1d9a3d33 100644 --- a/provisionersdk/proto/provisioner_drpc.pb.go +++ b/provisionersdk/proto/provisioner_drpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-drpc. DO NOT EDIT. -// protoc-gen-go-drpc version: v0.0.26 +// protoc-gen-go-drpc version: v0.0.33-0.20220923152156-858cfad9e41d // source: provisionersdk/proto/provisioner.proto package proto From e397206baa56fffa74787922320450f4abb88b19 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sun, 9 Oct 2022 19:52:06 +0000 Subject: [PATCH 4/5] fixup! Hide build logs older than 30 days --- provisionersdk/proto/provisioner_drpc.pb.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provisionersdk/proto/provisioner_drpc.pb.go b/provisionersdk/proto/provisioner_drpc.pb.go index 9931b1d9a3d33..c990f6f645b7f 100644 --- a/provisionersdk/proto/provisioner_drpc.pb.go +++ b/provisionersdk/proto/provisioner_drpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-drpc. DO NOT EDIT. -// protoc-gen-go-drpc version: v0.0.33-0.20220923152156-858cfad9e41d +// protoc-gen-go-drpc version: v0.0.26 // source: provisionersdk/proto/provisioner.proto package proto From bff88412360ceb75c7c239433347fb950c017b5d Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Sun, 9 Oct 2022 19:53:01 +0000 Subject: [PATCH 5/5] fixup! Hide build logs older than 30 days --- provisionerd/proto/provisionerd_drpc.pb.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provisionerd/proto/provisionerd_drpc.pb.go b/provisionerd/proto/provisionerd_drpc.pb.go index 7ede95dcad75d..646f855eabc70 100644 --- a/provisionerd/proto/provisionerd_drpc.pb.go +++ b/provisionerd/proto/provisionerd_drpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-drpc. DO NOT EDIT. -// protoc-gen-go-drpc version: v0.0.33-0.20220923152156-858cfad9e41d +// protoc-gen-go-drpc version: v0.0.26 // source: provisionerd/proto/provisionerd.proto package proto