Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit37f6f3a

Browse files
committed
fix: implementGetTemplateInsightsByTemplate in dbmem
1 parent129571e commit37f6f3a

File tree

1 file changed

+47
-76
lines changed

1 file changed

+47
-76
lines changed

‎coderd/database/dbmem/dbmem.go

Lines changed: 47 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -3506,90 +3506,61 @@ func (q *FakeQuerier) GetTemplateInsightsByTemplate(_ context.Context, arg datab
35063506
q.mutex.RLock()
35073507
deferq.mutex.RUnlock()
35083508

3509-
// map time.Time x TemplateID x UserID x <usage>
3510-
appUsageByTemplateAndUser:=map[time.Time]map[uuid.UUID]map[uuid.UUID]database.GetTemplateInsightsByTemplateRow{}
3511-
3512-
// Review agent stats in terms of usage
3513-
templateIDSet:=make(map[uuid.UUID]struct{})
3509+
/*
3510+
SELECT
3511+
template_id,
3512+
COUNT(DISTINCT user_id) AS active_users,
3513+
(SUM(usage_mins) * 60)::bigint AS usage_total_seconds, -- Includes app usage.
3514+
(SUM(ssh_mins) * 60)::bigint AS usage_ssh_seconds,
3515+
(SUM(sftp_mins) * 60)::bigint AS usage_sftp_seconds,
3516+
(SUM(reconnecting_pty_mins) * 60)::bigint AS usage_reconnecting_pty_seconds,
3517+
(SUM(vscode_mins) * 60)::bigint AS usage_vscode_seconds,
3518+
(SUM(jetbrains_mins) * 60)::bigint AS usage_jetbrains_seconds
3519+
FROM
3520+
template_usage_stats
3521+
WHERE
3522+
start_time >= @start_time::timestamptz
3523+
AND end_time <= @end_time::timestamptz
3524+
GROUP BY template_id;
3525+
*/
35143526

3515-
for_,s:=rangeq.workspaceAgentStats {
3516-
ifs.CreatedAt.Before(arg.StartTime)||s.CreatedAt.Equal(arg.EndTime)||s.CreatedAt.After(arg.EndTime) {
3517-
continue
3518-
}
3519-
ifs.ConnectionCount==0 {
3527+
typegroupedstruct {
3528+
database.GetTemplateInsightsByTemplateRow
3529+
activeUserIDsmap[uuid.UUID]struct{}
3530+
}
3531+
groupedByTemplateID:=make(map[uuid.UUID]grouped)
3532+
for_,tus:=rangeq.templateUsageStats {
3533+
iftus.StartTime.Before(arg.StartTime)||tus.EndTime.After(arg.EndTime) {
35203534
continue
35213535
}
3522-
3523-
t:=s.CreatedAt.Truncate(time.Minute)
3524-
templateIDSet[s.TemplateID]=struct{}{}
3525-
3526-
if_,ok:=appUsageByTemplateAndUser[t];!ok {
3527-
appUsageByTemplateAndUser[t]=make(map[uuid.UUID]map[uuid.UUID]database.GetTemplateInsightsByTemplateRow)
3528-
}
3529-
3530-
if_,ok:=appUsageByTemplateAndUser[t][s.TemplateID];!ok {
3531-
appUsageByTemplateAndUser[t][s.TemplateID]=make(map[uuid.UUID]database.GetTemplateInsightsByTemplateRow)
3532-
}
3533-
3534-
if_,ok:=appUsageByTemplateAndUser[t][s.TemplateID][s.UserID];!ok {
3535-
appUsageByTemplateAndUser[t][s.TemplateID][s.UserID]= database.GetTemplateInsightsByTemplateRow{}
3536-
}
3537-
3538-
u:=appUsageByTemplateAndUser[t][s.TemplateID][s.UserID]
3539-
ifs.SessionCountJetBrains>0 {
3540-
u.UsageJetbrainsSeconds=60
3541-
}
3542-
ifs.SessionCountVSCode>0 {
3543-
u.UsageVscodeSeconds=60
3544-
}
3545-
ifs.SessionCountReconnectingPTY>0 {
3546-
u.UsageReconnectingPtySeconds=60
3547-
}
3548-
ifs.SessionCountSSH>0 {
3549-
u.UsageSshSeconds=60
3536+
row,ok:=groupedByTemplateID[tus.TemplateID]
3537+
if!ok {
3538+
row=grouped{
3539+
GetTemplateInsightsByTemplateRow: database.GetTemplateInsightsByTemplateRow{
3540+
TemplateID:tus.TemplateID,
3541+
},
3542+
activeUserIDs:make(map[uuid.UUID]struct{}),
3543+
}
35503544
}
3551-
appUsageByTemplateAndUser[t][s.TemplateID][s.UserID]=u
3545+
row.activeUserIDs[tus.UserID]=struct{}{}
3546+
row.ActiveUsers=int64(len(row.activeUserIDs))
3547+
row.UsageTotalSeconds+=int64(tus.UsageMins)*60
3548+
row.UsageSshSeconds+=int64(tus.SshMins)*60
3549+
row.UsageSftpSeconds+=int64(tus.SftpMins)*60
3550+
row.UsageReconnectingPtySeconds+=int64(tus.ReconnectingPtyMins)*60
3551+
row.UsageVscodeSeconds+=int64(tus.VscodeMins)*60
3552+
row.UsageJetbrainsSeconds+=int64(tus.JetbrainsMins)*60
3553+
groupedByTemplateID[tus.TemplateID]=row
35523554
}
35533555

3554-
// Sort used templates
3555-
templateIDs:=make([]uuid.UUID,0,len(templateIDSet))
3556-
fortemplateID:=rangetemplateIDSet {
3557-
templateIDs=append(templateIDs,templateID)
3556+
varrows []database.GetTemplateInsightsByTemplateRow
3557+
for_,row:=rangegroupedByTemplateID {
3558+
rows=append(rows,row.GetTemplateInsightsByTemplateRow)
35583559
}
3559-
slices.SortFunc(templateIDs,func(a,buuid.UUID)int {
3560-
returnslice.Ascending(a.String(),b.String())
3560+
slices.SortFunc(rows,func(a,bdatabase.GetTemplateInsightsByTemplateRow)int {
3561+
returnslice.Ascending(a.TemplateID.String(),b.TemplateID.String())
35613562
})
3562-
3563-
// Build result
3564-
varresult []database.GetTemplateInsightsByTemplateRow
3565-
for_,templateID:=rangetemplateIDs {
3566-
r:= database.GetTemplateInsightsByTemplateRow{
3567-
TemplateID:templateID,
3568-
}
3569-
3570-
uniqueUsers:=map[uuid.UUID]struct{}{}
3571-
3572-
for_,mTemplateUserUsage:=rangeappUsageByTemplateAndUser {
3573-
mUserUsage,ok:=mTemplateUserUsage[templateID]
3574-
if!ok {
3575-
continue// template was not used in this time window
3576-
}
3577-
3578-
foruserID,usage:=rangemUserUsage {
3579-
uniqueUsers[userID]=struct{}{}
3580-
3581-
r.UsageJetbrainsSeconds+=usage.UsageJetbrainsSeconds
3582-
r.UsageVscodeSeconds+=usage.UsageVscodeSeconds
3583-
r.UsageReconnectingPtySeconds+=usage.UsageReconnectingPtySeconds
3584-
r.UsageSshSeconds+=usage.UsageSshSeconds
3585-
}
3586-
}
3587-
3588-
r.ActiveUsers=int64(len(uniqueUsers))
3589-
3590-
result=append(result,r)
3591-
}
3592-
returnresult,nil
3563+
returnrows,nil
35933564
}
35943565

35953566
func (q*FakeQuerier)GetTemplateParameterInsights(ctx context.Context,arg database.GetTemplateParameterInsightsParams) ([]database.GetTemplateParameterInsightsRow,error) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp