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

Commitaa0dc2d

Browse files
authored
chore: track terraform modules in telemetry (#15450)
Addressescoder/nexus#35.This PR:- Adds a `workspace_modules` table to track modules used by theTerraform provisioner in provisioner jobs.- Adds a `module_path` column to the `workspace_resources` table,allowing to identify which module a resource originates from.- Starts pushing this new information into telemetry.For the person reviewing this PR, do not fret about the 1,500 new lines- ~1,000 of them are auto-generated.
1 parent968c52b commitaa0dc2d

File tree

35 files changed

+1633
-412
lines changed

35 files changed

+1633
-412
lines changed

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2666,6 +2666,20 @@ func (q *querier) GetWorkspaceByWorkspaceAppID(ctx context.Context, workspaceApp
26662666
returnfetch(q.log,q.auth,q.db.GetWorkspaceByWorkspaceAppID)(ctx,workspaceAppID)
26672667
}
26682668

2669+
func (q*querier)GetWorkspaceModulesByJobID(ctx context.Context,jobID uuid.UUID) ([]database.WorkspaceModule,error) {
2670+
iferr:=q.authorizeContext(ctx,policy.ActionRead,rbac.ResourceSystem);err!=nil {
2671+
returnnil,err
2672+
}
2673+
returnq.db.GetWorkspaceModulesByJobID(ctx,jobID)
2674+
}
2675+
2676+
func (q*querier)GetWorkspaceModulesCreatedAfter(ctx context.Context,createdAt time.Time) ([]database.WorkspaceModule,error) {
2677+
iferr:=q.authorizeContext(ctx,policy.ActionRead,rbac.ResourceSystem);err!=nil {
2678+
returnnil,err
2679+
}
2680+
returnq.db.GetWorkspaceModulesCreatedAfter(ctx,createdAt)
2681+
}
2682+
26692683
func (q*querier)GetWorkspaceProxies(ctx context.Context) ([]database.WorkspaceProxy,error) {
26702684
returnfetchWithPostFilter(q.auth,policy.ActionRead,func(ctx context.Context,_interface{}) ([]database.WorkspaceProxy,error) {
26712685
returnq.db.GetWorkspaceProxies(ctx)
@@ -3222,6 +3236,13 @@ func (q *querier) InsertWorkspaceBuildParameters(ctx context.Context, arg databa
32223236
returnq.db.InsertWorkspaceBuildParameters(ctx,arg)
32233237
}
32243238

3239+
func (q*querier)InsertWorkspaceModule(ctx context.Context,arg database.InsertWorkspaceModuleParams) (database.WorkspaceModule,error) {
3240+
iferr:=q.authorizeContext(ctx,policy.ActionCreate,rbac.ResourceSystem);err!=nil {
3241+
return database.WorkspaceModule{},err
3242+
}
3243+
returnq.db.InsertWorkspaceModule(ctx,arg)
3244+
}
3245+
32253246
func (q*querier)InsertWorkspaceProxy(ctx context.Context,arg database.InsertWorkspaceProxyParams) (database.WorkspaceProxy,error) {
32263247
returninsert(q.log,q.auth,rbac.ResourceWorkspaceProxy,q.db.InsertWorkspaceProxy)(ctx,arg)
32273248
}

‎coderd/database/dbauthz/dbauthz_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2907,6 +2907,21 @@ func (s *MethodTestSuite) TestSystemFunctions() {
29072907
}
29082908
check.Args(build.ID).Asserts(rbac.ResourceSystem,policy.ActionRead).Returns(rows)
29092909
}))
2910+
s.Run("InsertWorkspaceModule",s.Subtest(func(db database.Store,check*expects) {
2911+
j:=dbgen.ProvisionerJob(s.T(),db,nil, database.ProvisionerJob{
2912+
Type:database.ProvisionerJobTypeWorkspaceBuild,
2913+
})
2914+
check.Args(database.InsertWorkspaceModuleParams{
2915+
JobID:j.ID,
2916+
Transition:database.WorkspaceTransitionStart,
2917+
}).Asserts(rbac.ResourceSystem,policy.ActionCreate)
2918+
}))
2919+
s.Run("GetWorkspaceModulesByJobID",s.Subtest(func(db database.Store,check*expects) {
2920+
check.Args(uuid.New()).Asserts(rbac.ResourceSystem,policy.ActionRead)
2921+
}))
2922+
s.Run("GetWorkspaceModulesCreatedAfter",s.Subtest(func(db database.Store,check*expects) {
2923+
check.Args(dbtime.Now()).Asserts(rbac.ResourceSystem,policy.ActionRead)
2924+
}))
29102925
}
29112926

