Skip to content

feat: improve resources_monitoring for OOM & OOD monitoring #16241

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
Feb 4, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9c4071e
work on resources monitoring
defelmnq Jan 23, 2025
5609041
work on migrations and db
defelmnq Jan 23, 2025
fd2dbe7
work on database integration
defelmnq Jan 23, 2025
d2b42b7
add metadata logic to db
defelmnq Jan 27, 2025
893c54c
add metadata logic to db
defelmnq Jan 27, 2025
15a3837
revert formatting
defelmnq Jan 27, 2025
de9e73a
improve errors handling
defelmnq Jan 27, 2025
d8568a3
work on fake db
defelmnq Jan 27, 2025
87737eb
work on db
defelmnq Jan 27, 2025
5cd023f
update provisioner version
defelmnq Jan 27, 2025
25aedf0
work on testdata
defelmnq Jan 28, 2025
a5f44aa
merge
defelmnq Jan 29, 2025
6f0373f
work on resources monitor
defelmnq Jan 29, 2025
4bfb4cb
worked on dbmem and dbauthz
defelmnq Jan 29, 2025
68b022f
add dbauthz tests
defelmnq Jan 29, 2025
5bc849e
work on errors message improvement
defelmnq Jan 31, 2025
8a79421
improve database indexes
defelmnq Feb 3, 2025
7d9a05b
Merge remote-tracking branch 'origin/main' into agent_resource_monito…
defelmnq Feb 3, 2025
93609ca
merge main and rename migration
defelmnq Feb 3, 2025
1bf0866
fix resources volumes allocation
defelmnq Feb 3, 2025
ffb6f91
regenerate
defelmnq Feb 3, 2025
aacc294
rename fixture
defelmnq Feb 3, 2025
961ab25
use agent_id uuid
defelmnq Feb 3, 2025
d7f57d7
work on tests
defelmnq Feb 3, 2025
401b000
work on tests
defelmnq Feb 3, 2025
930bfbb
add tests on provisionerserver
defelmnq Feb 3, 2025
fae8dc9
remove unrequired test case
defelmnq Feb 3, 2025
d98ea6f
Merge remote-tracking branch 'origin/main' into agent_resource_monito…
defelmnq Feb 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
work on resources monitor
  • Loading branch information
defelmnq committed Jan 29, 2025
commit 6f0373fa478fbd05f1166a484212312b37868914
20 changes: 14 additions & 6 deletions coderd/database/dbauthz/dbauthz.go
Original file line number Diff line number Diff line change
Expand Up @@ -1391,8 +1391,8 @@
return update(q.log, q.auth, fetch, q.db.FavoriteWorkspace)(ctx, id)
}

func (q *querier) FetchAgentResourceMonitorsByAgentID(ctx context.Context, agentID uuid.UUID) ([]database.WorkspaceAgentResourceMonitor, error) {
return q.db.FetchAgentResourceMonitorsByAgentID(ctx, agentID)
func (q *querier) FetchMemoryResourceMonitorsByAgentID(ctx context.Context, agentID uuid.UUID) (database.WorkspaceAgentMemoryResourceMonitor, error) {

Check failure on line 1394 in coderd/database/dbauthz/dbauthz.go

View workflow job for this annotation

GitHub Actions / lint

unused-receiver: method receiver 'q' is not referenced in method's body, consider removing or renaming it as _ (revive)
panic("not implemented")
}

func (q *querier) FetchNewMessageMetadata(ctx context.Context, arg database.FetchNewMessageMetadataParams) (database.FetchNewMessageMetadataRow, error) {
Expand All @@ -1402,6 +1402,10 @@
return q.db.FetchNewMessageMetadata(ctx, arg)
}

func (q *querier) FetchVolumesResourceMonitorsByAgentID(ctx context.Context, agentID uuid.UUID) ([]database.WorkspaceAgentVolumeResourceMonitor, error) {

Check failure on line 1405 in coderd/database/dbauthz/dbauthz.go

View workflow job for this annotation

GitHub Actions / lint

unused-receiver: method receiver 'q' is not referenced in method's body, consider removing or renaming it as _ (revive)
panic("not implemented")
}

func (q *querier) GetAPIKeyByID(ctx context.Context, id string) (database.APIKey, error) {
return fetch(q.log, q.auth, q.db.GetAPIKeyByID)(ctx, id)
}
Expand Down Expand Up @@ -2993,6 +2997,10 @@
return q.db.InsertLicense(ctx, arg)
}

