@@ -692,92 +692,6 @@ func minTime(t, u time.Time) time.Time {
692
692
return u
693
693
}
694
694
695
- func (q * FakeQuerier ) GetTemplateInsightsByInterval (ctx context.Context , arg database.GetTemplateInsightsByIntervalParams ) ([]database.GetTemplateInsightsByIntervalRow , error ) {
696
- err := validateDatabaseType (arg )
697
- if err != nil {
698
- return nil , err
699
- }
700
-
701
- q .mutex .RLock ()
702
- defer q .mutex .RUnlock ()
703
-
704
- type dailyStat struct {
705
- startTime , endTime time.Time
706
- userSet map [uuid.UUID ]struct {}
707
- templateIDSet map [uuid.UUID ]struct {}
708
- }
709
- dailyStats := []dailyStat {{arg .StartTime , arg .StartTime .AddDate (0 , 0 , 1 ), make (map [uuid.UUID ]struct {}), make (map [uuid.UUID ]struct {})}}
710
- for dailyStats [len (dailyStats )- 1 ].endTime .Before (arg .EndTime ) {
711
- dailyStats = append (dailyStats , dailyStat {dailyStats [len (dailyStats )- 1 ].endTime , dailyStats [len (dailyStats )- 1 ].endTime .AddDate (0 , 0 , 1 ), make (map [uuid.UUID ]struct {}), make (map [uuid.UUID ]struct {})})
712
- }
713
- if dailyStats [len (dailyStats )- 1 ].endTime .After (arg .EndTime ) {
714
- dailyStats [len (dailyStats )- 1 ].endTime = arg .EndTime
715
- }
716
-
717
- for _ , s := range q .workspaceAgentStats {
718
- if s .CreatedAt .Before (arg .StartTime ) || s .CreatedAt .Equal (arg .EndTime ) || s .CreatedAt .After (arg .EndTime ) {
719
- continue
720
- }
721
- if len (arg .TemplateIDs ) > 0 && ! slices .Contains (arg .TemplateIDs , s .TemplateID ) {
722
- continue
723
- }
724
- if s .ConnectionCount == 0 {
725
- continue
726
- }
727
-
728
- for _ , ds := range dailyStats {
729
- if s .CreatedAt .Before (ds .startTime ) || s .CreatedAt .Equal (ds .endTime ) || s .CreatedAt .After (ds .endTime ) {
730
- continue
731
- }
732
- ds .userSet [s .UserID ] = struct {}{}
733
- ds .templateIDSet [s .TemplateID ] = struct {}{}
734
- }
735
- }
736
-
737
- for _ , s := range q .workspaceAppStats {
738
- w , err := q .getWorkspaceByIDNoLock (ctx , s .WorkspaceID )
739
- if err != nil {
740
- return nil , err
741
- }
742
-
743
- if len (arg .TemplateIDs ) > 0 && ! slices .Contains (arg .TemplateIDs , w .TemplateID ) {
744
- continue
745
- }
746
-
747
- for _ , ds := range dailyStats {
748
- // (was.session_started_at >= ts.from_ AND was.session_started_at < ts.to_)
749
- // OR (was.session_ended_at > ts.from_ AND was.session_ended_at < ts.to_)
750
- // OR (was.session_started_at < ts.from_ AND was.session_ended_at >= ts.to_)
751
- if ! (((s .SessionStartedAt .After (ds .startTime ) || s .SessionStartedAt .Equal (ds .startTime )) && s .SessionStartedAt .Before (ds .endTime )) ||
752
- (s .SessionEndedAt .After (ds .startTime ) && s .SessionEndedAt .Before (ds .endTime )) ||
753
- (s .SessionStartedAt .Before (ds .startTime ) && (s .SessionEndedAt .After (ds .endTime ) || s .SessionEndedAt .Equal (ds .endTime )))) {
754
- continue
755
- }
756
-
757
- ds .userSet [s .UserID ] = struct {}{}
758
- ds .templateIDSet [w .TemplateID ] = struct {}{}
759
- }
760
- }
761
-
762
- var result []database.GetTemplateInsightsByIntervalRow
763
- for _ , ds := range dailyStats {
764
- templateIDs := make ([]uuid.UUID , 0 , len (ds .templateIDSet ))
765
- for templateID := range ds .templateIDSet {
766
- templateIDs = append (templateIDs , templateID )
767
- }
768
- slices .SortFunc (templateIDs , func (a , b uuid.UUID ) int {
769
- return slice .Ascending (a .String (), b .String ())
770
- })
771
- result = append (result , database.GetTemplateInsightsByIntervalRow {
772
- StartTime : ds .startTime ,
773
- EndTime : ds .endTime ,
774
- TemplateIDs : templateIDs ,
775
- ActiveUsers : int64 (len (ds .userSet )),
776
- })
777
- }
778
- return result , nil
779
- }
780
-
781
695
func (* FakeQuerier ) AcquireLock (_ context.Context , _ int64 ) error {
782
696
return xerrors .New ("AcquireLock must only be called within a transaction" )
783
697
}
@@ -2495,6 +2409,92 @@ func (q *FakeQuerier) GetTemplateInsights(_ context.Context, arg database.GetTem
2495
2409
return result , nil
2496
2410
}
2497
2411
2412
+ func (q * FakeQuerier ) GetTemplateInsightsByInterval (ctx context.Context , arg database.GetTemplateInsightsByIntervalParams ) ([]database.GetTemplateInsightsByIntervalRow , error ) {
2413
+ err := validateDatabaseType (arg )
2414
+ if err != nil {
2415
+ return nil , err
2416
+ }
2417
+
2418
+ q .mutex .RLock ()
2419
+ defer q .mutex .RUnlock ()
2420
+
2421
+ type dailyStat struct {
2422
+ startTime , endTime time.Time
2423
+ userSet map [uuid.UUID ]struct {}
2424
+ templateIDSet map [uuid.UUID ]struct {}
2425
+ }
2426
+ dailyStats := []dailyStat {{arg .StartTime , arg .StartTime .AddDate (0 , 0 , 1 ), make (map [uuid.UUID ]struct {}), make (map [uuid.UUID ]struct {})}}
2427
+ for dailyStats [len (dailyStats )- 1 ].endTime .Before (arg .EndTime ) {
2428
+ dailyStats = append (dailyStats , dailyStat {dailyStats [len (dailyStats )- 1 ].endTime , dailyStats [len (dailyStats )- 1 ].endTime .AddDate (0 , 0 , 1 ), make (map [uuid.UUID ]struct {}), make (map [uuid.UUID ]struct {})})
2429
+ }
2430
+ if dailyStats [len (dailyStats )- 1 ].endTime .After (arg .EndTime ) {
2431
+ dailyStats [len (dailyStats )- 1 ].endTime = arg .EndTime
2432
+ }
2433
+
2434
+ for _ , s := range q .workspaceAgentStats {
2435
+ if s .CreatedAt .Before (arg .StartTime ) || s .CreatedAt .Equal (arg .EndTime ) || s .CreatedAt .After (arg .EndTime ) {
2436
+ continue
2437
+ }
2438
+ if len (arg .TemplateIDs ) > 0 && ! slices .Contains (arg .TemplateIDs , s .TemplateID ) {
2439
+ continue
2440
+ }
2441
+ if s .ConnectionCount == 0 {
2442
+ continue
2443
+ }
2444
+
2445
+ for _ , ds := range dailyStats {
2446
+ if s .CreatedAt .Before (ds .startTime ) || s .CreatedAt .Equal (ds .endTime ) || s .CreatedAt .After (ds .endTime ) {
2447
+ continue
2448
+ }
2449
+ ds .userSet [s .UserID ] = struct {}{}
2450
+ ds .templateIDSet [s .TemplateID ] = struct {}{}
2451
+ }
2452
+ }
2453
+
2454
+ for _ , s := range q .workspaceAppStats {
2455
+ w , err := q .getWorkspaceByIDNoLock (ctx , s .WorkspaceID )
2456
+ if err != nil {
2457
+ return nil , err
2458
+ }
2459
+
2460
+ if len (arg .TemplateIDs ) > 0 && ! slices .Contains (arg .TemplateIDs , w .TemplateID ) {
2461
+ continue
2462
+ }
2463
+
2464
+ for _ , ds := range dailyStats {
2465
+ // (was.session_started_at >= ts.from_ AND was.session_started_at < ts.to_)
2466
+ // OR (was.session_ended_at > ts.from_ AND was.session_ended_at < ts.to_)
2467
+ // OR (was.session_started_at < ts.from_ AND was.session_ended_at >= ts.to_)
2468
+ if ! (((s .SessionStartedAt .After (ds .startTime ) || s .SessionStartedAt .Equal (ds .startTime )) && s .SessionStartedAt .Before (ds .endTime )) ||
2469
+ (s .SessionEndedAt .After (ds .startTime ) && s .SessionEndedAt .Before (ds .endTime )) ||
2470
+ (s .SessionStartedAt .Before (ds .startTime ) && (s .SessionEndedAt .After (ds .endTime ) || s .SessionEndedAt .Equal (ds .endTime )))) {
2471
+ continue
2472
+ }
2473
+
2474
+ ds .userSet [s .UserID ] = struct {}{}
2475
+ ds .templateIDSet [w .TemplateID ] = struct {}{}
2476
+ }
2477
+ }
2478
+
2479
+ var result []database.GetTemplateInsightsByIntervalRow
2480
+ for _ , ds := range dailyStats {
2481
+ templateIDs := make ([]uuid.UUID , 0 , len (ds .templateIDSet ))
2482
+ for templateID := range ds .templateIDSet {
2483
+ templateIDs = append (templateIDs , templateID )
2484
+ }
2485
+ slices .SortFunc (templateIDs , func (a , b uuid.UUID ) int {
2486
+ return slice .Ascending (a .String (), b .String ())
2487
+ })
2488
+ result = append (result , database.GetTemplateInsightsByIntervalRow {
2489
+ StartTime : ds .startTime ,
2490
+ EndTime : ds .endTime ,
2491
+ TemplateIDs : templateIDs ,
2492
+ ActiveUsers : int64 (len (ds .userSet )),
2493
+ })
2494
+ }
2495
+ return result , nil
2496
+ }
2497
+
2498
2498
func (q * FakeQuerier ) GetTemplateParameterInsights (ctx context.Context , arg database.GetTemplateParameterInsightsParams ) ([]database.GetTemplateParameterInsightsRow , error ) {
2499
2499
err := validateDatabaseType (arg )
2500
2500
if err != nil {
0 commit comments