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

Commitdc6e50d

Browse files
johnstcnmafredri
andauthored
feat(coderd/telemetry): add telemetry for database Tasks (#20279)
Adds Tasks to telemetry snapshotsCo-authored-by: Mathias Fredriksson <mafredri@gmail.com>
1 parent14e8002 commitdc6e50d

File tree

5 files changed

+102
-7
lines changed

5 files changed

+102
-7
lines changed

‎coderd/database/dbgen/dbgen.go‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1561,7 +1561,7 @@ func AIBridgeToolUsage(t testing.TB, db database.Store, seed database.InsertAIBr
15611561
returntoolUsage
15621562
}
15631563

1564-
funcTask(t testing.TB,db database.Store,orig database.TaskTable) database.TaskTable {
1564+
funcTask(t testing.TB,db database.Store,orig database.TaskTable) database.Task {
15651565
t.Helper()
15661566

15671567
parameters:=orig.TemplateParameters
@@ -1581,7 +1581,12 @@ func Task(t testing.TB, db database.Store, orig database.TaskTable) database.Tas
15811581
})
15821582
require.NoError(t,err,"failed to insert task")
15831583

1584-
returntask
1584+
// Return the Task from the view instead of the TaskTable
1585+
fetched,err:=db.GetTaskByID(genCtx,task.ID)
1586+
require.NoError(t,err,"failed to fetch task")
1587+
require.Equal(t,task.ID,fetched.ID)
1588+
1589+
returnfetched
15851590
}
15861591