func (q *querier) InsertMemoryResourceMonitor(ctx context.Context, arg database.InsertMemoryResourceMonitorParams) (database.WorkspaceAgentMemoryResourceMonitor, error) {

Check failure on line 3000 in coderd/database/dbauthz/dbauthz.go

View workflow job for this annotation

GitHub Actions / lint

unused-receiver: method receiver 'q' is not referenced in method's body, consider removing or renaming it as _ (revive)
panic("not implemented")
}

func (q *querier) InsertMissingGroups(ctx context.Context, arg database.InsertMissingGroupsParams) ([]database.Group, error) {
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
return nil, err
Expand Down Expand Up @@ -3178,6 +3186,10 @@
return q.db.InsertUserLink(ctx, arg)
}

func (q *querier) InsertVolumeResourceMonitor(ctx context.Context, arg database.InsertVolumeResourceMonitorParams) (database.WorkspaceAgentVolumeResourceMonitor, error) {

Check failure on line 3189 in coderd/database/dbauthz/dbauthz.go

View workflow job for this annotation

GitHub Actions / lint

unused-receiver: method receiver 'q' is not referenced in method's body, consider removing or renaming it as _ (revive)
panic("not implemented")
}

func (q *querier) InsertWorkspace(ctx context.Context, arg database.InsertWorkspaceParams) (database.WorkspaceTable, error) {
obj := rbac.ResourceWorkspace.WithOwner(arg.OwnerID.String()).InOrg(arg.OrganizationID)
tpl, err := q.GetTemplateByID(ctx, arg.TemplateID)
Expand Down Expand Up @@ -3218,10 +3230,6 @@
return q.db.InsertWorkspaceAgentMetadata(ctx, arg)
}

func (q *querier) InsertWorkspaceAgentResourceMonitor(ctx context.Context, arg database.InsertWorkspaceAgentResourceMonitorParams) (database.WorkspaceAgentResourceMonitor, error) {
return q.db.InsertWorkspaceAgentResourceMonitor(ctx, arg)
}

