Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6235708

Browse files
presleypcoadler
andauthored
feat: filter for running workspaces (#4157)
* Refactor workspaces xservice* Remove layout comment* Format* Add comments* Add running workspaces filter to frontend* Start on backend - add status to filter* Update sql and add test - wip* Attempt to unconvert status for easier querying* Fix syntax* Join jobs table, untested* sql* Add Status to GetAuthorizedWorkspaces* Update job tests to have canceled time* fmt* add status filter to database fakeCo-authored-by: Colin Adler <colin1adler@gmail.com>
1 parentaefb477 commit6235708

File tree

15 files changed

+432
-97
lines changed

15 files changed

+432
-97
lines changed

‎coderd/database/databasefake/databasefake.go

Lines changed: 99 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,8 @@ func (q *fakeQuerier) GetWorkspaces(ctx context.Context, arg database.GetWorkspa
553553
returnworkspaces,err
554554
}
555555

556-
func (q*fakeQuerier)GetAuthorizedWorkspaces(_ context.Context,arg database.GetWorkspacesParams,authorizedFilter rbac.AuthorizeFilter) ([]database.Workspace,error) {
556+
//nolint:gocyclo
557+
func (q*fakeQuerier)GetAuthorizedWorkspaces(ctx context.Context,arg database.GetWorkspacesParams,authorizedFilter rbac.AuthorizeFilter) ([]database.Workspace,error) {
557558
q.mutex.RLock()
558559
deferq.mutex.RUnlock()
559560

@@ -562,25 +563,118 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(_ context.Context, arg database.Ge
562563
ifarg.OwnerID!=uuid.Nil&&workspace.OwnerID!=arg.OwnerID {
563564
continue
564565
}
566+
565567
ifarg.OwnerUsername!="" {
566-
owner,err:=q.GetUserByID(context.Background(),workspace.OwnerID)
568+
owner,err:=q.GetUserByID(ctx,workspace.OwnerID)
567569
iferr==nil&&!strings.EqualFold(arg.OwnerUsername,owner.Username) {
568570
continue
569571
}
570572
}
573+
571574
ifarg.TemplateName!="" {
572-
template,err:=q.GetTemplateByID(context.Background(),workspace.TemplateID)
575+
template,err:=q.GetTemplateByID(ctx,workspace.TemplateID)
573576
iferr==nil&&!strings.EqualFold(arg.TemplateName,template.Name) {
574577
continue
575578
}
576579
}
580+
577581
if!arg.Deleted&&workspace.Deleted {
578582
continue
579583
}
580584

581585
ifarg.Name!=""&&!strings.Contains(strings.ToLower(workspace.Name),strings.ToLower(arg.Name)) {
582586
continue
583587
}
588+
589+
ifarg.Status!="" {
590+
build,err:=q.GetLatestWorkspaceBuildByWorkspaceID(ctx,workspace.ID)
591+
iferr!=nil {
592+
returnnil,xerrors.Errorf("get latest build: %w",err)
593+
}
594+
595+
job,err:=q.GetProvisionerJobByID(ctx,build.JobID)
596+
iferr!=nil {
597+
returnnil,xerrors.Errorf("get provisioner job: %w",err)
598+
}
599+
600+
switcharg.Status {
601+
case"pending":
602+
if!job.StartedAt.Valid {
603+
continue
604+
}
605+
606+
case"starting":
607+
if!job.StartedAt.Valid&&
608+
!job.CanceledAt.Valid&&
609+
job.CompletedAt.Valid&&
610+
time.Since(job.UpdatedAt)>30*time.Second||
611+
build.Transition!=database.WorkspaceTransitionStart {
612+
continue
613+
}
614+
615+
case"running":
616+
if!job.CompletedAt.Valid&&
617+
job.CanceledAt.Valid&&
618+
job.Error.Valid||
619+
build.Transition!=database.WorkspaceTransitionStart {
620+
continue
621+
}
622+
623+
case"stopping":
624+
if!job.StartedAt.Valid&&
625+
!job.CanceledAt.Valid&&
626+
job.CompletedAt.Valid&&
627+
time.Since(job.UpdatedAt)>30*time.Second||
628+
build.Transition!=database.WorkspaceTransitionStop {
629+
continue
630+
}
631+
632+
case"stopped":
633+
if!job.CompletedAt.Valid&&
634+
job.CanceledAt.Valid&&
635+
job.Error.Valid||
636+
build.Transition!=database.WorkspaceTransitionStop {
637+
continue
638+
}
639+
640+
case"failed":
641+
if (!job.CanceledAt.Valid&&!job.Error.Valid)||
642+
(!job.CompletedAt.Valid&&!job.Error.Valid) {
643+
continue
644+
}
645+
646+
case"canceling":
647+
if!job.CanceledAt.Valid&&job.CompletedAt.Valid {
648+
continue
649+
}
650+
651+
case"canceled":
652+
if!job.CanceledAt.Valid&&!job.CompletedAt.Valid {
653+
continue
654+
}
655+
656+
case"deleted":
657+
if!job.StartedAt.Valid&&
658+
job.CanceledAt.Valid&&
659+
!job.CompletedAt.Valid&&
660+
time.Since(job.UpdatedAt)>30*time.Second||
661+
build.Transition!=database.WorkspaceTransitionDelete {
662+
continue
663+
}
664+
665+
case"deleting":
666+
if!job.CompletedAt.Valid&&
667+
job.CanceledAt.Valid&&
668+
job.Error.Valid&&
669+
build.Transition!=database.WorkspaceTransitionDelete {
670+
continue
671+
}
672+
673+
default:
674+
returnnil,xerrors.Errorf("unknown workspace status in filter: %q",arg.Status)
675+
}
676+
}
677+
584678
iflen(arg.TemplateIds)>0 {
585679
match:=false
586680
for_,id:=rangearg.TemplateIds {
@@ -771,7 +865,7 @@ func (q *fakeQuerier) GetLatestWorkspaceBuildByWorkspaceID(_ context.Context, wo
771865
varrow database.WorkspaceBuild
772866
varbuildNumint32=-1
773867
for_,workspaceBuild:=rangeq.workspaceBuilds {
774-
ifworkspaceBuild.WorkspaceID.String()==workspaceID.String()&&workspaceBuild.BuildNumber>buildNum {
868+
ifworkspaceBuild.WorkspaceID==workspaceID&&workspaceBuild.BuildNumber>buildNum {
775869
row=workspaceBuild
776870
buildNum=workspaceBuild.BuildNumber
777871
}
@@ -816,7 +910,7 @@ func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context,
816910
buildNumbers:=make(map[uuid.UUID]int32)
817911
for_,workspaceBuild:=rangeq.workspaceBuilds {
818912
for_,id:=rangeids {
819-
ifid.String()==workspaceBuild.WorkspaceID.String()&&workspaceBuild.BuildNumber>buildNumbers[id] {
913+
ifid==workspaceBuild.WorkspaceID&&workspaceBuild.BuildNumber>buildNumbers[id] {
820914
builds[id]=workspaceBuild
821915
buildNumbers[id]=workspaceBuild.BuildNumber
822916
}

‎coderd/database/modelqueries.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ func (q *sqlQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg GetWorkspa
168168
query:=fmt.Sprintf("-- name: GetAuthorizedWorkspaces :many\n%s AND %s",getWorkspaces,authorizedFilter.SQLString(rbac.NoACLConfig()))
169169
rows,err:=q.db.QueryContext(ctx,query,
170170
arg.Deleted,
171+
arg.Status,
171172
arg.OwnerID,
172173
arg.OwnerUsername,
173174
arg.TemplateName,

‎coderd/database/queries.sql.go

Lines changed: 101 additions & 15 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp