@@ -2018,6 +2018,10 @@ func (q *FakeQuerier) GetTemplateAppInsights(ctx context.Context, arg database.G
2018
2018
return nil , err
2019
2019
}
2020
2020
2021
+ if len (arg .TemplateIDs ) > 0 && ! slices .Contains (arg .TemplateIDs , w .TemplateID ) {
2022
+ continue
2023
+ }
2024
+
2021
2025
app , _ := q .getWorkspaceAppByAgentIDAndSlugNoLock (ctx , database.GetWorkspaceAppByAgentIDAndSlugParams {
2022
2026
AgentID : s .AgentID ,
2023
2027
Slug : s .SlugOrPort ,
@@ -2095,6 +2099,8 @@ func (q *FakeQuerier) GetTemplateAppInsights(ctx context.Context, arg database.G
2095
2099
})
2096
2100
}
2097
2101
2102
+ // NOTE(mafredri): Add sorting if we decide on how to handle PostgreSQL collations.
2103
+ // ORDER BY access_method, slug_or_port, display_name, icon, is_app
2098
2104
return rows , nil
2099
2105
}
2100
2106
@@ -2264,38 +2270,31 @@ func (q *FakeQuerier) GetTemplateDailyInsights(ctx context.Context, arg database
2264
2270
}
2265
2271
ds .userSet [s .UserID ] = struct {}{}
2266
2272
ds .templateIDSet [s .TemplateID ] = struct {}{}
2267
- break
2268
2273
}
2269
2274
}
2270
2275
2271
2276
for _ , s := range q .workspaceAppStats {
2272
- // (was.session_started_at >= ts.from_ AND was.session_started_at < ts.to_ )
2273
- // OR (was.session_ended_at > ts.from_ AND was.session_ended_at < ts.to_)
2274
- // OR (was.session_started_at < ts.from_ AND was.session_ended_at >= ts.to_)
2275
- if ! ((( s . SessionStartedAt . After ( arg . StartTime ) || s . SessionStartedAt . Equal ( arg . StartTime )) && s . SessionStartedAt . Before ( arg . EndTime )) ||
2276
- ( s . SessionEndedAt . After ( arg . StartTime ) && s . SessionEndedAt . Before ( arg . EndTime )) ||
2277
- ( s . SessionStartedAt . Before ( arg .StartTime ) && ( s . SessionEndedAt . After (arg .EndTime ) || s . SessionEndedAt . Equal ( arg . EndTime ))) ) {
2277
+ w , err := q . getWorkspaceByIDNoLock ( ctx , s . WorkspaceID )
2278
+ if err != nil {
2279
+ return nil , err
2280
+ }
2281
+
2282
+ if len ( arg .TemplateIDs ) > 0 && ! slices . Contains (arg .TemplateIDs , w . TemplateID ) {
2278
2283
continue
2279
2284
}
2280
2285
2281
2286
for _ , ds := range dailyStats {
2282
2287
// (was.session_started_at >= ts.from_ AND was.session_started_at < ts.to_)
2283
2288
// OR (was.session_ended_at > ts.from_ AND was.session_ended_at < ts.to_)
2284
2289
// OR (was.session_started_at < ts.from_ AND was.session_ended_at >= ts.to_)
2285
- if ! (((s .SessionStartedAt .After (arg . StartTime ) || s .SessionStartedAt .Equal (arg . StartTime )) && s .SessionStartedAt .Before (arg . EndTime )) ||
2286
- (s .SessionEndedAt .After (arg . StartTime ) && s .SessionEndedAt .Before (arg . EndTime )) ||
2287
- (s .SessionStartedAt .Before (arg . StartTime ) && (s .SessionEndedAt .After (arg . EndTime ) || s .SessionEndedAt .Equal (arg . EndTime )))) {
2290
+ if ! (((s .SessionStartedAt .After (ds . startTime ) || s .SessionStartedAt .Equal (ds . startTime )) && s .SessionStartedAt .Before (ds . endTime )) ||
2291
+ (s .SessionEndedAt .After (ds . startTime ) && s .SessionEndedAt .Before (ds . endTime )) ||
2292
+ (s .SessionStartedAt .Before (ds . startTime ) && (s .SessionEndedAt .After (ds . endTime ) || s .SessionEndedAt .Equal (ds . endTime )))) {
2288
2293
continue
2289
2294
}
2290
2295
2291
- w , err := q .getWorkspaceByIDNoLock (ctx , s .WorkspaceID )
2292
- if err != nil {
2293
- return nil , err
2294
- }
2295
-
2296
2296
ds .userSet [s .UserID ] = struct {}{}
2297
2297
ds .templateIDSet [w .TemplateID ] = struct {}{}
2298
- break
2299
2298
}
2300
2299
}
2301
2300
@@ -2341,22 +2340,22 @@ func (q *FakeQuerier) GetTemplateInsights(_ context.Context, arg database.GetTem
2341
2340
if appUsageIntervalsByUser [s .UserID ] == nil {
2342
2341
appUsageIntervalsByUser [s .UserID ] = make (map [time.Time ]* database.GetTemplateInsightsRow )
2343
2342
}
2344
- t := s .CreatedAt .Truncate (5 * time .Minute )
2343
+ t := s .CreatedAt .Truncate (time .Minute )
2345
2344
if _ , ok := appUsageIntervalsByUser [s.UserID ][t ]; ! ok {
2346
2345
appUsageIntervalsByUser [s.UserID ][t ] = & database.GetTemplateInsightsRow {}
2347
2346
}
2348
2347
2349
2348
if s .SessionCountJetBrains > 0 {
2350
- appUsageIntervalsByUser [s.UserID ][t ].UsageJetbrainsSeconds = 300
2349
+ appUsageIntervalsByUser [s.UserID ][t ].UsageJetbrainsSeconds = 60
2351
2350
}
2352
2351
if s .SessionCountVSCode > 0 {
2353
- appUsageIntervalsByUser [s.UserID ][t ].UsageVscodeSeconds = 300
2352
+ appUsageIntervalsByUser [s.UserID ][t ].UsageVscodeSeconds = 60
2354
2353
}
2355
2354
if s .SessionCountReconnectingPTY > 0 {
2356
- appUsageIntervalsByUser [s.UserID ][t ].UsageReconnectingPtySeconds = 300
2355
+ appUsageIntervalsByUser [s.UserID ][t ].UsageReconnectingPtySeconds = 60
2357
2356
}
2358
2357
if s .SessionCountSSH > 0 {
2359
- appUsageIntervalsByUser [s.UserID ][t ].UsageSshSeconds = 300
2358
+ appUsageIntervalsByUser [s.UserID ][t ].UsageSshSeconds = 60
2360
2359
}
2361
2360
}
2362
2361
@@ -2430,7 +2429,8 @@ func (q *FakeQuerier) GetTemplateParameterInsights(ctx context.Context, arg data
2430
2429
if tvp .TemplateVersionID != tv .ID {
2431
2430
continue
2432
2431
}
2433
- key := fmt .Sprintf ("%s:%s:%s:%s" , tvp .Name , tvp .DisplayName , tvp .Description , tvp .Options )
2432
+ // GROUP BY tvp.name, tvp.type, tvp.display_name, tvp.description, tvp.options
2433
+ key := fmt .Sprintf ("%s:%s:%s:%s:%s" , tvp .Name , tvp .Type , tvp .DisplayName , tvp .Description , tvp .Options )
2434
2434
if _ , ok := uniqueTemplateParams [key ]; ! ok {
2435
2435
num ++
2436
2436
uniqueTemplateParams [key ] = & database.GetTemplateParameterInsightsRow {
@@ -2480,6 +2480,8 @@ func (q *FakeQuerier) GetTemplateParameterInsights(ctx context.Context, arg data
2480
2480
}
2481
2481
}
2482
2482
2483
+ // NOTE(mafredri): Add sorting if we decide on how to handle PostgreSQL collations.
2484
+ // ORDER BY utp.name, utp.type, utp.display_name, utp.description, utp.options, wbp.value
2483
2485
return rows , nil
2484
2486
}
2485
2487
0 commit comments