func (q *querier) InsertWorkspaceAgentScriptTimings(ctx context.Context, arg database.InsertWorkspaceAgentScriptTimingsParams) (database.WorkspaceAgentScriptTiming, error) {
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
return database.WorkspaceAgentScriptTiming{}, err
Expand Down
155 changes: 76 additions & 79 deletions coderd/database/dbmem/dbmem.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,57 +190,58 @@
userLinks []database.UserLink

// New tables
auditLogs []database.AuditLog
cryptoKeys []database.CryptoKey
dbcryptKeys []database.DBCryptKey
files []database.File
externalAuthLinks []database.ExternalAuthLink
gitSSHKey []database.GitSSHKey
groupMembers []database.GroupMemberTable
groups []database.Group
jfrogXRayScans []database.JfrogXrayScan
licenses []database.License
notificationMessages []database.NotificationMessage
notificationPreferences []database.NotificationPreference
notificationReportGeneratorLogs []database.NotificationReportGeneratorLog
oauth2ProviderApps []database.OAuth2ProviderApp
oauth2ProviderAppSecrets []database.OAuth2ProviderAppSecret
oauth2ProviderAppCodes []database.OAuth2ProviderAppCode
oauth2ProviderAppTokens []database.OAuth2ProviderAppToken
parameterSchemas []database.ParameterSchema
provisionerDaemons []database.ProvisionerDaemon
provisionerJobLogs []database.ProvisionerJobLog
provisionerJobs []database.ProvisionerJob
provisionerKeys []database.ProvisionerKey
replicas []database.Replica
templateVersions []database.TemplateVersionTable
templateVersionParameters []database.TemplateVersionParameter
templateVersionVariables []database.TemplateVersionVariable
templateVersionWorkspaceTags []database.TemplateVersionWorkspaceTag
templates []database.TemplateTable
templateUsageStats []database.TemplateUsageStat
workspaceAgents []database.WorkspaceAgent
workspaceAgentMetadata []database.WorkspaceAgentMetadatum
workspaceAgentLogs []database.WorkspaceAgentLog
workspaceAgentLogSources []database.WorkspaceAgentLogSource
workspaceAgentPortShares []database.WorkspaceAgentPortShare
workspaceAgentScriptTimings []database.WorkspaceAgentScriptTiming
workspaceAgentScripts []database.WorkspaceAgentScript
workspaceAgentStats []database.WorkspaceAgentStat
workspaceAgentResourceMonitors []database.WorkspaceAgentResourceMonitor
workspaceApps []database.WorkspaceApp
workspaceAppStatsLastInsertID int64
workspaceAppStats []database.WorkspaceAppStat
workspaceBuilds []database.WorkspaceBuild
workspaceBuildParameters []database.WorkspaceBuildParameter
workspaceResourceMetadata []database.WorkspaceResourceMetadatum
workspaceResources []database.WorkspaceResource
workspaceModules []database.WorkspaceModule
workspaces []database.WorkspaceTable
workspaceProxies []database.WorkspaceProxy
customRoles []database.CustomRole
provisionerJobTimings []database.ProvisionerJobTiming
runtimeConfig map[string]string
auditLogs []database.AuditLog
cryptoKeys []database.CryptoKey
dbcryptKeys []database.DBCryptKey
files []database.File
externalAuthLinks []database.ExternalAuthLink
gitSSHKey []database.GitSSHKey
groupMembers []database.GroupMemberTable
groups []database.Group
jfrogXRayScans []database.JfrogXrayScan
licenses []database.License
notificationMessages []database.NotificationMessage
notificationPreferences []database.NotificationPreference
notificationReportGeneratorLogs []database.NotificationReportGeneratorLog
oauth2ProviderApps []database.OAuth2ProviderApp
oauth2ProviderAppSecrets []database.OAuth2ProviderAppSecret
oauth2ProviderAppCodes []database.OAuth2ProviderAppCode
oauth2ProviderAppTokens []database.OAuth2ProviderAppToken
parameterSchemas []database.ParameterSchema
provisionerDaemons []database.ProvisionerDaemon
provisionerJobLogs []database.ProvisionerJobLog
provisionerJobs []database.ProvisionerJob
provisionerKeys []database.ProvisionerKey
replicas []database.Replica
templateVersions []database.TemplateVersionTable
templateVersionParameters []database.TemplateVersionParameter
templateVersionVariables []database.TemplateVersionVariable
templateVersionWorkspaceTags []database.TemplateVersionWorkspaceTag
templates []database.TemplateTable
templateUsageStats []database.TemplateUsageStat
workspaceAgents []database.WorkspaceAgent
workspaceAgentMetadata []database.WorkspaceAgentMetadatum
workspaceAgentLogs []database.WorkspaceAgentLog
workspaceAgentLogSources []database.WorkspaceAgentLogSource
workspaceAgentPortShares []database.WorkspaceAgentPortShare
workspaceAgentScriptTimings []database.WorkspaceAgentScriptTiming
workspaceAgentScripts []database.WorkspaceAgentScript
workspaceAgentStats []database.WorkspaceAgentStat
workspaceAgentMemoryResourceMonitors []database.WorkspaceAgentMemoryResourceMonitor

Check failure on line 230 in coderd/database/dbmem/dbmem.go

View workflow job for this annotation

GitHub Actions / lint

field `workspaceAgentMemoryResourceMonitors` is unused (unused)
workspaceAgentVolumeResourceMonitors []database.WorkspaceAgentVolumeResourceMonitor

Check failure on line 231 in coderd/database/dbmem/dbmem.go

View workflow job for this annotation

GitHub Actions / lint

field `workspaceAgentVolumeResourceMonitors` is unused (unused)
workspaceApps []database.WorkspaceApp
workspaceAppStatsLastInsertID int64
workspaceAppStats []database.WorkspaceAppStat
workspaceBuilds []database.WorkspaceBuild
workspaceBuildParameters []database.WorkspaceBuildParameter
workspaceResourceMetadata []database.WorkspaceResourceMetadatum
workspaceResources []database.WorkspaceResource
workspaceModules []database.WorkspaceModule
workspaces []database.WorkspaceTable
workspaceProxies []database.WorkspaceProxy
customRoles []database.CustomRole
provisionerJobTimings []database.ProvisionerJobTiming
runtimeConfig map[string]string
// Locks is a map of lock names. Any keys within the map are currently
// locked.
locks map[int64]struct{}
Expand Down Expand Up @@ -2356,18 +2357,8 @@
return nil
}

