(ctx context.Context, workspaceBuilds []database.WorkspaceBuild)
| 988 | } |
| 989 | |
| 990 | func (api *API) workspaceBuildsData(ctx context.Context, workspaceBuilds []database.WorkspaceBuild) (workspaceBuildsData, error) { |
| 991 | jobIDs := make([]uuid.UUID, 0, len(workspaceBuilds)) |
| 992 | for _, build := range workspaceBuilds { |
| 993 | jobIDs = append(jobIDs, build.JobID) |
| 994 | } |
| 995 | jobs, err := api.Database.GetProvisionerJobsByIDsWithQueuePosition(ctx, database.GetProvisionerJobsByIDsWithQueuePositionParams{ |
| 996 | IDs: jobIDs, |
| 997 | StaleIntervalMS: provisionerdserver.StaleInterval.Milliseconds(), |
| 998 | }) |
| 999 | if err != nil && !errors.Is(err, sql.ErrNoRows) { |
| 1000 | return workspaceBuildsData{}, xerrors.Errorf("get provisioner jobs: %w", err) |
| 1001 | } |
| 1002 | pendingJobIDs := []uuid.UUID{} |
| 1003 | for _, job := range jobs { |
| 1004 | if job.ProvisionerJob.JobStatus == database.ProvisionerJobStatusPending { |
| 1005 | pendingJobIDs = append(pendingJobIDs, job.ProvisionerJob.ID) |
| 1006 | } |
| 1007 | } |
| 1008 | |
| 1009 | pendingJobProvisioners, err := api.Database.GetEligibleProvisionerDaemonsByProvisionerJobIDs(ctx, pendingJobIDs) |
| 1010 | if err != nil && !errors.Is(err, sql.ErrNoRows) { |
| 1011 | return workspaceBuildsData{}, xerrors.Errorf("get provisioner daemons: %w", err) |
| 1012 | } |
| 1013 | |
| 1014 | templateVersionIDs := make([]uuid.UUID, 0, len(workspaceBuilds)) |
| 1015 | for _, build := range workspaceBuilds { |
| 1016 | templateVersionIDs = append(templateVersionIDs, build.TemplateVersionID) |
| 1017 | } |
| 1018 | |
| 1019 | // nolint:gocritic // Getting template versions by ID is a system function. |
| 1020 | templateVersions, err := api.Database.GetTemplateVersionsByIDs(dbauthz.AsSystemRestricted(ctx), templateVersionIDs) |
| 1021 | if err != nil && !errors.Is(err, sql.ErrNoRows) { |
| 1022 | return workspaceBuildsData{}, xerrors.Errorf("get template versions: %w", err) |
| 1023 | } |
| 1024 | |
| 1025 | // nolint:gocritic // Getting workspace resources by job ID is a system function. |
| 1026 | resources, err := api.Database.GetWorkspaceResourcesByJobIDs(dbauthz.AsSystemRestricted(ctx), jobIDs) |
| 1027 | if err != nil && !errors.Is(err, sql.ErrNoRows) { |
| 1028 | return workspaceBuildsData{}, xerrors.Errorf("get workspace resources by job: %w", err) |
| 1029 | } |
| 1030 | |
| 1031 | if len(resources) == 0 { |
| 1032 | return workspaceBuildsData{ |
| 1033 | jobs: jobs, |
| 1034 | templateVersions: templateVersions, |
| 1035 | provisionerDaemons: pendingJobProvisioners, |
| 1036 | }, nil |
| 1037 | } |
| 1038 | |
| 1039 | resourceIDs := make([]uuid.UUID, 0) |
| 1040 | for _, resource := range resources { |
| 1041 | resourceIDs = append(resourceIDs, resource.ID) |
| 1042 | } |
| 1043 | |
| 1044 | // nolint:gocritic // Getting workspace resource metadata by resource ID is a system function. |
| 1045 | metadata, err := api.Database.GetWorkspaceResourceMetadataByResourceIDs(dbauthz.AsSystemRestricted(ctx), resourceIDs) |
| 1046 | if err != nil && !errors.Is(err, sql.ErrNoRows) { |
| 1047 | return workspaceBuildsData{}, xerrors.Errorf("fetching resource metadata: %w", err) |
no test coverage detected