15871592
funcTaskWorkspaceApp(t testing.TB,db database.Store,orig database.TaskWorkspaceApp) database.TaskWorkspaceApp {

‎coderd/database/querier_test.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6709,7 +6709,7 @@ func TestTasksWithStatusView(t *testing.T) {
67096709
buildTransition database.WorkspaceTransition,
67106710
agentState database.WorkspaceAgentLifecycleState,
67116711
appHealths []database.WorkspaceAppHealth,
6712-
) database.TaskTable {
6712+
) database.Task {
67136713
t.Helper()
67146714

67156715
template:=dbgen.Template(t,db, database.Template{
@@ -7455,7 +7455,7 @@ func TestListTasks(t *testing.T) {
74557455
})
74567456

74577457
// Helper function to create a task
7458-
createTask:=func(orgID,ownerID uuid.UUID) database.TaskTable {
7458+
createTask:=func(orgID,ownerID uuid.UUID) database.Task {
74597459
ws:=dbgen.Workspace(t,db, database.WorkspaceTable{
74607460
OrganizationID:orgID,
74617461
OwnerID:ownerID,

‎coderd/provisionerdserver/provisionerdserver_test.go‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3003,9 +3003,9 @@ func TestCompleteJob(t *testing.T) {
30033003
OwnerID:user.ID,
30043004
OrganizationID:pd.OrganizationID,
30053005
})
3006-
vartaskTable database.TaskTable
3006+
vargenTask database.Task
30073007
iftc.isTask {
3008-
taskTable=dbgen.Task(t,db, database.TaskTable{
3008+
genTask=dbgen.Task(t,db, database.TaskTable{
30093009
OwnerID:user.ID,
30103010
OrganizationID:pd.OrganizationID,
30113011
WorkspaceID: uuid.NullUUID{UUID:workspaceTable.ID,Valid:true},
@@ -3081,7 +3081,7 @@ func TestCompleteJob(t *testing.T) {
30813081
require.Equal(t,tc.expectHasAiTask,build.HasAITask.Bool)
30823082

30833083
iftc.isTask {
3084-
task,err:=db.GetTaskByID(ctx,taskTable.ID)
3084+
task,err:=db.GetTaskByID(ctx,genTask.ID)
30853085
require.NoError(t,err)
30863086
require.Equal(t,tc.expectTaskStatus,task.Status)
30873087
}

‎coderd/telemetry/telemetry.go‎

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,19 @@ func (r *remoteReporter) createSnapshot() (*Snapshot, error) {
730730
}
731731
returnnil
732732
})
733+
eg.Go(func()error {
734+
dbTasks,err:=r.options.Database.ListTasks(ctx, database.ListTasksParams{
735+
OwnerID:uuid.Nil,
736+
OrganizationID:uuid.Nil,
737+
})
738+
iferr!=nil {
739+
returnerr
740+
}
741+
for_,dbTask:=rangedbTasks {
742+
snapshot.Tasks=append(snapshot.Tasks,ConvertTask(dbTask))
743+
}
744+
returnnil
745+
})
733746

734747
err:=eg.Wait()
735748
iferr!=nil {
@@ -1205,6 +1218,7 @@ type Snapshot struct {
12051218
Workspaces []Workspace`json:"workspaces"`
12061219
NetworkEvents []NetworkEvent`json:"network_events"`
12071220
Organizations []Organization`json:"organizations"`
1221+
Tasks []Task`json:"tasks"`
12081222
TelemetryItems []TelemetryItem`json:"telemetry_items"`
12091223
UserTailnetConnections []UserTailnetConnection`json:"user_tailnet_connections"`
12101224
PrebuiltWorkspaces []PrebuiltWorkspace`json:"prebuilt_workspaces"`
@@ -1753,6 +1767,52 @@ type Organization struct {
17531767
CreatedAt time.Time`json:"created_at"`
17541768
}
17551769

1770+
typeTaskstruct {
1771+
IDstring`json:"id"`
1772+
OrganizationIDstring`json:"organization_id"`
1773+
OwnerIDstring`json:"owner_id"`
1774+
Namestring`json:"name"`
1775+
WorkspaceID*string`json:"workspace_id"`
1776+
WorkspaceBuildNumber*int64`json:"workspace_build_number"`
1777+
WorkspaceAgentID*string`json:"workspace_agent_id"`
1778+
WorkspaceAppID*string`json:"workspace_app_id"`
1779+
TemplateVersionIDstring`json:"template_version_id"`
1780+
PromptHashstring`json:"prompt_hash"`// Prompt is hashed for privacy.
1781+
CreatedAt time.Time`json:"created_at"`
1782+
Statusstring`json:"status"`
1783+
}
1784+
1785+
// ConvertTask anonymizes a Task.
1786+
funcConvertTask(task database.Task)Task {
1787+
t:=&Task{
1788+
ID:task.ID.String(),
1789+
OrganizationID:task.OrganizationID.String(),
1790+
OwnerID:task.OwnerID.String(),
1791+
Name:task.Name,
1792+
WorkspaceID:nil,
1793+
WorkspaceBuildNumber:nil,
1794+
WorkspaceAgentID:nil,
1795+
WorkspaceAppID:nil,
1796+
TemplateVersionID:task.TemplateVersionID.String(),
1797+
PromptHash:fmt.Sprintf("%x",sha256.Sum256([]byte(task.Prompt))),
1798+
CreatedAt:task.CreatedAt,
1799+
Status:string(task.Status),
1800+
}
1801+
iftask.WorkspaceID.Valid {
1802+
t.WorkspaceID=ptr.Ref(task.WorkspaceID.UUID.String())
1803+
}
1804+
iftask.WorkspaceBuildNumber.Valid {
1805+
t.WorkspaceBuildNumber=ptr.Ref(int64(task.WorkspaceBuildNumber.Int32))
1806+
}
1807+
iftask.WorkspaceAgentID.Valid {
1808+
t.WorkspaceAgentID=ptr.Ref(task.WorkspaceAgentID.UUID.String())
1809+
}
1810+
iftask.WorkspaceAppID.Valid {
1811+
t.WorkspaceAppID=ptr.Ref(task.WorkspaceAppID.UUID.String())
1812+
}
1813+
return*t
1814+
}
1815+
17561816
typetelemetryItemKeystring
17571817

17581818
// The comment below gets rid of the warning that the name "TelemetryItemKey" has

‎coderd/telemetry/telemetry_test.go‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,20 @@ func TestTelemetry(t *testing.T) {
151151
HasAITask: sql.NullBool{Valid:true,Bool:true},
152152
AITaskSidebarAppID: uuid.NullUUID{Valid:true,UUID:taskWsApp.ID},
153153
})
154+
task:=dbgen.Task(t,db, database.TaskTable{
155+
OwnerID:user.ID,
156+
OrganizationID:org.ID,
157+
WorkspaceID: uuid.NullUUID{Valid:true,UUID:taskWs.ID},
158+
TemplateVersionID:taskTV.ID,
159+
Prompt:"example prompt",
160+
TemplateParameters:json.RawMessage(`{"foo": "bar"}`),
161+
})
162+
taskWA:=dbgen.TaskWorkspaceApp(t,db, database.TaskWorkspaceApp{
163+
TaskID:task.ID,
164+
WorkspaceAgentID: uuid.NullUUID{Valid:true,UUID:taskWsAgent.ID},
165+
WorkspaceAppID: uuid.NullUUID{Valid:true,UUID:taskWsApp.ID},
166+
WorkspaceBuildNumber:taskWB.BuildNumber,
167+
})
154168

155169
group:=dbgen.Group(t,db, database.Group{
156170
OrganizationID:org.ID,
@@ -220,6 +234,22 @@ func TestTelemetry(t *testing.T) {
220234
require.Len(t,wsa.Subsystems,2)
221235
require.Equal(t,string(database.WorkspaceAgentSubsystemEnvbox),wsa.Subsystems[0])
222236
require.Equal(t,string(database.WorkspaceAgentSubsystemExectrace),wsa.Subsystems[1])
237+
require.Len(t,snapshot.Tasks,1)
238+
for_,snapTask:=rangesnapshot.Tasks {
239+
assert.Equal(t,task.ID.String(),snapTask.ID)
240+
assert.Equal(t,task.OrganizationID.String(),snapTask.OrganizationID)
241+
assert.Equal(t,task.OwnerID.String(),snapTask.OwnerID)
242+
assert.Equal(t,task.Name,snapTask.Name)
243+
ifassert.True(t,task.WorkspaceID.Valid) {
244+
assert.Equal(t,task.WorkspaceID.UUID.String(),*snapTask.WorkspaceID)
245+
}
246+
assert.EqualValues(t,taskWA.WorkspaceBuildNumber,*snapTask.WorkspaceBuildNumber)
247+
assert.Equal(t,taskWA.WorkspaceAgentID.UUID.String(),*snapTask.WorkspaceAgentID)
248+
assert.Equal(t,taskWA.WorkspaceAppID.UUID.String(),*snapTask.WorkspaceAppID)
249+
assert.Equal(t,task.TemplateVersionID.String(),snapTask.TemplateVersionID)
250+
assert.Equal(t,"e196fe22e61cfa32d8c38749e0ce348108bb4cae29e2c36cdcce7e77faa9eb5f",snapTask.PromptHash)
251+
assert.Equal(t,task.CreatedAt.UTC(),snapTask.CreatedAt.UTC())
252+
}
223253

224254
require.True(t,slices.ContainsFunc(snapshot.TemplateVersions,func(ttv telemetry.TemplateVersion)bool {
225255
ifttv.ID!=taskTV.ID {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp