@@ -113,69 +113,61 @@ func (api *API) provisionerJobLogs(rw http.ResponseWriter, r *http.Request, job
113
113
logs = []database.ProvisionerJobLog {}
114
114
}
115
115
116
- api .WebsocketWaitGroup .Add (1 )
117
- defer api .WebsocketWaitGroup .Done ()
118
- conn , err := websocket .Accept (rw , r , nil )
119
- if err != nil {
120
- httpapi .Write (ctx , rw , http .StatusBadRequest , codersdk.Response {
121
- Message : "Failed to accept websocket." ,
122
- Detail : err .Error (),
123
- })
124
- return
125
- }
126
- go httpapi .Heartbeat (ctx , conn )
116
+ api .WebsocketWatch .Accept (rw , r , nil , func (conn * websocket.Conn ) {
117
+ go httpapi .Heartbeat (ctx , conn )
127
118
128
- ctx , wsNetConn := websocketNetConn (ctx , conn , websocket .MessageText )
129
- defer wsNetConn .Close () // Also closes conn.
119
+ ctx , wsNetConn := websocketNetConn (ctx , conn , websocket .MessageText )
120
+ defer wsNetConn .Close () // Also closes conn.
130
121
131
- logIdsDone := make (map [int64 ]bool )
122
+ logIdsDone := make (map [int64 ]bool )
132
123
133
- // The Go stdlib JSON encoder appends a newline character after message write.
134
- encoder := json .NewEncoder (wsNetConn )
135
- for _ , provisionerJobLog := range logs {
136
- logIdsDone [provisionerJobLog .ID ] = true
137
- err = encoder .Encode (convertProvisionerJobLog (provisionerJobLog ))
124
+ // The Go stdlib JSON encoder appends a newline character after message write.
125
+ encoder := json .NewEncoder (wsNetConn )
126
+ for _ , provisionerJobLog := range logs {
127
+ logIdsDone [provisionerJobLog .ID ] = true
128
+ err = encoder .Encode (convertProvisionerJobLog (provisionerJobLog ))
129
+ if err != nil {
130
+ return
131
+ }
132
+ }
133
+ job , err = api .Database .GetProvisionerJobByID (ctx , job .ID )
138
134
if err != nil {
135
+ httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
136
+ Message : "Internal error fetching provisioner job." ,
137
+ Detail : err .Error (),
138
+ })
139
139
return
140
140
}
141
- }
142
- job , err = api .Database .GetProvisionerJobByID (ctx , job .ID )
143
- if err != nil {
144
- httpapi .Write (ctx , rw , http .StatusInternalServerError , codersdk.Response {
145
- Message : "Internal error fetching provisioner job." ,
146
- Detail : err .Error (),
147
- })
148
- return
149
- }
150
- if job .CompletedAt .Valid {
151
- // job was complete before we queried the database for historical logs
152
- return
153
- }
154
-
155
- for {
156
- select {
157
- case <- ctx .Done ():
158
- logger .Debug (context .Background (), "job logs context canceled" )
141
+ if job .CompletedAt .Valid {
142
+ // job was complete before we queried the database for historical logs
159
143
return
160
- case log , ok := <- bufferedLogs :
161
- // A nil log is sent when complete!
162
- if ! ok || log == nil {
163
- logger .Debug (context .Background (), "reached the end of published logs" )
144
+ }
145
+
146
+ for {
147
+ select {
148
+ case <- ctx .Done ():
149
+ logger .Debug (context .Background (), "job logs context canceled" )
164
150
return
165
- }
166
- if logIdsDone [log .ID ] {
167
- logger .Debug (ctx , "subscribe duplicated log" ,
168
- slog .F ("stage" , log .Stage ))
169
- } else {
170
- logger .Debug (ctx , "subscribe encoding log" ,
171
- slog .F ("stage" , log .Stage ))
172
- err = encoder .Encode (convertProvisionerJobLog (* log ))
173
- if err != nil {
151
+ case log , ok := <- bufferedLogs :
152
+ // A nil log is sent when complete!
153
+ if ! ok || log == nil {
154
+ logger .Debug (context .Background (), "reached the end of published logs" )
174
155
return
175
156
}
157
+ if logIdsDone [log .ID ] {
158
+ logger .Debug (ctx , "subscribe duplicated log" ,
159
+ slog .F ("stage" , log .Stage ))
160
+ } else {
161
+ logger .Debug (ctx , "subscribe encoding log" ,
162
+ slog .F ("stage" , log .Stage ))
163
+ err = encoder .Encode (convertProvisionerJobLog (* log ))
164
+ if err != nil {
165
+ return
166
+ }
167
+ }
176
168
}
177
169
}
178
- }
170
+ })
179
171
}
180
172
181
173
func (api * API ) provisionerJobResources (rw http.ResponseWriter , r * http.Request , job database.ProvisionerJob ) {
0 commit comments