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

Method workspaceData

coderd/workspaces.go:2658–2733  ·  view source on GitHub ↗

workspacesData only returns the data the caller can access. If the caller does not have the correct perms to read a given template, the template will not be returned. So the caller must check the templates & users exist before using them.

(ctx context.Context, workspaces []database.Workspace)

Source from the content-addressed store, hash-verified

2656// not be returned.
2657// So the caller must check the templates & users exist before using them.
2658func (api *API) workspaceData(ctx context.Context, workspaces []database.Workspace) (workspaceData, error) {
2659 workspaceIDs := make([]uuid.UUID, 0, len(workspaces))
2660 templateIDs := make([]uuid.UUID, 0, len(workspaces))
2661 for _, workspace := range workspaces {
2662 workspaceIDs = append(workspaceIDs, workspace.ID)
2663 templateIDs = append(templateIDs, workspace.TemplateID)
2664 }
2665
2666 var (
2667 templates []database.Template
2668 builds []database.WorkspaceBuild
2669 appStatuses []database.WorkspaceAppStatus
2670 eg errgroup.Group
2671 )
2672 eg.Go(func() (err error) {
2673 templates, err = api.Database.GetTemplatesWithFilter(ctx, database.GetTemplatesWithFilterParams{
2674 IDs: templateIDs,
2675 })
2676 if err != nil && !errors.Is(err, sql.ErrNoRows) {
2677 return xerrors.Errorf("get templates: %w", err)
2678 }
2679 return nil
2680 })
2681 eg.Go(func() (err error) {
2682 // This query must be run as system restricted to be efficient.
2683 // nolint:gocritic
2684 builds, err = api.Database.GetLatestWorkspaceBuildsByWorkspaceIDs(dbauthz.AsSystemRestricted(ctx), workspaceIDs)
2685 if err != nil && !errors.Is(err, sql.ErrNoRows) {
2686 return xerrors.Errorf("get workspace builds: %w", err)
2687 }
2688 return nil
2689 })
2690 eg.Go(func() (err error) {
2691 // This query must be run as system restricted to be efficient.
2692 // nolint:gocritic
2693 appStatuses, err = api.Database.GetLatestWorkspaceAppStatusesByWorkspaceIDs(dbauthz.AsSystemRestricted(ctx), workspaceIDs)
2694 if err != nil && !errors.Is(err, sql.ErrNoRows) {
2695 return xerrors.Errorf("get workspace app statuses: %w", err)
2696 }
2697 return nil
2698 })
2699 err := eg.Wait()
2700 if err != nil {
2701 return workspaceData{}, err
2702 }
2703
2704 data, err := api.workspaceBuildsData(ctx, builds)
2705 if err != nil {
2706 return workspaceData{}, xerrors.Errorf("get workspace builds data: %w", err)
2707 }
2708
2709 apiBuilds, err := api.convertWorkspaceBuilds(
2710 builds,
2711 workspaces,
2712 data.jobs,
2713 data.resources,
2714 data.metadata,
2715 data.agents,

Callers 7

workspaceMethod · 0.95
workspacesMethod · 0.95
putWorkspaceDormantMethod · 0.95
watchWorkspaceMethod · 0.95
convertTasksMethod · 0.95
taskGetMethod · 0.95

Calls 11

workspaceBuildsDataMethod · 0.95
AsSystemRestrictedFunction · 0.92
WorkspaceAppStatusesFunction · 0.92
GoMethod · 0.80
WaitMethod · 0.65
IsMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected