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

Method WatchWorkspaceAgentMetadata

codersdk/workspaceagents.go:271–355  ·  view source on GitHub ↗

WatchWorkspaceAgentMetadata watches the metadata of a workspace agent. The returned channel will be closed when the context is canceled. Exactly one error will be sent on the error channel. The metadata channel is never closed.

(ctx context.Context, id uuid.UUID)

Source from the content-addressed store, hash-verified

269// The returned channel will be closed when the context is canceled. Exactly
270// one error will be sent on the error channel. The metadata channel is never closed.
271func (c *Client) WatchWorkspaceAgentMetadata(ctx context.Context, id uuid.UUID) (<-chan []WorkspaceAgentMetadata, <-chan error) {
272 ctx, span := tracing.StartSpan(ctx)
273 defer span.End()
274
275 metadataChan := make(chan []WorkspaceAgentMetadata, 256)
276
277 ready := make(chan struct{})
278 watch := func() error {
279 res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/workspaceagents/%s/watch-metadata", id), nil)
280 if err != nil {
281 return err
282 }
283 if res.StatusCode != http.StatusOK {
284 return ReadBodyAsError(res)
285 }
286
287 nextEvent := ServerSentEventReader(ctx, res.Body)
288 defer res.Body.Close()
289
290 firstEvent := true
291 for {
292 select {
293 case <-ctx.Done():
294 return ctx.Err()
295 default:
296 }
297
298 sse, err := nextEvent()
299 if err != nil {
300 return err
301 }
302
303 if firstEvent {
304 close(ready) // Only close ready after the first event is received.
305 firstEvent = false
306 }
307
308 // Ignore pings.
309 if sse.Type == ServerSentEventTypePing {
310 continue
311 }
312
313 b, ok := sse.Data.([]byte)
314 if !ok {
315 return xerrors.Errorf("unexpected data type: %T", sse.Data)
316 }
317
318 switch sse.Type {
319 case ServerSentEventTypeData:
320 var met []WorkspaceAgentMetadata
321 err = json.Unmarshal(b, &met)
322 if err != nil {
323 return xerrors.Errorf("unmarshal metadata: %w", err)
324 }
325 metadataChan <- met
326 case ServerSentEventTypeError:
327 var r Response
328 err = json.Unmarshal(b, &r)

Calls 9

RequestMethod · 0.95
StartSpanFunction · 0.92
ReadBodyAsErrorFunction · 0.85
ServerSentEventReaderFunction · 0.85
ErrMethod · 0.80
CloseMethod · 0.65
DoneMethod · 0.45
ErrorfMethod · 0.45
UnmarshalMethod · 0.45