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

Commit2ace044

Browse files
authored
chore: track the first time html is served in telemetry (#16334)
Addressescoder/nexus#175.## Changes- Adds the `telemetry_items` database table. It's a key value store fortelemetry events that don't fit any other database tables.- Adds a telemetry report when HTML is served for the first time in`site.go`.
1 parentf6e990e commit2ace044

21 files changed

+521
-12
lines changed

‎cli/server_test.go‎

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -964,7 +964,7 @@ func TestServer(t *testing.T) {
964964
server:=httptest.NewServer(r)
965965
deferserver.Close()
966966

967-
inv,_:=clitest.New(t,
967+
inv,cfg:=clitest.New(t,
968968
"server",
969969
"--in-memory",
970970
"--http-address",":0",
@@ -977,6 +977,25 @@ func TestServer(t *testing.T) {
977977

978978
<-deployment
979979
<-snapshot
980+
981+
accessURL:=waitAccessURL(t,cfg)
982+
983+
ctx:=testutil.Context(t,testutil.WaitMedium)
984+
client:=codersdk.New(accessURL)
985+
body,err:=client.Request(ctx,http.MethodGet,"/",nil)
986+
require.NoError(t,err)
987+
require.NoError(t,body.Body.Close())
988+
989+
require.Eventually(t,func()bool {
990+
snap:=<-snapshot
991+
htmlFirstServedFound:=false
992+
for_,item:=rangesnap.TelemetryItems {
993+
ifitem.Key==string(telemetry.TelemetryItemKeyHTMLFirstServedAt) {
994+
htmlFirstServedFound=true
995+
}
996+
}
997+
returnhtmlFirstServedFound
998+
},testutil.WaitMedium,testutil.IntervalFast,"no html_first_served telemetry item")
980999
})
9811000
t.Run("Prometheus",func(t*testing.T) {
9821001
t.Parallel()

‎coderd/coderd.go‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,8 @@ func New(options *Options) *API {
585585
AppearanceFetcher:&api.AppearanceFetcher,
586586
BuildInfo:buildInfo,
587587
Entitlements:options.Entitlements,
588+
Telemetry:options.Telemetry,
589+
Logger:options.Logger.Named("site"),
588590
})
589591
api.SiteHandler.Experiments.Store(&experiments)
590592

‎coderd/database/dbauthz/dbauthz.go‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,6 +2096,20 @@ func (q *querier) GetTailnetTunnelPeerIDs(ctx context.Context, srcID uuid.UUID)
20962096
returnq.db.GetTailnetTunnelPeerIDs(ctx,srcID)
20972097
}
20982098

2099+
func (q*querier)GetTelemetryItem(ctx context.Context,keystring) (database.TelemetryItem,error) {
2100+
iferr:=q.authorizeContext(ctx,policy.ActionRead,rbac.ResourceSystem);err!=nil {
2101+
return database.TelemetryItem{},err
2102+
}
2103+
returnq.db.GetTelemetryItem(ctx,key)
2104+
}
2105+
2106+
func (q*querier)GetTelemetryItems(ctx context.Context) ([]database.TelemetryItem,error) {
2107+
iferr:=q.authorizeContext(ctx,policy.ActionRead,rbac.ResourceSystem);err!=nil {
2108+
returnnil,err
2109+
}
2110+
returnq.db.GetTelemetryItems(ctx)
2111+
}
2112+
20992113
func (q*querier)GetTemplateAppInsights(ctx context.Context,arg database.GetTemplateAppInsightsParams) ([]database.GetTemplateAppInsightsRow,error) {
21002114
iferr:=q.authorizeTemplateInsights(ctx,arg.TemplateIDs);err!=nil {
21012115
returnnil,err
@@ -3085,6 +3099,13 @@ func (q *querier) InsertReplica(ctx context.Context, arg database.InsertReplicaP
30853099
returnq.db.InsertReplica(ctx,arg)
30863100
}
30873101

3102+
func (q*querier)InsertTelemetryItemIfNotExists(ctx context.Context,arg database.InsertTelemetryItemIfNotExistsParams)error {
3103+
iferr:=q.authorizeContext(ctx,policy.ActionCreate,rbac.ResourceSystem);err!=nil {
3104+
returnerr
3105+
}
3106+
returnq.db.InsertTelemetryItemIfNotExists(ctx,arg)
3107+
}
3108+
30883109
func (q*querier)InsertTemplate(ctx context.Context,arg database.InsertTemplateParams)error {
30893110
obj:=rbac.ResourceTemplate.InOrg(arg.OrganizationID)
30903111
iferr:=q.authorizeContext(ctx,policy.ActionCreate,obj);err!=nil {
@@ -4345,6 +4366,13 @@ func (q *querier) UpsertTailnetTunnel(ctx context.Context, arg database.UpsertTa
43454366
returnq.db.UpsertTailnetTunnel(ctx,arg)
43464367
}
43474368

4369+
func (q*querier)UpsertTelemetryItem(ctx context.Context,arg database.UpsertTelemetryItemParams)error {
4370+
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,rbac.ResourceSystem);err!=nil {
4371+
returnerr
4372+
}
4373+
returnq.db.UpsertTelemetryItem(ctx,arg)
4374+
}
4375+
43484376
func (q*querier)UpsertTemplateUsageStats(ctx context.Context)error {
43494377
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,rbac.ResourceSystem);err!=nil {
43504378
returnerr

‎coderd/database/dbauthz/dbauthz_test.go‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4224,6 +4224,24 @@ func (s *MethodTestSuite) TestSystemFunctions() {
42244224
s.Run("GetWorkspaceModulesCreatedAfter",s.Subtest(func(db database.Store,check*expects) {
42254225
check.Args(dbtime.Now()).Asserts(rbac.ResourceSystem,policy.ActionRead)
42264226
}))
4227+
s.Run("GetTelemetryItem",s.Subtest(func(db database.Store,check*expects) {
4228+
check.Args("test").Asserts(rbac.ResourceSystem,policy.ActionRead).Errors(sql.ErrNoRows)
4229+
}))
4230+
s.Run("GetTelemetryItems",s.Subtest(func(db database.Store,check*expects) {
4231+
check.Args().Asserts(rbac.ResourceSystem,policy.ActionRead)
4232+
}))
4233+
s.Run("InsertTelemetryItemIfNotExists",s.Subtest(func(db database.Store,check*expects) {
4234+
check.Args(database.InsertTelemetryItemIfNotExistsParams{
4235+
Key:"test",
4236+
Value:"value",
4237+
}).Asserts(rbac.ResourceSystem,policy.ActionCreate)
4238+
}))
4239+
s.Run("UpsertTelemetryItem",s.Subtest(func(db database.Store,check*expects) {
4240+
check.Args(database.UpsertTelemetryItemParams{
4241+
Key:"test",
4242+
Value:"value",
4243+
}).Asserts(rbac.ResourceSystem,policy.ActionUpdate)
4244+
}))
42274245
}
42284246

42294247
func (s*MethodTestSuite)TestNotifications() {

‎coderd/database/dbgen/dbgen.go‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,6 +1093,23 @@ func ProvisionerJobTimings(t testing.TB, db database.Store, build database.Works
10931093
returntimings
10941094
}
10951095

1096+
funcTelemetryItem(t testing.TB,db database.Store,seed database.TelemetryItem) database.TelemetryItem {
1097+
ifseed.Key=="" {
1098+
seed.Key=testutil.GetRandomName(t)
1099+
}
1100+
ifseed.Value=="" {
1101+
seed.Value=time.Now().Format(time.RFC3339)
1102+
}
1103+
err:=db.UpsertTelemetryItem(genCtx, database.UpsertTelemetryItemParams{
1104+
Key:seed.Key,
1105+
Value:seed.Value,
1106+
})
1107+
require.NoError(t,err,"upsert telemetry item")
1108+
item,err:=db.GetTelemetryItem(genCtx,seed.Key)
1109+
require.NoError(t,err,"get telemetry item")
1110+
returnitem
1111+
}
1112+
10961113
funcprovisionerJobTiming(t testing.TB,db database.Store,seed database.ProvisionerJobTiming) database.ProvisionerJobTiming {
10971114
timing,err:=db.InsertProvisionerJobTimings(genCtx, database.InsertProvisionerJobTimingsParams{
10981115
JobID:takeFirst(seed.JobID,uuid.New()),

‎coderd/database/dbmem/dbmem.go‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ func New() database.Store {
8989
locks:map[int64]struct{}{},
9090
runtimeConfig:map[string]string{},
9191
userStatusChanges:make([]database.UserStatusChange,0),
92+
telemetryItems:make([]database.TelemetryItem,0),
9293
},
9394
}
9495
// Always start with a default org. Matching migration 198.
@@ -258,6 +259,7 @@ type data struct {
258259
defaultProxyDisplayNamestring
259260
defaultProxyIconURLstring
260261
userStatusChanges []database.UserStatusChange
262+
telemetryItems []database.TelemetryItem
261263
}
262264

263265
functryPercentile(fs []float64,pfloat64)float64 {
@@ -4330,6 +4332,23 @@ func (*FakeQuerier) GetTailnetTunnelPeerIDs(context.Context, uuid.UUID) ([]datab
43304332
returnnil,ErrUnimplemented
43314333
}
43324334

4335+
func (q*FakeQuerier)GetTelemetryItem(_ context.Context,keystring) (database.TelemetryItem,error) {
4336+
q.mutex.RLock()
4337+
deferq.mutex.RUnlock()
4338+
4339+
for_,item:=rangeq.telemetryItems {
4340+
ifitem.Key==key {
4341+
returnitem,nil
4342+
}
4343+
}
4344+
4345+
return database.TelemetryItem{},sql.ErrNoRows
4346+
}
4347+
4348+
func (q*FakeQuerier)GetTelemetryItems(_ context.Context) ([]database.TelemetryItem,error) {
4349+
returnq.telemetryItems,nil
4350+
}
4351+
43334352
func (q*FakeQuerier)GetTemplateAppInsights(ctx context.Context,arg database.GetTemplateAppInsightsParams) ([]database.GetTemplateAppInsightsRow,error) {
43344353
err:=validateDatabaseType(arg)
43354354
iferr!=nil {
@@ -8120,6 +8139,30 @@ func (q *FakeQuerier) InsertReplica(_ context.Context, arg database.InsertReplic
81208139
returnreplica,nil
81218140
}
81228141

8142+
func (q*FakeQuerier)InsertTelemetryItemIfNotExists(_ context.Context,arg database.InsertTelemetryItemIfNotExistsParams)error {
8143+
err:=validateDatabaseType(arg)
8144+
iferr!=nil {
8145+
returnerr
8146+
}
8147+
8148+
q.mutex.Lock()
8149+
deferq.mutex.Unlock()
8150+
8151+
for_,item:=rangeq.telemetryItems {
8152+
ifitem.Key==arg.Key {
8153+
returnnil
8154+
}
8155+
}
8156+
8157+
q.telemetryItems=append(q.telemetryItems, database.TelemetryItem{
8158+
Key:arg.Key,
8159+
Value:arg.Value,
8160+
CreatedAt:time.Now(),
8161+
UpdatedAt:time.Now(),
8162+
})
8163+
returnnil
8164+
}
8165+
81238166
func (q*FakeQuerier)InsertTemplate(_ context.Context,arg database.InsertTemplateParams)error {
81248167
iferr:=validateDatabaseType(arg);err!=nil {
81258168
returnerr
@@ -10874,6 +10917,33 @@ func (*FakeQuerier) UpsertTailnetTunnel(_ context.Context, arg database.UpsertTa
1087410917
return database.TailnetTunnel{},ErrUnimplemented
1087510918
}
1087610919

10920+
func (q*FakeQuerier)UpsertTelemetryItem(_ context.Context,arg database.UpsertTelemetryItemParams)error {
10921+
err:=validateDatabaseType(arg)
10922+
iferr!=nil {
10923+
returnerr
10924+
}
10925+
10926+
q.mutex.Lock()
10927+
deferq.mutex.Unlock()
10928+
10929+
fori,item:=rangeq.telemetryItems {
10930+
ifitem.Key==arg.Key {
10931+
q.telemetryItems[i].Value=arg.Value
10932+
q.telemetryItems[i].UpdatedAt=time.Now()
10933+
returnnil
10934+
}
10935+
}
10936+
10937+
q.telemetryItems=append(q.telemetryItems, database.TelemetryItem{
10938+
Key:arg.Key,
10939+
Value:arg.Value,
10940+
CreatedAt:time.Now(),
10941+
UpdatedAt:time.Now(),
10942+
})
10943+
10944+
returnnil
10945+
}
10946+
1087710947
func (q*FakeQuerier)UpsertTemplateUsageStats(ctx context.Context)error {
1087810948
q.mutex.Lock()
1087910949
deferq.mutex.Unlock()

‎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: 58 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: 10 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