Skip to content

Commit 7ad8750

Browse files
authored
chore: move agent functions from codersdk into agentsdk (#5903)
* chore: rename `AgentConn` to `WorkspaceAgentConn` The codersdk was becoming bloated with consts for the workspace agent that made no sense to a reader. `Tailnet*` is an example of these consts. * chore: remove `Get` prefix from *Client functions * chore: remove `BypassRatelimits` option in `codersdk.Client` It feels wrong to have this as a direct option because it's so infrequently needed by API callers. It's better to directly modify headers in the two places that we actually use it. * Merge `appearance.go` and `buildinfo.go` into `deployment.go` * Merge `experiments.go` and `features.go` into `deployment.go` * Fix `make gen` referencing old type names * Merge `error.go` into `client.go` `codersdk.Response` lived in `error.go`, which is wrong. * chore: refactor workspace agent functions into agentsdk It was odd conflating the codersdk that clients should use with functions that only the agent should use. This separates them into two SDKs that are closely coupled, but separate. * Merge `insights.go` into `deployment.go` * Merge `organizationmember.go` into `organizations.go` * Merge `quota.go` into `workspaces.go` * Rename `sse.go` to `serversentevents.go` * Rename `codersdk.WorkspaceAppHostResponse` to `codersdk.AppHostResponse` * Format `.vscode/settings.json` * Fix outdated naming in `api.ts` * Fix app host response * Fix unsupported type * Fix imported type
1 parent e49f416 commit 7ad8750

File tree

115 files changed

+2474
-2550
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+2474
-2550
lines changed

.vscode/settings.json

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"cSpell.words": [
33
"afero",
4+
"agentsdk",
45
"apps",
56
"ASKPASS",
67
"autostop",
@@ -183,6 +184,10 @@
183184
"files.exclude": {
184185
"**/node_modules": true
185186
},
187+
"search.exclude": {
188+
"scripts/metricsdocgen/metrics": true,
189+
"docs/api/*.md": true
190+
},
186191
// Ensure files always have a newline.
187192
"files.insertFinalNewline": true,
188193
"go.lintTool": "golangci-lint",

agent/agent.go

+24-23
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import (
4141
"github.com/coder/coder/buildinfo"
4242
"github.com/coder/coder/coderd/gitauth"
4343
"github.com/coder/coder/codersdk"
44+
"github.com/coder/coder/codersdk/agentsdk"
4445
"github.com/coder/coder/pty"
4546
"github.com/coder/coder/tailnet"
4647
"github.com/coder/retry"
@@ -68,12 +69,12 @@ type Options struct {
6869
}
6970

7071
type Client interface {
71-
WorkspaceAgentMetadata(ctx context.Context) (codersdk.WorkspaceAgentMetadata, error)
72-
ListenWorkspaceAgent(ctx context.Context) (net.Conn, error)
73-
AgentReportStats(ctx context.Context, log slog.Logger, stats func() *codersdk.AgentStats) (io.Closer, error)
74-
PostWorkspaceAgentLifecycle(ctx context.Context, state codersdk.PostWorkspaceAgentLifecycleRequest) error
75-
PostWorkspaceAgentAppHealth(ctx context.Context, req codersdk.PostWorkspaceAppHealthsRequest) error
76-
PostWorkspaceAgentVersion(ctx context.Context, version string) error
72+
Metadata(ctx context.Context) (agentsdk.Metadata, error)
73+
Listen(ctx context.Context) (net.Conn, error)
74+
ReportStats(ctx context.Context, log slog.Logger, stats func() *agentsdk.Stats) (io.Closer, error)
75+
PostLifecycle(ctx context.Context, state agentsdk.PostLifecycleRequest) error
76+
PostAppHealth(ctx context.Context, req agentsdk.PostAppHealthsRequest) error
77+
PostVersion(ctx context.Context, version string) error
7778
}
7879

7980
func New(options Options) io.Closer {
@@ -187,7 +188,7 @@ func (a *agent) reportLifecycleLoop(ctx context.Context) {
187188

188189
a.logger.Debug(ctx, "post lifecycle state", slog.F("state", state))
189190

190-
err := a.client.PostWorkspaceAgentLifecycle(ctx, codersdk.PostWorkspaceAgentLifecycleRequest{
191+
err := a.client.PostLifecycle(ctx, agentsdk.PostLifecycleRequest{
191192
State: state,
192193
})
193194
if err == nil {
@@ -226,12 +227,12 @@ func (a *agent) run(ctx context.Context) error {
226227
}
227228
a.sessionToken.Store(&sessionToken)
228229

229-
err = a.client.PostWorkspaceAgentVersion(ctx, buildinfo.Version())
230+
err = a.client.PostVersion(ctx, buildinfo.Version())
230231
if err != nil {
231232
return xerrors.Errorf("update workspace agent version: %w", err)
232233
}
233234

234-
metadata, err := a.client.WorkspaceAgentMetadata(ctx)
235+
metadata, err := a.client.Metadata(ctx)
235236
if err != nil {
236237
return xerrors.Errorf("fetch metadata: %w", err)
237238
}
@@ -300,7 +301,7 @@ func (a *agent) run(ctx context.Context) error {
300301
appReporterCtx, appReporterCtxCancel := context.WithCancel(ctx)
301302
defer appReporterCtxCancel()
302303
go NewWorkspaceAppHealthReporter(
303-
a.logger, metadata.Apps, a.client.PostWorkspaceAgentAppHealth)(appReporterCtx)
304+
a.logger, metadata.Apps, a.client.PostAppHealth)(appReporterCtx)
304305

305306
a.logger.Debug(ctx, "running tailnet with derpmap", slog.F("derpmap", metadata.DERPMap))
306307

@@ -326,7 +327,7 @@ func (a *agent) run(ctx context.Context) error {
326327
}
327328

328329
// Report statistics from the created network.
329-
cl, err := a.client.AgentReportStats(ctx, a.logger, func() *codersdk.AgentStats {
330+
cl, err := a.client.ReportStats(ctx, a.logger, func() *agentsdk.Stats {
330331
stats := network.ExtractTrafficStats()
331332
return convertAgentStats(stats)
332333
})
@@ -373,7 +374,7 @@ func (a *agent) trackConnGoroutine(fn func()) error {
373374

374375
func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (_ *tailnet.Conn, err error) {
375376
network, err := tailnet.NewConn(&tailnet.Options{
376-
Addresses: []netip.Prefix{netip.PrefixFrom(codersdk.TailnetIP, 128)},
377+
Addresses: []netip.Prefix{netip.PrefixFrom(codersdk.WorkspaceAgentIP, 128)},
377378
DERPMap: derpMap,
378379
Logger: a.logger.Named("tailnet"),
379380
EnableTrafficStats: true,
@@ -387,7 +388,7 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (_
387388
}
388389
}()
389390

390-
sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.TailnetSSHPort))
391+
sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentSSHPort))
391392
if err != nil {
392393
return nil, xerrors.Errorf("listen on the ssh port: %w", err)
393394
}
@@ -419,7 +420,7 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (_
419420
return nil, err
420421
}
421422

422-
reconnectingPTYListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.TailnetReconnectingPTYPort))
423+
reconnectingPTYListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentReconnectingPTYPort))
423424
if err != nil {
424425
return nil, xerrors.Errorf("listen for reconnecting pty: %w", err)
425426
}
@@ -450,7 +451,7 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (_
450451
if err != nil {
451452
continue
452453
}
453-
var msg codersdk.ReconnectingPTYInit
454+
var msg codersdk.WorkspaceAgentReconnectingPTYInit
454455
err = json.Unmarshal(data, &msg)
455456
if err != nil {
456457
continue
@@ -463,7 +464,7 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (_
463464
return nil, err
464465
}
465466

466-
speedtestListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.TailnetSpeedtestPort))
467+
speedtestListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentSpeedtestPort))
467468
if err != nil {
468469
return nil, xerrors.Errorf("listen for speedtest: %w", err)
469470
}
@@ -491,7 +492,7 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (_
491492
return nil, err
492493
}
493494

494-
statisticsListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.TailnetStatisticsPort))
495+
statisticsListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.WorkspaceAgentStatisticsPort))
495496
if err != nil {
496497
return nil, xerrors.Errorf("listen for statistics: %w", err)
497498
}
@@ -531,7 +532,7 @@ func (a *agent) runCoordinator(ctx context.Context, network *tailnet.Conn) error
531532
ctx, cancel := context.WithCancel(ctx)
532533
defer cancel()
533534

