MCPcopy Index your code
hub / github.com/coder/coder / workspaceBuildsData

Method workspaceBuildsData

coderd/workspacebuilds.go:990–1121  ·  view source on GitHub ↗
(ctx context.Context, workspaceBuilds []database.WorkspaceBuild)

Source from the content-addressed store, hash-verified

988}
989
990func (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)

Callers 4

workspaceDataMethod · 0.95
workspaceBuildMethod · 0.95
workspaceBuildsMethod · 0.95

Tested by

no test coverage detected