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

chore: track terraform modules in telemetry#15450

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
hugodutka merged 34 commits intomainfromhugodutka/track-workspace-modules
Nov 16, 2024
Merged
Show file tree
Hide file tree
Changes from1 commit
Commits
Show all changes
34 commits
Select commitHold shift + click to select a range
0f713ed
add the workspace_modules table, add the module column to workspace_r…
hugodutkaNov 6, 2024
82c8a3c
insert workspace modules on provisioner job completion
hugodutkaNov 6, 2024
307a57e
add foreign key to job on workspace_modules
hugodutkaNov 6, 2024
2ae16fc
don't return the root module
hugodutkaNov 7, 2024
7f2f155
add and populate the module_path column to workspace_resources
hugodutkaNov 7, 2024
863235d
TestCompleteJob - Modules WIP
hugodutkaNov 7, 2024
993f0ab
TemplateImport CompleteJob Modules test
hugodutkaNov 8, 2024
e8fbd40
TestCompleteJob Modules WorkspaceBuild
hugodutkaNov 8, 2024
5c542e5
add a test for returning modules in provision_test.go, fix test in re…
hugodutkaNov 8, 2024
9ec5ee1
make gen
hugodutkaNov 8, 2024
119a686
fix dbauthz tests
hugodutkaNov 8, 2024
3a5a025
add workspace modules and workspace resources's ModulePath to telemetry
hugodutkaNov 8, 2024
3377d22
add a workspace_modules fixture
hugodutkaNov 8, 2024
422b112
add a workspace resource's modulePath default to the e2e helper
hugodutkaNov 8, 2024
46b9b36
add modules default on PlanComplete for e2e tests
hugodutkaNov 8, 2024
f3f4d5c
lint
hugodutkaNov 8, 2024
93ed136
set module path to sentinel value when parsing failed and log an error
hugodutkaNov 13, 2024
301a153
change error string
hugodutkaNov 13, 2024
212e7d5
obfuscate workspace module source and version
hugodutkaNov 13, 2024
e9b7c46
fixes after rebase
hugodutkaNov 14, 2024
25cba6d
change migration number
hugodutkaNov 15, 2024
780730f
change fixture number
hugodutkaNov 15, 2024
b47a018
add index on created_at
hugodutkaNov 15, 2024
03be52e
add a comment about using modules from plan instead of apply
hugodutkaNov 15, 2024
00b8131
convert sentinel string to an error
hugodutkaNov 15, 2024
4187fbf
remove unnecessary comment
hugodutkaNov 15, 2024
7e82c3d
don't fail if we can't get modules from disk
hugodutkaNov 15, 2024
42e57ca
add a test for a malformed module
hugodutkaNov 16, 2024
368fc25
add a comment
hugodutkaNov 16, 2024
73b22cf
combine assignment and conditional
hugodutkaNov 16, 2024
7b9d70a
make isCoderModule into a top level function
hugodutkaNov 16, 2024
ea82313
use dbtestutil.NewDB instead of dbmem
hugodutkaNov 16, 2024
8564e9a
make gen
hugodutkaNov 16, 2024
d11fc82
combine 2 more assignments and conditionals
hugodutkaNov 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
PrevPrevious commit
NextNext commit
add workspace modules and workspace resources's ModulePath to telemetry
  • Loading branch information
@hugodutka
hugodutka committedNov 15, 2024
commit3a5a025b9d348e9ad11fb2f138fe7ff9e9bb8b92
7 changes: 7 additions & 0 deletionscoderd/database/dbauthz/dbauthz.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2673,6 +2673,13 @@ func (q *querier) GetWorkspaceModulesByJobID(ctx context.Context, jobID uuid.UUI
return q.db.GetWorkspaceModulesByJobID(ctx, jobID)
}

func (q *querier) GetWorkspaceModulesCreatedAfter(ctx context.Context, createdAt time.Time) ([]database.WorkspaceModule, error) {
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {
return nil, err
}
return q.db.GetWorkspaceModulesCreatedAfter(ctx, createdAt)
}