29122927
func (s*MethodTestSuite)TestNotifications() {

‎coderd/database/dbgen/dbgen.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,11 +657,29 @@ func WorkspaceResource(t testing.TB, db database.Store, orig database.WorkspaceR
657657
Valid:takeFirst(orig.InstanceType.Valid,false),
658658
},
659659
DailyCost:takeFirst(orig.DailyCost,0),
660+
ModulePath: sql.NullString{
661+
String:takeFirst(orig.ModulePath.String,""),
662+
Valid:takeFirst(orig.ModulePath.Valid,true),
663+
},
660664
})
661665
require.NoError(t,err,"insert resource")
662666
returnresource
663667
}
664668

669+
funcWorkspaceModule(t testing.TB,db database.Store,orig database.WorkspaceModule) database.WorkspaceModule {
670+
module,err:=db.InsertWorkspaceModule(genCtx, database.InsertWorkspaceModuleParams{
671+
ID:takeFirst(orig.ID,uuid.New()),
672+
JobID:takeFirst(orig.JobID,uuid.New()),
673+
Transition:takeFirst(orig.Transition,database.WorkspaceTransitionStart),
674+
Source:takeFirst(orig.Source,"test-source"),
675+
Version:takeFirst(orig.Version,"v1.0.0"),
676+
Key:takeFirst(orig.Key,"test-key"),
677+
CreatedAt:takeFirst(orig.CreatedAt,dbtime.Now()),
678+
})
679+
require.NoError(t,err,"insert workspace module")
680+
returnmodule
681+
}
682+
665683
funcWorkspaceResourceMetadatums(t testing.TB,db database.Store,seed database.WorkspaceResourceMetadatum) []database.WorkspaceResourceMetadatum {
666684
meta,err:=db.InsertWorkspaceResourceMetadata(genCtx, database.InsertWorkspaceResourceMetadataParams{
667685
WorkspaceResourceID:takeFirst(seed.WorkspaceResourceID,uuid.New()),

‎coderd/database/dbmem/dbmem.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ func New() database.Store {
7373
workspaceAgents:make([]database.WorkspaceAgent,0),
7474
provisionerJobLogs:make([]database.ProvisionerJobLog,0),
7575
workspaceResources:make([]database.WorkspaceResource,0),
76+
workspaceModules:make([]database.WorkspaceModule,0),
7677
workspaceResourceMetadata:make([]database.WorkspaceResourceMetadatum,0),
7778
provisionerJobs:make([]database.ProvisionerJob,0),
7879
templateVersions:make([]database.TemplateVersionTable,0),
@@ -232,6 +233,7 @@ type data struct {
232233
workspaceBuildParameters []database.WorkspaceBuildParameter
233234
workspaceResourceMetadata []database.WorkspaceResourceMetadatum
234235
workspaceResources []database.WorkspaceResource
236+
workspaceModules []database.WorkspaceModule
235237
workspaces []database.WorkspaceTable
236238
workspaceProxies []database.WorkspaceProxy
237239
customRoles []database.CustomRole
@@ -6671,6 +6673,32 @@ func (q *FakeQuerier) GetWorkspaceByWorkspaceAppID(_ context.Context, workspaceA
66716673
return database.Workspace{},sql.ErrNoRows
66726674
}
66736675

6676+
func (q*FakeQuerier)GetWorkspaceModulesByJobID(_ context.Context,jobID uuid.UUID) ([]database.WorkspaceModule,error) {
6677+
q.mutex.RLock()
6678+
deferq.mutex.RUnlock()
6679+
6680+
modules:=make([]database.WorkspaceModule,0)
6681+
for_,module:=rangeq.workspaceModules {
6682+
ifmodule.JobID==jobID {
6683+
modules=append(modules,module)
6684+
}
6685+
}
6686+
returnmodules,nil
6687+
}
6688+
6689+
func (q*FakeQuerier)GetWorkspaceModulesCreatedAfter(_ context.Context,createdAt time.Time) ([]database.WorkspaceModule,error) {
6690+
q.mutex.RLock()
6691+
deferq.mutex.RUnlock()
6692+
6693+
modules:=make([]database.WorkspaceModule,0)
6694+
for_,module:=rangeq.workspaceModules {
6695+
ifmodule.CreatedAt.After(createdAt) {
6696+
modules=append(modules,module)
6697+
}
6698+
}
6699+
returnmodules,nil
6700+
}
6701+
66746702
func (q*FakeQuerier)GetWorkspaceProxies(_ context.Context) ([]database.WorkspaceProxy,error) {
66756703
q.mutex.RLock()
66766704
deferq.mutex.RUnlock()
@@ -8233,6 +8261,20 @@ func (q *FakeQuerier) InsertWorkspaceBuildParameters(_ context.Context, arg data
82338261
returnnil
82348262
}
82358263

8264+
func (q*FakeQuerier)InsertWorkspaceModule(_ context.Context,arg database.InsertWorkspaceModuleParams) (database.WorkspaceModule,error) {
8265+
err:=validateDatabaseType(arg)
8266+
iferr!=nil {
8267+
return database.WorkspaceModule{},err
8268+
}
8269+
8270+
q.mutex.Lock()
8271+
deferq.mutex.Unlock()
8272+
8273+
workspaceModule:=database.WorkspaceModule(arg)
8274+
q.workspaceModules=append(q.workspaceModules,workspaceModule)
8275+
returnworkspaceModule,nil
8276+
}
8277+
82368278
func (q*FakeQuerier)InsertWorkspaceProxy(_ context.Context,arg database.InsertWorkspaceProxyParams) (database.WorkspaceProxy,error) {
82378279
q.mutex.Lock()
82388280
deferq.mutex.Unlock()
@@ -8283,6 +8325,7 @@ func (q *FakeQuerier) InsertWorkspaceResource(_ context.Context, arg database.In
82838325
Hide:arg.Hide,
82848326
Icon:arg.Icon,
82858327
DailyCost:arg.DailyCost,
8328+
ModulePath:arg.ModulePath,
82868329
}
82878330
q.workspaceResources=append(q.workspaceResources,resource)
82888331
returnresource,nil

‎coderd/database/dbmetrics/querymetrics.go

Lines changed: 21 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: 45 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/dump.sql

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

‎coderd/database/foreign_key_constraint.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
DROPTABLE workspace_modules;
2+
3+
ALTERTABLE
4+
workspace_resources
5+
DROP COLUMN module_path;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
ALTERTABLE
2+
workspace_resources
3+
ADD
4+
COLUMN module_pathTEXT;
5+
6+
CREATETABLEworkspace_modules (
7+
id uuidNOT NULL,
8+
job_id uuidNOT NULLREFERENCES provisioner_jobs (id)ON DELETE CASCADE,
9+
transition workspace_transitionNOT NULL,
10+
sourceTEXTNOT NULL,
11+
versionTEXTNOT NULL,
12+
keyTEXTNOT NULL,
13+
created_attimestamp with time zoneNOT NULL
14+
);
15+
16+
CREATEINDEXworkspace_modules_created_at_idxON workspace_modules (created_at);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
INSERT INTO
2+
public.workspace_modules (
3+
id,
4+
job_id,
5+
transition,
6+
source,
7+
version,
8+
key,
9+
created_at
10+
)
11+
VALUES
12+
(
13+
'5b1a722c-b8a0-40b0-a3a0-d8078fff9f6c',
14+
'424a58cb-61d6-4627-9907-613c396c4a38',
15+
'start',
16+
'test-source',
17+
'v1.0.0',
18+
'test-key',
19+
'2024-11-08 10:00:00+00'
20+
);

‎coderd/database/models.go

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

‎coderd/database/querier.go

Lines changed: 3 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