@@ -37,6 +37,7 @@ import (
37
37
// @x-apidocgen {"skip": true}
38
38
func (api * API )workspaceAgentRPC (rw http.ResponseWriter ,r * http.Request ) {
39
39
ctx := r .Context ()
40
+ logger := api .Logger .Named ("agentrpc" )
40
41
41
42
version := r .URL .Query ().Get ("version" )
42
43
if version == "" {
@@ -61,7 +62,7 @@ func (api *API) workspaceAgentRPC(rw http.ResponseWriter, r *http.Request) {
61
62
defer api .WebsocketWaitGroup .Done ()
62
63
workspaceAgent := httpmw .WorkspaceAgent (r )
63
64
64
- build ,ok := ensureLatestBuild (ctx ,api .Database ,api . Logger ,rw ,workspaceAgent )
65
+ build ,ok := ensureLatestBuild (ctx ,api .Database ,logger ,rw ,workspaceAgent )
65
66
if ! ok {
66
67
return
67
68
}
@@ -84,6 +85,12 @@ func (api *API) workspaceAgentRPC(rw http.ResponseWriter, r *http.Request) {
84
85
return
85
86
}
86
87
88
+ logger = logger .With (
89
+ slog .F ("owner" ,owner .Username ),
90
+ slog .F ("workspace_name" ,workspace .Name ),
91
+ slog .F ("agent_name" ,workspaceAgent .Name ),
92
+ )
93
+
87
94
conn ,err := websocket .Accept (rw ,r ,nil )
88
95
if err != nil {
89
96
httpapi .Write (ctx ,rw ,http .StatusBadRequest , codersdk.Response {
@@ -96,7 +103,11 @@ func (api *API) workspaceAgentRPC(rw http.ResponseWriter, r *http.Request) {
96
103
ctx ,wsNetConn := websocketNetConn (ctx ,conn ,websocket .MessageBinary )
97
104
defer wsNetConn .Close ()
98
105
99
- mux ,err := yamux .Server (wsNetConn ,nil )
106
+ ycfg := yamux .DefaultConfig ()
107
+ ycfg .LogOutput = nil
108
+ ycfg .Logger = slog .Stdlib (ctx ,logger .Named ("yamux" ),slog .LevelInfo )
109
+
110
+ mux ,err := yamux .Server (wsNetConn ,ycfg )
100
111
if err != nil {
101
112
httpapi .Write (ctx ,rw ,http .StatusBadRequest , codersdk.Response {
102
113
Message :"Failed to start yamux over websocket." ,
@@ -106,12 +117,7 @@ func (api *API) workspaceAgentRPC(rw http.ResponseWriter, r *http.Request) {
106
117
}
107
118
defer mux .Close ()
108
119
109
- api .Logger .Debug (ctx ,"accepting agent RPC connection" ,
110
- slog .F ("owner" ,owner .Username ),
111
- slog .F ("workspace" ,workspace .Name ),
112
- slog .F ("name" ,workspaceAgent .Name ),
113
- )
114
- api .Logger .Debug (ctx ,"accepting agent details" ,slog .F ("agent" ,workspaceAgent ))
120
+ logger .Debug (ctx ,"accepting agent RPC connection" ,slog .F ("agent" ,workspaceAgent ))
115
121
116
122
closeCtx ,closeCtxCancel := context .WithCancel (ctx )
117
123
defer closeCtxCancel ()
@@ -122,7 +128,7 @@ func (api *API) workspaceAgentRPC(rw http.ResponseWriter, r *http.Request) {
122
128
AgentID :workspaceAgent .ID ,
123
129
124
130
Ctx :api .ctx ,
125
- Log :api . Logger ,
131
+ Log :logger ,
126
132
Database :api .Database ,
127
133
Pubsub :api .Pubsub ,
128
134
DerpMapFn :api .DERPMap ,
@@ -155,7 +161,7 @@ func (api *API) workspaceAgentRPC(rw http.ResponseWriter, r *http.Request) {
155
161
ctx = agentapi .WithAPIVersion (ctx ,version )
156
162
err = agentAPI .Serve (ctx ,mux )
157
163
if err != nil {
158
- api . Logger .Warn (ctx ,"workspace agent RPC listen error" ,slog .Error (err ))
164
+ logger .Warn (ctx ,"workspace agent RPC listen error" ,slog .Error (err ))
159
165
_ = conn .Close (websocket .StatusInternalError ,err .Error ())
160
166
return
161
167
}