@@ -2540,7 +2540,61 @@ func (q *FakeQuerier) GetFailedWorkspaceBuildsByTemplateID(ctx context.Context,
2540
2540
return nil , err
2541
2541
}
2542
2542
2543
- panic ("not implemented" )
2543
+ q .mutex .RLock ()
2544
+ defer q .mutex .RUnlock ()
2545
+
2546
+ workspaceBuildStats := []database.GetFailedWorkspaceBuildsByTemplateIDRow {}
2547
+ for _ , wb := range q .workspaceBuilds {
2548
+ job , err := q .getProvisionerJobByIDNoLock (ctx , wb .JobID )
2549
+ if err != nil {
2550
+ return nil , xerrors .Errorf ("get provisioner job by ID: %w" , err )
2551
+ }
2552
+
2553
+ if job .JobStatus != database .ProvisionerJobStatusFailed {
2554
+ continue
2555
+ }
2556
+
2557
+ if ! job .CompletedAt .Valid {
2558
+ continue
2559
+ }
2560
+
2561
+ if wb .CreatedAt .Before (arg .Since ) {
2562
+ continue
2563
+ }
2564
+
2565
+ w , err := q .getWorkspaceByIDNoLock (ctx , wb .WorkspaceID )
2566
+ if err != nil {
2567
+ return nil , xerrors .Errorf ("get workspace by ID: %w" , err )
2568
+ }
2569
+
2570
+ t , err := q .getTemplateByIDNoLock (ctx , w .TemplateID )
2571
+ if err != nil {
2572
+ return nil , xerrors .Errorf ("get template by ID: %w" , err )
2573
+ }
2574
+
2575
+ if t .ID != arg .TemplateID {
2576
+ continue
2577
+ }
2578
+
2579
+ workspaceOwner , err := q .getUserByIDNoLock (w .OwnerID )
2580
+ if err != nil {
2581
+ return nil , xerrors .Errorf ("get user by ID: %w" , err )
2582
+ }
2583
+
2584
+ templateVersion , err := q .getTemplateVersionByIDNoLock (ctx , wb .TemplateVersionID )
2585
+ if err != nil {
2586
+ return nil , xerrors .Errorf ("get template version by ID: %w" , err )
2587
+ }
2588
+
2589
+ workspaceBuildStats = append (workspaceBuildStats , database.GetFailedWorkspaceBuildsByTemplateIDRow {
2590
+ WorkspaceName : w .Name ,
2591
+ WorkspaceOwnerUsername : workspaceOwner .Username ,
2592
+ TemplateVersionName : templateVersion .Name ,
2593
+ WorkspaceBuildNumber : wb .BuildNumber ,
2594
+ })
2595
+ }
2596
+
2597
+ return workspaceBuildStats , nil
2544
2598
}
2545
2599
2546
2600
func (q * FakeQuerier ) GetFileByHashAndCreator (_ context.Context , arg database.GetFileByHashAndCreatorParams ) (database.File , error ) {
@@ -3547,7 +3601,15 @@ func (q *FakeQuerier) GetReportGeneratorLogByUserAndTemplate(ctx context.Context
3547
3601
return database.ReportGeneratorLog {}, err
3548
3602
}
3549
3603
3550
- panic ("not implemented" )
3604
+ q .mutex .RLock ()
3605
+ q .mutex .RUnlock ()
3606
+
3607
+ for _ , record := range q .reportGeneratorLogs {
3608
+ if record .UserID == arg .UserID && record .NotificationTemplateID == arg .NotificationTemplateID {
3609
+ return database .ReportGeneratorLog (record ), nil
3610
+ }
3611
+ }
3612
+ return database.ReportGeneratorLog {}, sql .ErrNoRows
3551
3613
}
3552
3614
3553
3615
func (q * FakeQuerier ) GetRuntimeConfig (_ context.Context , key string ) (string , error ) {
@@ -5850,7 +5912,56 @@ func (q *FakeQuerier) GetWorkspaceBuildParameters(_ context.Context, workspaceBu
5850
5912
}
5851
5913
5852
5914
func (q * FakeQuerier ) GetWorkspaceBuildStatsByTemplates (ctx context.Context , since time.Time ) ([]database.GetWorkspaceBuildStatsByTemplatesRow , error ) {
5853
- panic ("not implemented" )
5915
+ q .mutex .RLock ()
5916
+ defer q .mutex .RUnlock ()
5917
+
5918
+ templateStats := map [uuid.UUID ]database.GetWorkspaceBuildStatsByTemplatesRow {}
5919
+ for _ , wb := range q .workspaceBuilds {
5920
+ job , err := q .getProvisionerJobByIDNoLock (ctx , wb .JobID )
5921
+ if err != nil {
5922
+ return nil , xerrors .Errorf ("get provisioner job by ID: %w" , err )
5923
+ }
5924
+
5925
+ if ! job .CompletedAt .Valid {
5926
+ continue
5927
+ }
5928
+
5929
+ if wb .CreatedAt .Before (since ) {
5930
+ continue
5931
+ }
5932
+
5933
+ w , err := q .getWorkspaceByIDNoLock (ctx , wb .WorkspaceID )
5934
+ if err != nil {
5935
+ return nil , xerrors .Errorf ("get workspace by ID: %w" , err )
5936
+ }
5937
+
5938
+ if _ , ok := templateStats [w .TemplateID ]; ! ok {
5939
+ t , err := q .getTemplateByIDNoLock (ctx , w .TemplateID )
5940
+ if err != nil {
5941
+ return nil , xerrors .Errorf ("get template by ID: %w" , err )
5942
+ }
5943
+
5944
+ templateStats [w .TemplateID ] = database.GetWorkspaceBuildStatsByTemplatesRow {
5945
+ TemplateID : w .TemplateID ,
5946
+ TemplateName : t .Name ,
5947
+ TemplateDisplayName : t .DisplayName ,
5948
+ TemplateOrganizationID : w .OrganizationID ,
5949
+ }
5950
+ }
5951
+
5952
+ s := templateStats [w .TemplateID ]
5953
+ s .TotalBuilds ++
5954
+ if job .JobStatus == database .ProvisionerJobStatusFailed {
5955
+ s .FailedBuilds ++
5956
+ }
5957
+ templateStats [w .TemplateID ] = s
5958
+ }
5959
+
5960
+ rows := make ([]database.GetWorkspaceBuildStatsByTemplatesRow , 0 , len (templateStats ))
5961
+ for _ , ts := range templateStats {
5962
+ rows = append (rows , ts )
5963
+ }
5964
+ return rows , nil
5854
5965
}
5855
5966
5856
5967
func (q * FakeQuerier ) GetWorkspaceBuildsByWorkspaceID (_ context.Context ,
0 commit comments