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

Commiteca24da

Browse files
committed
feat(coderd/database): add task status and status view
This change updates the `task_workspace_apps` table structure forimproved linking to workspace builds and adds queries to manage tasksand a view to expose task status.Updatescoder/internal#948Supersedes#20212Supersedes#19773
1 parent38e1300 commiteca24da

19 files changed

+1249
-130
lines changed

‎coderd/database/check_constraint.go‎

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

‎coderd/database/dbauthz/dbauthz.go‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2885,6 +2885,14 @@ func (q *querier) GetTailnetTunnelPeerIDs(ctx context.Context, srcID uuid.UUID)
28852885
returnq.db.GetTailnetTunnelPeerIDs(ctx,srcID)
28862886
}
28872887

2888+
func (q*querier)GetTaskByID(ctx context.Context,id uuid.UUID) (database.Task,error) {
2889+
returnfetch(q.log,q.auth,q.db.GetTaskByID)(ctx,id)
2890+
}
2891+
2892+
func (q*querier)GetTaskByWorkspaceID(ctx context.Context,workspaceID uuid.UUID) (database.Task,error) {
2893+
returnfetch(q.log,q.auth,q.db.GetTaskByWorkspaceID)(ctx,workspaceID)
2894+
}
2895+
28882896
func (q*querier)GetTelemetryItem(ctx context.Context,keystring) (database.TelemetryItem,error) {
28892897
iferr:=q.authorizeContext(ctx,policy.ActionRead,rbac.ResourceSystem);err!=nil {
28902898
return database.TelemetryItem{},err
@@ -4110,6 +4118,17 @@ func (q *querier) InsertReplica(ctx context.Context, arg database.InsertReplicaP
41104118
returnq.db.InsertReplica(ctx,arg)
41114119
}
41124120

4121+
func (q*querier)InsertTask(ctx context.Context,arg database.InsertTaskParams) (database.TaskTable,error) {
4122+
// Ensure the actor can access the specified template version (and thus its template).
4123+
if_,err:=q.GetTemplateVersionByID(ctx,arg.TemplateVersionID);err!=nil {
4124+
return database.TaskTable{},err
4125+
}
4126+
4127+
obj:=rbac.ResourceTask.WithOwner(arg.OwnerID.String()).InOrg(arg.OrganizationID)
4128+
4129+
returninsert(q.log,q.auth,obj,q.db.InsertTask)(ctx,arg)
4130+
}
4131+
41134132
func (q*querier)InsertTelemetryItemIfNotExists(ctx context.Context,arg database.InsertTelemetryItemIfNotExistsParams)error {
41144133
iferr:=q.authorizeContext(ctx,policy.ActionCreate,rbac.ResourceSystem);err!=nil {
41154134
returnerr
@@ -5668,6 +5687,18 @@ func (q *querier) UpsertTailnetTunnel(ctx context.Context, arg database.UpsertTa
56685687
returnq.db.UpsertTailnetTunnel(ctx,arg)
56695688
}
56705689

5690+
func (q*querier)UpsertTaskWorkspaceApp(ctx context.Context,arg database.UpsertTaskWorkspaceAppParams) (database.TaskWorkspaceApp,error) {
5691+
// Fetch the task to derive the RBAC object and authorize update on it.
5692+
task,err:=q.db.GetTaskByID(ctx,arg.TaskID)
5693+
iferr!=nil {
5694+
return database.TaskWorkspaceApp{},err
5695+
}
5696+
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,task);err!=nil {
5697+
return database.TaskWorkspaceApp{},err
5698+
}
5699+
returnq.db.UpsertTaskWorkspaceApp(ctx,arg)
5700+
}
5701+
56715702
func (q*querier)UpsertTelemetryItem(ctx context.Context,arg database.UpsertTelemetryItemParams)error {
56725703
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,rbac.ResourceSystem);err!=nil {
56735704
returnerr

‎coderd/database/dbauthz/dbauthz_test.go‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2347,6 +2347,53 @@ func (s *MethodTestSuite) TestWorkspacePortSharing() {
23472347
}))
23482348
}
23492349

2350+
func (s*MethodTestSuite)TestTasks() {
2351+
s.Run("GetTaskByID",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2352+
task:=testutil.Fake(s.T(),faker, database.Task{})
2353+
dbm.EXPECT().GetTaskByID(gomock.Any(),task.ID).Return(task,nil).AnyTimes()
2354+
check.Args(task.ID).Asserts(task,policy.ActionRead).Returns(task)
2355+
}))
2356+
s.Run("InsertTask",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2357+
tpl:=testutil.Fake(s.T(),faker, database.Template{})
2358+
tv:=testutil.Fake(s.T(),faker, database.TemplateVersion{
2359+
TemplateID: uuid.NullUUID{UUID:tpl.ID,Valid:true},
2360+
OrganizationID:tpl.OrganizationID,
2361+
})
2362+
2363+
arg:=testutil.Fake(s.T(),faker, database.InsertTaskParams{
2364+
OrganizationID:tpl.OrganizationID,
2365+
TemplateVersionID:tv.ID,
2366+
})
2367+
2368+
dbm.EXPECT().GetTemplateVersionByID(gomock.Any(),tv.ID).Return(tv,nil).AnyTimes()
2369+
dbm.EXPECT().GetTemplateByID(gomock.Any(),tpl.ID).Return(tpl,nil).AnyTimes()
2370+
dbm.EXPECT().InsertTask(gomock.Any(),arg).Return(database.TaskTable{},nil).AnyTimes()
2371+
2372+
check.Args(arg).Asserts(
2373+
tpl,policy.ActionRead,
2374+
rbac.ResourceTask.InOrg(arg.OrganizationID).WithOwner(arg.OwnerID.String()),policy.ActionCreate,
2375+
).Returns(database.TaskTable{})
2376+
}))
2377+
s.Run("UpsertTaskWorkspaceApp",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2378+
task:=testutil.Fake(s.T(),faker, database.Task{})
2379+
arg:= database.UpsertTaskWorkspaceAppParams{
2380+
TaskID:task.ID,
2381+
WorkspaceBuildNumber:1,
2382+
}
2383+
2384+
dbm.EXPECT().GetTaskByID(gomock.Any(),task.ID).Return(task,nil).AnyTimes()
2385+
dbm.EXPECT().UpsertTaskWorkspaceApp(gomock.Any(),arg).Return(database.TaskWorkspaceApp{},nil).AnyTimes()
2386+
2387+
check.Args(arg).Asserts(task,policy.ActionUpdate).Returns(database.TaskWorkspaceApp{})
2388+
}))
2389+
s.Run("GetTaskByWorkspaceID",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
2390+
task:=testutil.Fake(s.T(),faker, database.Task{})
2391+
task.WorkspaceID= uuid.NullUUID{UUID:uuid.New(),Valid:true}
2392+
dbm.EXPECT().GetTaskByWorkspaceID(gomock.Any(),task.WorkspaceID.UUID).Return(task,nil).AnyTimes()
2393+
check.Args(task.WorkspaceID.UUID).Asserts(task,policy.ActionRead).Returns(task)
2394+
}))
2395+
}
2396+
23502397
func (s*MethodTestSuite)TestProvisionerKeys() {
23512398
s.Run("InsertProvisionerKey",s.Mocked(func(dbm*dbmock.MockStore,faker*gofakeit.Faker,check*expects) {
23522399
org:=testutil.Fake(s.T(),faker, database.Organization{})

‎coderd/database/dbgen/dbgen.go‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/coder/coder/v2/coderd/database/provisionerjobs"
2828
"github.com/coder/coder/v2/coderd/database/pubsub"
2929
"github.com/coder/coder/v2/coderd/rbac"
30+
"github.com/coder/coder/v2/coderd/taskname"
3031
"github.com/coder/coder/v2/codersdk"
3132
"github.com/coder/coder/v2/cryptorand"
3233
"github.com/coder/coder/v2/provisionerd/proto"
@@ -1559,6 +1560,43 @@ func AIBridgeToolUsage(t testing.TB, db database.Store, seed database.InsertAIBr
15591560
returntoolUsage
15601561
}
15611562

1563+
funcTask(t testing.TB,db database.Store,orig database.TaskTable) database.TaskTable {
1564+
t.Helper()
1565+
1566+
parameters:=orig.TemplateParameters
1567+
ifparameters==nil {
1568+
parameters=json.RawMessage([]byte("{}"))
1569+
}
1570+
1571+
task,err:=db.InsertTask(genCtx, database.InsertTaskParams{
1572+
OrganizationID:orig.OrganizationID,
1573+
OwnerID:orig.OwnerID,
1574+
Name:takeFirst(orig.Name,taskname.GenerateFallback()),
1575+
WorkspaceID:orig.WorkspaceID,
1576+
TemplateVersionID:orig.TemplateVersionID,
1577+
TemplateParameters:parameters,
1578+
Prompt:orig.Prompt,
1579+
CreatedAt:takeFirst(orig.CreatedAt,dbtime.Now()),
1580+
})
1581+
require.NoError(t,err,"failed to insert task")
1582+
1583+
returntask
1584+
}
1585+
1586+
funcTaskWorkspaceApp(t testing.TB,db database.Store,orig database.TaskWorkspaceApp) database.TaskWorkspaceApp {
1587+
t.Helper()
1588+
1589+
app,err:=db.UpsertTaskWorkspaceApp(genCtx, database.UpsertTaskWorkspaceAppParams{
1590+
TaskID:orig.TaskID,
1591+
WorkspaceBuildNumber:orig.WorkspaceBuildNumber,
1592+
WorkspaceAgentID:orig.WorkspaceAgentID,
1593+
WorkspaceAppID:orig.WorkspaceAppID,
1594+
})
1595+
require.NoError(t,err,"failed to upsert task workspace app")
1596+
1597+
returnapp
1598+
}
1599+
15621600
funcprovisionerJobTiming(t testing.TB,db database.Store,seed database.ProvisionerJobTiming) database.ProvisionerJobTiming {
15631601
timing,err:=db.InsertProvisionerJobTimings(genCtx, database.InsertProvisionerJobTimingsParams{
15641602
JobID:takeFirst(seed.JobID,uuid.New()),

‎coderd/database/dbmetrics/querymetrics.go‎

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

‎coderd/database/dbmock/dbmock.go‎

Lines changed: 60 additions & 0 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