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

Lines changed: 82 additions & 22 deletions
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

Lines changed: 4 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy