@@ -624,6 +624,28 @@ func (r *remoteReporter) createSnapshot() (*Snapshot, error) {
624624}
625625return 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+ })
627649eg .Go (func ()error {
628650proxies ,err := r .options .Database .GetWorkspaceProxies (ctx )
629651if err != nil {
@@ -765,6 +787,26 @@ func ConvertWorkspaceAgent(agent database.WorkspaceAgent) WorkspaceAgent {
765787return 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.
769811func ConvertWorkspaceAgentStat (stat database.GetWorkspaceAgentStatsRow )WorkspaceAgentStat {
770812return WorkspaceAgentStat {
@@ -1083,28 +1125,30 @@ func ConvertTelemetryItem(item database.TelemetryItem) TelemetryItem {
10831125type Snapshot struct {
10841126DeploymentID 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 {
12321276SessionCountSSH 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+
12351295type WorkspaceApp struct {
12361296ID uuid.UUID `json:"id"`
12371297CreatedAt time.Time `json:"created_at"`