534-
coordinator, err := a.client.ListenWorkspaceAgent(ctx)
535+
coordinator, err := a.client.Listen(ctx)
535536
if err != nil {
536537
return err
537538
}
@@ -700,8 +701,8 @@ func (a *agent) init(ctx context.Context) {
700701
go a.runLoop(ctx)
701702
}
702703

703-
func convertAgentStats(counts map[netlogtype.Connection]netlogtype.Counts) *codersdk.AgentStats {
704-
stats := &codersdk.AgentStats{
704+
func convertAgentStats(counts map[netlogtype.Connection]netlogtype.Counts) *agentsdk.Stats {
705+
stats := &agentsdk.Stats{
705706
ConnsByProto: map[string]int64{},
706707
NumConns: int64(len(counts)),
707708
}
@@ -736,7 +737,7 @@ func (a *agent) createCommand(ctx context.Context, rawCommand string, env []stri
736737
if rawMetadata == nil {
737738
return nil, xerrors.Errorf("no metadata was provided: %w", err)
738739
}
739-
metadata, valid := rawMetadata.(codersdk.WorkspaceAgentMetadata)
740+
metadata, valid := rawMetadata.(agentsdk.Metadata)
740741
if !valid {
741742
return nil, xerrors.Errorf("metadata is the wrong type: %T", metadata)
742743
}
@@ -845,7 +846,7 @@ func (a *agent) handleSSHSession(session ssh.Session) (retErr error) {
845846
session.DisablePTYEmulation()
846847

847848
if !isQuietLogin(session.RawCommand()) {
848-
metadata, ok := a.metadata.Load().(codersdk.WorkspaceAgentMetadata)
849+
metadata, ok := a.metadata.Load().(agentsdk.Metadata)
849850
if ok {
850851
err = showMOTD(session, metadata.MOTDFile)
851852
if err != nil {
@@ -918,7 +919,7 @@ func (a *agent) handleSSHSession(session ssh.Session) (retErr error) {
918919
return cmd.Wait()
919920
}
920921

921-
func (a *agent) handleReconnectingPTY(ctx context.Context, logger slog.Logger, msg codersdk.ReconnectingPTYInit, conn net.Conn) (retErr error) {
922+
func (a *agent) handleReconnectingPTY(ctx context.Context, logger slog.Logger, msg codersdk.WorkspaceAgentReconnectingPTYInit, conn net.Conn) (retErr error) {
922923
defer conn.Close()
923924

924925
connectionID := uuid.NewString()

0 commit comments

Comments
 (0)