Skip to content

Commit 73bafaf

Browse files
committed
telemetry
1 parent 96a37bb commit 73bafaf

File tree

2 files changed

+86
-22
lines changed

2 files changed

+86
-22
lines changed

coderd/telemetry/telemetry.go

+82-22
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,28 @@ func (r *remoteReporter) createSnapshot() (*Snapshot, error) {
624624
}
625625
return nil
626626
})
627+
eg.Go(func() error {
628+
memoryMonitors, err := r.options.Database.FetchMemoryResourceMonitorsCreatedAfter(ctx, createdAfter)
629+
if err != nil {
630+
return xerrors.Errorf("get memory resource monitors: %w", err)
631+
}
632+
snapshot.WorkspaceAgentMemoryResourceMonitors = make([]WorkspaceAgentMemoryResourceMonitor, 0, len(memoryMonitors))
633+
for _, monitor := range memoryMonitors {
634+
snapshot.WorkspaceAgentMemoryResourceMonitors = append(snapshot.WorkspaceAgentMemoryResourceMonitors, ConvertWorkspaceAgentMemoryResourceMonitor(monitor))
635+
}
636+
return nil
637+
})
638+
eg.Go(func() error {
639+
volumeMonitors, err := r.options.Database.FetchVolumesResourceMonitorsCreatedAfter(ctx, createdAfter)
640+
if err != nil {
641+
return xerrors.Errorf("get volume resource monitors: %w", err)
642+
}
643+
snapshot.WorkspaceAgentVolumeResourceMonitors = make([]WorkspaceAgentVolumeResourceMonitor, 0, len(volumeMonitors))
644+
for _, monitor := range volumeMonitors {
645+
snapshot.WorkspaceAgentVolumeResourceMonitors = append(snapshot.WorkspaceAgentVolumeResourceMonitors, ConvertWorkspaceAgentVolumeResourceMonitor(monitor))
646+
}
647+
return nil
648+
})
627649
eg.Go(func() error {
628650
proxies, err := r.options.Database.GetWorkspaceProxies(ctx)
629651
if err != nil {
@@ -765,6 +787,26 @@ func ConvertWorkspaceAgent(agent database.WorkspaceAgent) WorkspaceAgent {
765787
return snapAgent
766788
}
767789

790+
func ConvertWorkspaceAgentMemoryResourceMonitor(monitor database.WorkspaceAgentMemoryResourceMonitor) WorkspaceAgentMemoryResourceMonitor {
791+
return WorkspaceAgentMemoryResourceMonitor{
792+
AgentID: monitor.AgentID,
793+
Enabled: monitor.Enabled,
794+
Threshold: monitor.Threshold,
795+
CreatedAt: monitor.CreatedAt,
796+
UpdatedAt: monitor.UpdatedAt,
797+
}
798+
}
799+
800+
func ConvertWorkspaceAgentVolumeResourceMonitor(monitor database.WorkspaceAgentVolumeResourceMonitor) WorkspaceAgentVolumeResourceMonitor {
801+
return WorkspaceAgentVolumeResourceMonitor{
802+
AgentID: monitor.AgentID,
803+
Enabled: monitor.Enabled,
804+
Threshold: monitor.Threshold,
805+
CreatedAt: monitor.CreatedAt,
806+
UpdatedAt: monitor.UpdatedAt,
807+
}
808+
}
809+
768810
// ConvertWorkspaceAgentStat anonymizes a workspace agent stat.
769811
func ConvertWorkspaceAgentStat(stat database.GetWorkspaceAgentStatsRow) WorkspaceAgentStat {
770812
return WorkspaceAgentStat{
@@ -1083,28 +1125,30 @@ func ConvertTelemetryItem(item database.TelemetryItem) TelemetryItem {
10831125
type Snapshot struct {
10841126
DeploymentID string `json:"deployment_id"`
10851127

1086-
APIKeys []APIKey `json:"api_keys"`
1087-
CLIInvocations []clitelemetry.Invocation `json:"cli_invocations"`
1088-
ExternalProvisioners []ExternalProvisioner `json:"external_provisioners"`
1089-
Licenses []License `json:"licenses"`
1090-
ProvisionerJobs []ProvisionerJob `json:"provisioner_jobs"`
1091-
TemplateVersions []TemplateVersion `json:"template_versions"`
1092-
Templates []Template `json:"templates"`
1093-
Users []User `json:"users"`
1094-
Groups []Group `json:"groups"`
1095-
GroupMembers []GroupMember `json:"group_members"`
1096-
WorkspaceAgentStats []WorkspaceAgentStat `json:"workspace_agent_stats"`
1097-
WorkspaceAgents []WorkspaceAgent `json:"workspace_agents"`
1098-
WorkspaceApps []WorkspaceApp `json:"workspace_apps"`
1099-
WorkspaceBuilds []WorkspaceBuild `json:"workspace_build"`
1100-
WorkspaceProxies []WorkspaceProxy `json:"workspace_proxies"`
1101-
WorkspaceResourceMetadata []WorkspaceResourceMetadata `json:"workspace_resource_metadata"`
1102-
WorkspaceResources []WorkspaceResource `json:"workspace_resources"`
1103-
WorkspaceModules []WorkspaceModule `json:"workspace_modules"`
1104-
Workspaces []Workspace `json:"workspaces"`
1105-
NetworkEvents []NetworkEvent `json:"network_events"`
1106-
Organizations []Organization `json:"organizations"`
1107-
TelemetryItems []TelemetryItem `json:"telemetry_items"`
1128+
APIKeys []APIKey `json:"api_keys"`
1129+
CLIInvocations []clitelemetry.Invocation `json:"cli_invocations"`
1130+
ExternalProvisioners []ExternalProvisioner `json:"external_provisioners"`
1131+
Licenses []License `json:"licenses"`
1132+
ProvisionerJobs []ProvisionerJob `json:"provisioner_jobs"`
1133+
TemplateVersions []TemplateVersion `json:"template_versions"`
1134+
Templates []Template `json:"templates"`
1135+
Users []User `json:"users"`
1136+
Groups []Group `json:"groups"`
1137+
GroupMembers []GroupMember `json:"group_members"`
1138+
WorkspaceAgentStats []WorkspaceAgentStat `json:"workspace_agent_stats"`
1139+
WorkspaceAgents []WorkspaceAgent `json:"workspace_agents"`
1140+
WorkspaceApps []WorkspaceApp `json:"workspace_apps"`
1141+
WorkspaceBuilds []WorkspaceBuild `json:"workspace_build"`
1142+
WorkspaceProxies []WorkspaceProxy `json:"workspace_proxies"`
1143+
WorkspaceResourceMetadata []WorkspaceResourceMetadata `json:"workspace_resource_metadata"`
1144+
WorkspaceResources []WorkspaceResource `json:"workspace_resources"`
1145+
WorkspaceAgentMemoryResourceMonitors []WorkspaceAgentMemoryResourceMonitor `json:"workspace_agent_memory_resource_monitors"`
1146+
WorkspaceAgentVolumeResourceMonitors []WorkspaceAgentVolumeResourceMonitor `json:"workspace_agent_volume_resource_monitors"`
1147+
WorkspaceModules []WorkspaceModule `json:"workspace_modules"`
1148+
Workspaces []Workspace `json:"workspaces"`
1149+
NetworkEvents []NetworkEvent `json:"network_events"`
1150+
Organizations []Organization `json:"organizations"`
1151+
TelemetryItems []TelemetryItem `json:"telemetry_items"`
11081152
}
11091153

11101154
// Deployment contains information about the host running Coder.
@@ -1232,6 +1276,22 @@ type WorkspaceAgentStat struct {
12321276
SessionCountSSH int64 `json:"session_count_ssh"`
12331277
}
12341278

1279+
type WorkspaceAgentMemoryResourceMonitor struct {
1280+
AgentID uuid.UUID `json:"agent_id"`
1281+
Enabled bool `json:"enabled"`
1282+
Threshold int32 `json:"threshold"`
1283+
CreatedAt time.Time `json:"created_at"`
1284+
UpdatedAt time.Time `json:"updated_at"`
1285+
}
1286+
1287+
type WorkspaceAgentVolumeResourceMonitor struct {
1288+
AgentID uuid.UUID `json:"agent_id"`
1289+
Enabled bool `json:"enabled"`
1290+
Threshold int32 `json:"threshold"`
1291+
CreatedAt time.Time `json:"created_at"`
1292+
UpdatedAt time.Time `json:"updated_at"`
1293+
}
1294+
12351295
type WorkspaceApp struct {
12361296
ID uuid.UUID `json:"id"`
12371297
CreatedAt time.Time `json:"created_at"`

coderd/telemetry/telemetry_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ func TestTelemetry(t *testing.T) {
112112
_, _ = dbgen.WorkspaceProxy(t, db, database.WorkspaceProxy{})
113113

114114
_ = dbgen.WorkspaceModule(t, db, database.WorkspaceModule{})
115+
_ = dbgen.WorkspaceAgentMemoryResourceMonitor(t, db, database.WorkspaceAgentMemoryResourceMonitor{})
116+
_ = dbgen.WorkspaceAgentVolumeResourceMonitor(t, db, database.WorkspaceAgentVolumeResourceMonitor{})
115117

116118
_, snapshot := collectSnapshot(t, db, nil)
117119
require.Len(t, snapshot.ProvisionerJobs, 1)
@@ -133,6 +135,8 @@ func TestTelemetry(t *testing.T) {
133135
require.Len(t, snapshot.Organizations, 1)
134136
// We create one item manually above. The other is TelemetryEnabled, created by the snapshotter.
135137
require.Len(t, snapshot.TelemetryItems, 2)
138+
require.Len(t, snapshot.WorkspaceAgentMemoryResourceMonitors, 1)
139+
require.Len(t, snapshot.WorkspaceAgentVolumeResourceMonitors, 1)
136140
wsa := snapshot.WorkspaceAgents[0]
137141
require.Len(t, wsa.Subsystems, 2)
138142
require.Equal(t, string(database.WorkspaceAgentSubsystemEnvbox), wsa.Subsystems[0])

0 commit comments

Comments
 (0)