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

Method watchWorkspace

coderd/workspaces.go:2105–2244  ·  view source on GitHub ↗
(
	rw http.ResponseWriter,
	r *http.Request,
	connect httpapi.EventSender,
)

Source from the content-addressed store, hash-verified

2103}
2104
2105func (api *API) watchWorkspace(
2106 rw http.ResponseWriter,
2107 r *http.Request,
2108 connect httpapi.EventSender,
2109) {
2110 ctx := r.Context()
2111 workspace := httpmw.WorkspaceParam(r)
2112 apiKey := httpmw.APIKey(r)
2113
2114 sendEvent, senderClosed, err := connect(rw, r)
2115 if err != nil {
2116 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
2117 Message: "Internal error setting up server-sent events.",
2118 Detail: err.Error(),
2119 })
2120 return
2121 }
2122 // Prevent handler from returning until the sender is closed.
2123 defer func() {
2124 <-senderClosed
2125 }()
2126
2127 sendUpdate := func(_ context.Context, _ []byte) {
2128 workspace, err := api.Database.GetWorkspaceByID(ctx, workspace.ID)
2129 if err != nil {
2130 _ = sendEvent(codersdk.ServerSentEvent{
2131 Type: codersdk.ServerSentEventTypeError,
2132 Data: codersdk.Response{
2133 Message: "Internal error fetching workspace.",
2134 Detail: err.Error(),
2135 },
2136 })
2137 return
2138 }
2139
2140 data, err := api.workspaceData(ctx, []database.Workspace{workspace})
2141 if err != nil {
2142 _ = sendEvent(codersdk.ServerSentEvent{
2143 Type: codersdk.ServerSentEventTypeError,
2144 Data: codersdk.Response{
2145 Message: "Internal error fetching workspace data.",
2146 Detail: err.Error(),
2147 },
2148 })
2149 return
2150 }
2151 if len(data.templates) == 0 {
2152 _ = sendEvent(codersdk.ServerSentEvent{
2153 Type: codersdk.ServerSentEventTypeError,
2154 Data: codersdk.Response{
2155 Message: "Forbidden reading template of selected workspace.",
2156 },
2157 })
2158 return
2159 }
2160
2161 appStatus := codersdk.WorkspaceAppStatus{}
2162 if len(data.appStatuses) > 0 {

Callers 2

watchWorkspaceSSEMethod · 0.95
watchWorkspaceWSMethod · 0.95

Calls 15

workspaceDataMethod · 0.95
WorkspaceParamFunction · 0.92
APIKeyFunction · 0.92
WriteFunction · 0.92
WorkspaceEventChannelFunction · 0.92
HandleWorkspaceEventFunction · 0.92
convertWorkspaceFunction · 0.85
watchTemplateChannelFunction · 0.85
ContextMethod · 0.65
GetWorkspaceByIDMethod · 0.65
SubscribeWithErrMethod · 0.65
SubscribeMethod · 0.65

Tested by

no test coverage detected