func (q *querier) GetWorkspaceProxies(ctx context.Context) ([]database.WorkspaceProxy, error) {
return fetchWithPostFilter(q.auth, policy.ActionRead, func(ctx context.Context, _ interface{}) ([]database.WorkspaceProxy, error) {
return q.db.GetWorkspaceProxies(ctx)
Expand Down
3 changes: 3 additions & 0 deletionscoderd/database/dbauthz/dbauthz_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2919,6 +2919,9 @@ func (s *MethodTestSuite) TestSystemFunctions() {
s.Run("GetWorkspaceModulesByJobID", s.Subtest(func(db database.Store, check *expects) {
check.Args(uuid.New()).Asserts(rbac.ResourceSystem, policy.ActionRead)
}))
s.Run("GetWorkspaceModulesCreatedAfter", s.Subtest(func(db database.Store, check *expects) {
check.Args(dbtime.Now()).Asserts(rbac.ResourceSystem, policy.ActionRead)
}))
}

func (s *MethodTestSuite) TestNotifications() {
Expand Down
14 changes: 14 additions & 0 deletionscoderd/database/dbgen/dbgen.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -666,6 +666,20 @@ func WorkspaceResource(t testing.TB, db database.Store, orig database.WorkspaceR
return resource
}

func WorkspaceModule(t testing.TB, db database.Store, orig database.WorkspaceModule) database.WorkspaceModule {
module, err := db.InsertWorkspaceModule(genCtx, database.InsertWorkspaceModuleParams{
ID: takeFirst(orig.ID, uuid.New()),
JobID: takeFirst(orig.JobID, uuid.New()),
Transition: takeFirst(orig.Transition, database.WorkspaceTransitionStart),
Source: takeFirst(orig.Source, "test-source"),
Version: takeFirst(orig.Version, "v1.0.0"),
Key: takeFirst(orig.Key, "test-key"),
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
})
require.NoError(t, err, "insert workspace module")
return module
}

func WorkspaceResourceMetadatums(t testing.TB, db database.Store, seed database.WorkspaceResourceMetadatum) []database.WorkspaceResourceMetadatum {
meta, err := db.InsertWorkspaceResourceMetadata(genCtx, database.InsertWorkspaceResourceMetadataParams{
WorkspaceResourceID: takeFirst(seed.WorkspaceResourceID, uuid.New()),
Expand Down
13 changes: 13 additions & 0 deletionscoderd/database/dbmem/dbmem.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -6686,6 +6686,19 @@ func (q *FakeQuerier) GetWorkspaceModulesByJobID(_ context.Context, jobID uuid.U
return modules, nil
}

func (q *FakeQuerier) GetWorkspaceModulesCreatedAfter(_ context.Context, createdAt time.Time) ([]database.WorkspaceModule, error) {
q.mutex.RLock()
defer q.mutex.RUnlock()

modules := make([]database.WorkspaceModule, 0)
for _, module := range q.workspaceModules {
if module.CreatedAt.After(createdAt) {
modules = append(modules, module)
}
}
return modules, nil
}

func (q *FakeQuerier) GetWorkspaceProxies(_ context.Context) ([]database.WorkspaceProxy, error) {
q.mutex.RLock()
defer q.mutex.RUnlock()
Expand Down
7 changes: 7 additions & 0 deletionscoderd/database/dbmetrics/querymetrics.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

15 changes: 15 additions & 0 deletionscoderd/database/dbmock/dbmock.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

1 change: 1 addition & 0 deletionscoderd/database/querier.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

35 changes: 35 additions & 0 deletionscoderd/database/queries.sql.go
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

3 changes: 3 additions & 0 deletionscoderd/database/queries/workspacemodules.sql
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,3 +11,6 @@ FROM
workspace_modules
WHERE
job_id = $1;

-- name: GetWorkspaceModulesCreatedAfter :many
SELECT * FROM workspace_modules WHERE created_at > $1;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

non-blocking: If we're going to be querying oncreated_at, do we need an index?

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Won't hurt, I'll add it. 😄

11 changes: 6 additions & 5 deletionscoderd/provisionerdserver/provisionerdserver.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1279,7 +1279,7 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
slog.F("module_key", module.Key),
slog.F("transition", transition))

err = InsertWorkspaceModule(ctx, s.Database, jobID, transition, module)
err = InsertWorkspaceModule(ctx, s.Database, jobID, transition, module, telemetrySnapshot)
if err != nil {
return nil, xerrors.Errorf("insert module: %w", err)
}
Expand DownExpand Up@@ -1491,7 +1491,7 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
}
}
for _, module := range jobType.WorkspaceBuild.Modules {
err = InsertWorkspaceModule(ctx, db, job.ID, workspaceBuild.Transition, module)
err = InsertWorkspaceModule(ctx, db, job.ID, workspaceBuild.Transition, module, telemetrySnapshot)
if err != nil {
return xerrors.Errorf("insert provisioner job module: %w", err)
}
Expand DownExpand Up@@ -1683,7 +1683,7 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
slog.F("module_source", module.Source),
)

err = InsertWorkspaceModule(ctx, s.Database, jobID, database.WorkspaceTransitionStart, module)
err = InsertWorkspaceModule(ctx, s.Database, jobID, database.WorkspaceTransitionStart, module, telemetrySnapshot)
if err != nil {
return nil, xerrors.Errorf("insert module: %w", err)
}
Expand DownExpand Up@@ -1769,8 +1769,8 @@ func (s *server) startTrace(ctx context.Context, name string, opts ...trace.Span
))...)
}

func InsertWorkspaceModule(ctx context.Context, db database.Store, jobID uuid.UUID, transition database.WorkspaceTransition, protoModule *sdkproto.Module) error {
_, err := db.InsertWorkspaceModule(ctx, database.InsertWorkspaceModuleParams{
func InsertWorkspaceModule(ctx context.Context, db database.Store, jobID uuid.UUID, transition database.WorkspaceTransition, protoModule *sdkproto.Module, snapshot *telemetry.Snapshot) error {
module, err := db.InsertWorkspaceModule(ctx, database.InsertWorkspaceModuleParams{
ID: uuid.New(),
CreatedAt: dbtime.Now(),
JobID: jobID,
Expand All@@ -1782,6 +1782,7 @@ func InsertWorkspaceModule(ctx context.Context, db database.Store, jobID uuid.UU
if err != nil {
return xerrors.Errorf("insert provisioner job module %q: %w", protoModule.Source, err)
}
snapshot.WorkspaceModules = append(snapshot.WorkspaceModules, telemetry.ConvertWorkspaceModule(module))
return nil
}

Expand Down
45 changes: 44 additions & 1 deletioncoderd/telemetry/telemetry.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -456,6 +456,17 @@ func (r *remoteReporter) createSnapshot() (*Snapshot, error) {
}
return nil
})
eg.Go(func() error {
workspaceModules, err := r.options.Database.GetWorkspaceModulesCreatedAfter(ctx, createdAfter)
if err != nil {
return xerrors.Errorf("get workspace modules: %w", err)
}
snapshot.WorkspaceModules = make([]WorkspaceModule, 0, len(workspaceModules))
for _, module := range workspaceModules {
snapshot.WorkspaceModules = append(snapshot.WorkspaceModules, ConvertWorkspaceModule(module))
}
return nil
})
eg.Go(func() error {
licenses, err := r.options.Database.GetUnexpiredLicenses(ctx)
if err != nil {
Expand DownExpand Up@@ -642,14 +653,18 @@ func ConvertWorkspaceApp(app database.WorkspaceApp) WorkspaceApp {

// ConvertWorkspaceResource anonymizes a workspace resource.
func ConvertWorkspaceResource(resource database.WorkspaceResource) WorkspaceResource {
return WorkspaceResource{
r := WorkspaceResource{
ID: resource.ID,
JobID: resource.JobID,
CreatedAt: resource.CreatedAt,
Transition: resource.Transition,
Type: resource.Type,
InstanceType: resource.InstanceType.String,
}
if resource.ModulePath.Valid {
r.ModulePath = &resource.ModulePath.String
}
return r
}

// ConvertWorkspaceResourceMetadata anonymizes workspace metadata.
Expand All@@ -661,6 +676,18 @@ func ConvertWorkspaceResourceMetadata(metadata database.WorkspaceResourceMetadat
}
}

func ConvertWorkspaceModule(module database.WorkspaceModule) WorkspaceModule {
return WorkspaceModule{
ID: module.ID,
JobID: module.JobID,
Transition: module.Transition,
Source: module.Source,
Version: module.Version,
Key: module.Key,
CreatedAt: module.CreatedAt,
}
}

// ConvertUser anonymizes a user.
func ConvertUser(dbUser database.User) User {
emailHashed := ""
Expand DownExpand Up@@ -810,6 +837,7 @@ type Snapshot struct {
WorkspaceProxies []WorkspaceProxy `json:"workspace_proxies"`
WorkspaceResourceMetadata []WorkspaceResourceMetadata `json:"workspace_resource_metadata"`
WorkspaceResources []WorkspaceResource `json:"workspace_resources"`
WorkspaceModules []WorkspaceModule `json:"workspace_modules"`
Workspaces []Workspace `json:"workspaces"`
NetworkEvents []NetworkEvent `json:"network_events"`
}
Expand DownExpand Up@@ -878,6 +906,11 @@ type WorkspaceResource struct {
Transition database.WorkspaceTransition `json:"transition"`
Type string `json:"type"`
InstanceType string `json:"instance_type"`
// ModulePath is nullable because it was added a long time after the
// original workspace resource telemetry was added. All new resources
// will have a module path, but deployments with older resources still
// in the database will not.
ModulePath *string `json:"module_path"`
}

type WorkspaceResourceMetadata struct {
Expand All@@ -886,6 +919,16 @@ type WorkspaceResourceMetadata struct {
Sensitive bool `json:"sensitive"`
}

type WorkspaceModule struct {
ID uuid.UUID `json:"id"`
CreatedAt time.Time `json:"created_at"`
JobID uuid.UUID `json:"job_id"`
Transition database.WorkspaceTransition `json:"transition"`
Key string `json:"key"`
Version string `json:"version"`
Source string `json:"source"`
}

type WorkspaceAgent struct {
ID uuid.UUID `json:"id"`
CreatedAt time.Time `json:"created_at"`
Expand Down
3 changes: 3 additions & 0 deletionscoderd/telemetry/telemetry_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -87,6 +87,8 @@ func TestTelemetry(t *testing.T) {
assert.NoError(t, err)
_, _ = dbgen.WorkspaceProxy(t, db, database.WorkspaceProxy{})

_ = dbgen.WorkspaceModule(t, db, database.WorkspaceModule{})

_, snapshot := collectSnapshot(t, db, nil)
require.Len(t, snapshot.ProvisionerJobs, 1)
require.Len(t, snapshot.Licenses, 1)
Expand All@@ -103,6 +105,7 @@ func TestTelemetry(t *testing.T) {
require.Len(t, snapshot.WorkspaceResources, 1)
require.Len(t, snapshot.WorkspaceAgentStats, 1)
require.Len(t, snapshot.WorkspaceProxies, 1)
require.Len(t, snapshot.WorkspaceModules, 1)

wsa := snapshot.WorkspaceAgents[0]
require.Len(t, wsa.Subsystems, 2)
Expand Down

[8]ページ先頭

©2009-2026 Movatter.jp