Skip to content

Commit 04a92a4

Browse files
chore: use WebsocketNetConn
1 parent cd0c2d5 commit 04a92a4

File tree

2 files changed

+15
-15
lines changed

2 files changed

+15
-15
lines changed

agent/agentcontainers/api.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package agentcontainers
22

33
import (
44
"context"
5+
"encoding/json"
56
"errors"
67
"fmt"
78
"maps"
@@ -29,7 +30,6 @@ import (
2930
"github.com/coder/coder/v2/coderd/httpapi"
3031
"github.com/coder/coder/v2/codersdk"
3132
"github.com/coder/coder/v2/codersdk/agentsdk"
32-
"github.com/coder/coder/v2/codersdk/wsjson"
3333
"github.com/coder/coder/v2/provisioner"
3434
"github.com/coder/quartz"
3535
"github.com/coder/websocket"
@@ -561,13 +561,10 @@ func (api *API) watchContainers(rw http.ResponseWriter, r *http.Request) {
561561
return
562562
}
563563

564-
ctx = api.ctx
564+
ctx, wsNetConn := codersdk.WebsocketNetConn(ctx, conn, websocket.MessageText)
565+
defer wsNetConn.Close()
565566

566567
go httpapi.Heartbeat(ctx, conn)
567-
defer conn.Close(websocket.StatusNormalClosure, "connection closed")
568-
569-
encoder := wsjson.NewEncoder[codersdk.WorkspaceAgentListContainersResponse](conn, websocket.MessageText)
570-
defer encoder.Close(websocket.StatusNormalClosure)
571568

572569
updateCh := make(chan struct{}, 1)
573570

@@ -586,6 +583,9 @@ func (api *API) watchContainers(rw http.ResponseWriter, r *http.Request) {
586583

587584
for {
588585
select {
586+
case <-api.ctx.Done():
587+
return
588+
589589
case <-ctx.Done():
590590
return
591591

@@ -596,7 +596,7 @@ func (api *API) watchContainers(rw http.ResponseWriter, r *http.Request) {
596596
continue
597597
}
598598

599-
if err := encoder.Encode(ct); err != nil {
599+
if err := json.NewEncoder(wsNetConn).Encode(ct); err != nil {
600600
api.logger.Error(ctx, "encode container list", slog.Error(err))
601601
return
602602
}

coderd/workspaceagents.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ func (api *API) watchWorkspaceAgentContainers(rw http.ResponseWriter, r *http.Re
817817

818818
// If the agent is unreachable, the request will hang. Assume that if we
819819
// don't get a response after 30s that the agent is unreachable.
820-
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
820+
dialCtx, cancel := context.WithTimeout(ctx, 30*time.Second)
821821
defer cancel()
822822
apiAgent, err := db2sdk.WorkspaceAgent(
823823
api.DERPMap(),
@@ -843,7 +843,7 @@ func (api *API) watchWorkspaceAgentContainers(rw http.ResponseWriter, r *http.Re
843843
return
844844
}
845845

846-
agentConn, release, err := api.agentProvider.AgentConn(ctx, workspaceAgent.ID)
846+
agentConn, release, err := api.agentProvider.AgentConn(dialCtx, workspaceAgent.ID)
847847
if err != nil {
848848
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
849849
Message: "Internal error dialing workspace agent.",
@@ -873,21 +873,21 @@ func (api *API) watchWorkspaceAgentContainers(rw http.ResponseWriter, r *http.Re
873873
return
874874
}
875875

876-
ctx = api.ctx
876+
ctx, wsNetConn := codersdk.WebsocketNetConn(ctx, conn, websocket.MessageText)
877+
defer wsNetConn.Close()
877878

878879
go httpapi.Heartbeat(ctx, conn)
879-
defer conn.Close(websocket.StatusNormalClosure, "connection closed")
880-
881-
encoder := wsjson.NewEncoder[codersdk.WorkspaceAgentListContainersResponse](conn, websocket.MessageText)
882-
defer encoder.Close(websocket.StatusNormalClosure)
883880

884881
for {
885882
select {
883+
case <-api.ctx.Done():
884+
return
885+
886886
case <-ctx.Done():
887887
return
888888

889889
case containers := <-containersCh:
890-
if err := encoder.Encode(containers); err != nil {
890+
if err := json.NewEncoder(wsNetConn).Encode(containers); err != nil {
891891
api.Logger.Error(ctx, "encode containers", slog.Error(err))
892892
return
893893
}

0 commit comments

Comments
 (0)