func (q *FakeQuerier) FetchAgentResourceMonitorsByAgentID(_ context.Context, agentID uuid.UUID) ([]database.WorkspaceAgentResourceMonitor, error) {
q.mutex.RLock()
defer q.mutex.RUnlock()

monitors := make([]database.WorkspaceAgentResourceMonitor, 0)
for _, monitor := range q.workspaceAgentResourceMonitors {
if monitor.AgentID == agentID {
monitors = append(monitors, monitor)
}
}

return monitors, nil
func (q *FakeQuerier) FetchMemoryResourceMonitorsByAgentID(ctx context.Context, agentID uuid.UUID) (database.WorkspaceAgentMemoryResourceMonitor, error) {

Check failure on line 2360 in coderd/database/dbmem/dbmem.go

View workflow job for this annotation

GitHub Actions / lint

unused-receiver: method receiver 'q' is not referenced in method's body, consider removing or renaming it as _ (revive)
panic("not implemented")
}

func (q *FakeQuerier) FetchNewMessageMetadata(_ context.Context, arg database.FetchNewMessageMetadataParams) (database.FetchNewMessageMetadataRow, error) {
Expand Down Expand Up @@ -2402,6 +2393,10 @@
}, nil
}

func (q *FakeQuerier) FetchVolumesResourceMonitorsByAgentID(ctx context.Context, agentID uuid.UUID) ([]database.WorkspaceAgentVolumeResourceMonitor, error) {

Check failure on line 2396 in coderd/database/dbmem/dbmem.go

View workflow job for this annotation

GitHub Actions / lint

unused-receiver: method receiver 'q' is not referenced in method's body, consider removing or renaming it as _ (revive)
panic("not implemented")
}

func (q *FakeQuerier) GetAPIKeyByID(_ context.Context, id string) (database.APIKey, error) {
q.mutex.RLock()
defer q.mutex.RUnlock()
Expand Down Expand Up @@ -7791,6 +7786,15 @@
return l, nil
}

func (q *FakeQuerier) InsertMemoryResourceMonitor(ctx context.Context, arg database.InsertMemoryResourceMonitorParams) (database.WorkspaceAgentMemoryResourceMonitor, error) {

Check failure on line 7789 in coderd/database/dbmem/dbmem.go

View workflow job for this annotation

GitHub Actions / lint

unused-receiver: method receiver 'q' is not referenced in method's body, consider removing or renaming it as _ (revive)
err := validateDatabaseType(arg)
if err != nil {
return database.WorkspaceAgentMemoryResourceMonitor{}, err
}

panic("not implemented")
}

func (q *FakeQuerier) InsertMissingGroups(_ context.Context, arg database.InsertMissingGroupsParams) ([]database.Group, error) {
err := validateDatabaseType(arg)
if err != nil {
Expand Down Expand Up @@ -8394,6 +8398,15 @@
return link, nil
}

func (q *FakeQuerier) InsertVolumeResourceMonitor(ctx context.Context, arg database.InsertVolumeResourceMonitorParams) (database.WorkspaceAgentVolumeResourceMonitor, error) {

Check failure on line 8401 in coderd/database/dbmem/dbmem.go

View workflow job for this annotation

GitHub Actions / lint

unused-receiver: method receiver 'q' is not referenced in method's body, consider removing or renaming it as _ (revive)
err := validateDatabaseType(arg)
if err != nil {
return database.WorkspaceAgentVolumeResourceMonitor{}, err
}

panic("not implemented")
}

func (q *FakeQuerier) InsertWorkspace(_ context.Context, arg database.InsertWorkspaceParams) (database.WorkspaceTable, error) {
if err := validateDatabaseType(arg); err != nil {
return database.WorkspaceTable{}, err
Expand Down Expand Up @@ -8543,22 +8556,6 @@
return nil
}

func (q *FakeQuerier) InsertWorkspaceAgentResourceMonitor(_ context.Context, arg database.InsertWorkspaceAgentResourceMonitorParams) (database.WorkspaceAgentResourceMonitor, error) {
err := validateDatabaseType(arg)
if err != nil {
return database.WorkspaceAgentResourceMonitor{}, err
}

q.mutex.Lock()
defer q.mutex.Unlock()

monitor := database.WorkspaceAgentResourceMonitor(arg)

q.workspaceAgentResourceMonitors = append(q.workspaceAgentResourceMonitors, monitor)

return monitor, nil
}

func (q *FakeQuerier) InsertWorkspaceAgentScriptTimings(_ context.Context, arg database.InsertWorkspaceAgentScriptTimingsParams) (database.WorkspaceAgentScriptTiming, error) {
err := validateDatabaseType(arg)
if err != nil {
Expand Down
34 changes: 24 additions & 10 deletions coderd/database/dbmetrics/querymetrics.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading