1
1
package coderd
2
2
3
3
import (
4
- "database/sql"
5
4
"fmt"
6
5
"io"
7
6
"net/http"
8
- "time"
9
7
10
8
"github.com/hashicorp/yamux"
11
9
"nhooyr.io/websocket"
12
10
13
- "cdr.dev/slog"
14
- "github.com/coder/coder/database"
15
11
"github.com/coder/coder/httpapi"
16
12
"github.com/coder/coder/httpmw"
17
13
"github.com/coder/coder/peerbroker"
@@ -39,15 +35,15 @@ type AgentInstanceMetadata struct {
39
35
VNC bool `json:"vnc"`
40
36
}
41
37
42
- func (api * api ) workspaceAgentUpdate () {
38
+ func (api * api ) agentUpdate () {
43
39
44
40
}
45
41
46
- func (api * api ) workspaceAgentConnectByResource (rw http.ResponseWriter , r * http.Request ) {
42
+ func (api * api ) agentConnectByResource (rw http.ResponseWriter , r * http.Request ) {
47
43
api .websocketWaitGroup .Add (1 )
48
44
defer api .websocketWaitGroup .Done ()
49
45
50
- agent := httpmw .WorkspaceAgent (r )
46
+ agent := httpmw .Agent (r )
51
47
if ! agent .UpdatedAt .Valid {
52
48
httpapi .Write (rw , http .StatusPreconditionRequired , httpapi.Response {
53
49
Message : "Agent hasn't connected yet!" ,
@@ -75,7 +71,7 @@ func (api *api) workspaceAgentConnectByResource(rw http.ResponseWriter, r *http.
75
71
return
76
72
}
77
73
err = peerbroker .ProxyListen (r .Context (), session , peerbroker.ProxyOptions {
78
- ChannelID : resource . WorkspaceAgentID . UUID .String (),
74
+ ChannelID : agent . ID .String (),
79
75
Logger : api .Logger .Named ("peerbroker-proxy-dial" ),
80
76
Pubsub : api .Pubsub ,
81
77
})
@@ -85,11 +81,11 @@ func (api *api) workspaceAgentConnectByResource(rw http.ResponseWriter, r *http.
85
81
}
86
82
}
87
83
88
- func (api * api ) workspaceAgentServe (rw http.ResponseWriter , r * http.Request ) {
84
+ func (api * api ) agentServe (rw http.ResponseWriter , r * http.Request ) {
89
85
api .websocketWaitGroup .Add (1 )
90
86
defer api .websocketWaitGroup .Done ()
91
87
92
- workspaceAgent := httpmw .WorkspaceAgent (r )
88
+ agent := httpmw .Agent (r )
93
89
conn , err := websocket .Accept (rw , r , & websocket.AcceptOptions {
94
90
CompressionMode : websocket .CompressionDisabled ,
95
91
})
@@ -110,44 +106,14 @@ func (api *api) workspaceAgentServe(rw http.ResponseWriter, r *http.Request) {
110
106
return
111
107
}
112
108
closer , err := peerbroker .ProxyDial (proto .NewDRPCPeerBrokerClient (provisionersdk .Conn (session )), peerbroker.ProxyOptions {
113
- ChannelID : workspaceAgent .ID .String (),
109
+ ChannelID : agent .ID .String (),
114
110
Pubsub : api .Pubsub ,
115
111
Logger : api .Logger .Named ("peerbroker-proxy-listen" ),
116
112
})
117
113
if err != nil {
118
114
_ = conn .Close (websocket .StatusAbnormalClosure , err .Error ())
119
115
return
120
116
}
121
-
122
- err = api .Database .UpdateWorkspaceAgentByID (r .Context (), database.UpdateWorkspaceAgentByIDParams {
123
- ID : workspaceAgent .ID ,
124
- UpdatedAt : sql.NullTime {
125
- Time : database .Now (),
126
- Valid : true ,
127
- },
128
- })
129
- if err != nil {
130
- _ = conn .Close (websocket .StatusAbnormalClosure , err .Error ())
131
- return
132
- }
133
117
defer closer .Close ()
134
- ticker := time .NewTicker (5 * time .Second )
135
- for {
136
- select {
137
- case <- ticker .C :
138
- err = api .Database .UpdateWorkspaceAgentByID (r .Context (), database.UpdateWorkspaceAgentByIDParams {
139
- ID : workspaceAgent .ID ,
140
- UpdatedAt : sql.NullTime {
141
- Time : database .Now (),
142
- Valid : true ,
143
- },
144
- })
145
- if err != nil {
146
- api .Logger .Error (r .Context (), "update workspace agent by id" , slog .Error (err ), slog .F ("id" , workspaceAgent .ID .String ()))
147
- return
148
- }
149
- case <- r .Context ().Done ():
150
- return
151
- }
152
- }
118
+ <- r .Context ().Done ()
153
119
}
0 commit comments