mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
feat(coderd/database): keep only 1 day of workspace_agent_stats
after rollup (#12674)
This commit is contained in:
committed by
GitHub
parent
4a6693a171
commit
e17e8aa3c9
@ -1506,13 +1506,65 @@ func (q *FakeQuerier) DeleteOldWorkspaceAgentStats(_ context.Context) error {
|
||||
q.mutex.Lock()
|
||||
defer q.mutex.Unlock()
|
||||
|
||||
/*
|
||||
DELETE FROM
|
||||
workspace_agent_stats
|
||||
WHERE
|
||||
created_at < (
|
||||
SELECT
|
||||
COALESCE(
|
||||
-- When generating initial template usage stats, all the
|
||||
-- raw agent stats are needed, after that only ~30 mins
|
||||
-- from last rollup is needed. Deployment stats seem to
|
||||
-- use between 15 mins and 1 hour of data. We keep a
|
||||
-- little bit more (1 day) just in case.
|
||||
MAX(start_time) - '1 days'::interval,
|
||||
-- Fall back to 6 months ago if there are no template
|
||||
-- usage stats so that we don't delete the data before
|
||||
-- it's rolled up.
|
||||
NOW() - '6 months'::interval
|
||||
)
|
||||
FROM
|
||||
template_usage_stats
|
||||
)
|
||||
AND created_at < (
|
||||
-- Delete at most in batches of 3 days (with a batch size of 3 days, we
|
||||
-- can clear out the previous 6 months of data in ~60 iterations) whilst
|
||||
-- keeping the DB load relatively low.
|
||||
SELECT
|
||||
COALESCE(MIN(created_at) + '3 days'::interval, NOW())
|
||||
FROM
|
||||
workspace_agent_stats
|
||||
);
|
||||
*/
|
||||
|
||||
now := dbtime.Now()
|
||||
sixMonthInterval := 6 * 30 * 24 * time.Hour
|
||||
sixMonthsAgo := now.Add(-sixMonthInterval)
|
||||
var limit time.Time
|
||||
// MAX
|
||||
for _, stat := range q.templateUsageStats {
|
||||
if stat.StartTime.After(limit) {
|
||||
limit = stat.StartTime.AddDate(0, 0, -1)
|
||||
}
|
||||
}
|
||||
// COALESCE
|
||||
if limit.IsZero() {
|
||||
limit = now.AddDate(0, -6, 0)
|
||||
}
|
||||
|
||||
var validStats []database.WorkspaceAgentStat
|
||||
var batchLimit time.Time
|
||||
for _, stat := range q.workspaceAgentStats {
|
||||
if stat.CreatedAt.Before(sixMonthsAgo) {
|
||||
if batchLimit.IsZero() || stat.CreatedAt.Before(batchLimit) {
|
||||
batchLimit = stat.CreatedAt
|
||||
}
|
||||
}
|
||||
if batchLimit.IsZero() {
|
||||
batchLimit = time.Now()
|
||||
} else {
|
||||
batchLimit = batchLimit.AddDate(0, 0, 3)
|
||||
}
|
||||
for _, stat := range q.workspaceAgentStats {
|
||||
if stat.CreatedAt.Before(limit) && stat.CreatedAt.Before(batchLimit) {
|
||||
continue
|
||||
}
|
||||
validStats = append(validStats, stat)
|
||||
|
Reference in New Issue
Block a user