Skip to content

Commit 30ed31a

Browse files
committed
refactor(support): move agent-related info to top level
1 parent ed377a5 commit 30ed31a

File tree

4 files changed

+65
-46
lines changed

4 files changed

+65
-46
lines changed

cli/support.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ func writeBundle(src *support.Bundle, dest *zip.Writer) error {
145145
"network/netcheck_local.json": src.Network.NetcheckLocal,
146146
"network/netcheck_remote.json": src.Network.NetcheckRemote,
147147
"workspace/workspace.json": src.Workspace.Workspace,
148-
"workspace/agent.json": src.Workspace.Agent,
148+
"agent/agent.json": src.Agent.Agent,
149149
"workspace/template.json": src.Workspace.Template,
150150
"workspace/template_version.json": src.Workspace.TemplateVersion,
151151
"workspace/parameters.json": src.Workspace.Parameters,
@@ -167,12 +167,12 @@ func writeBundle(src *support.Bundle, dest *zip.Writer) error {
167167
}
168168

169169
for k, v := range map[string]string{
170-
"network/coordinator_debug.html": src.Network.CoordinatorDebug,
171-
"network/tailnet_debug.html": src.Network.TailnetDebug,
172-
"workspace/build_logs.txt": humanizeBuildLogs(src.Workspace.BuildLogs),
173-
"workspace/agent_startup_logs.txt": humanizeAgentLogs(src.Workspace.AgentStartupLogs),
174-
"workspace/template_file.zip": string(templateVersionBytes),
175-
"logs.txt": strings.Join(src.Logs, "\n"),
170+
"network/coordinator_debug.html": src.Network.CoordinatorDebug,
171+
"network/tailnet_debug.html": src.Network.TailnetDebug,
172+
"workspace/build_logs.txt": humanizeBuildLogs(src.Workspace.BuildLogs),
173+
"agent/startup_logs.txt": humanizeAgentLogs(src.Agent.StartupLogs),
174+
"workspace/template_file.zip": string(templateVersionBytes),
175+
"logs.txt": strings.Join(src.Logs, "\n"),
176176
} {
177177
f, err := dest.Create(k)
178178
if err != nil {

cli/support_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,11 @@ func assertBundleContents(t *testing.T, path string) {
148148
case "workspace/build_logs.txt":
149149
bs := readBytesFromZip(t, f)
150150
require.Contains(t, string(bs), "provision done")
151-
case "workspace/agent.json":
151+
case "agent/agent.json":
152152
var v codersdk.WorkspaceAgent
153153
decodeJSONFromZip(t, f, &v)
154154
require.NotEmpty(t, v, "agent should not be empty")
155-
case "workspace/agent_startup_logs.txt":
155+
case "agent/startup_logs.txt":
156156
bs := readBytesFromZip(t, f)
157157
require.Contains(t, string(bs), "started up")
158158
case "workspace/template.json":

support/support.go

Lines changed: 54 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ type Bundle struct {
2525
Deployment Deployment `json:"deployment"`
2626
Network Network `json:"network"`
2727
Workspace Workspace `json:"workspace"`
28+
Agent Agent `json:"agent"`
2829
Logs []string `json:"logs"`
2930
}
3031

@@ -49,8 +50,11 @@ type Workspace struct {
4950
TemplateVersion codersdk.TemplateVersion `json:"template_version"`
5051
TemplateFileBase64 string `json:"template_file_base64"`
5152
BuildLogs []codersdk.ProvisionerJobLog `json:"build_logs"`
52-
Agent codersdk.WorkspaceAgent `json:"agent"`
53-
AgentStartupLogs []codersdk.WorkspaceAgentLog `json:"startup_logs"`
53+
}
54+
55+
type Agent struct {
56+
Agent codersdk.WorkspaceAgent `json:"agent"`
57+
StartupLogs []codersdk.WorkspaceAgentLog `json:"startup_logs"`
5458
}
5559

5660
// Deps is a set of dependencies for discovering information
@@ -170,7 +174,7 @@ func NetworkInfo(ctx context.Context, client *codersdk.Client, log slog.Logger,
170174
return n
171175
}
172176

173-
func WorkspaceInfo(ctx context.Context, client *codersdk.Client, log slog.Logger, workspaceID, agentID uuid.UUID) Workspace {
177+
func WorkspaceInfo(ctx context.Context, client *codersdk.Client, log slog.Logger, workspaceID uuid.UUID) Workspace {
174178
var (
175179
w Workspace
176180
eg errgroup.Group
@@ -181,10 +185,6 @@ func WorkspaceInfo(ctx context.Context, client *codersdk.Client, log slog.Logger
181185
return w
182186
}
183187

184-
if agentID == uuid.Nil {
185-
log.Error(ctx, "no agent id specified")
186-
}
187-
188188
// dependency, cannot fetch concurrently
189189
ws, err := client.Workspace(ctx, workspaceID)
190190
if err != nil {
@@ -198,15 +198,6 @@ func WorkspaceInfo(ctx context.Context, client *codersdk.Client, log slog.Logger
198198
}
199199
w.Workspace = ws
200200

201-
eg.Go(func() error {
202-
agt, err := client.WorkspaceAgent(ctx, agentID)
203-
if err != nil {
204-
return xerrors.Errorf("fetch workspace agent: %w", err)
205-
}
206-
w.Agent = agt
207-
return nil
208-
})
209-
210201
eg.Go(func() error {
211202
buildLogCh, closer, err := client.WorkspaceBuildLogsAfter(ctx, ws.LatestBuild.ID, 0)
212203
if err != nil {
@@ -221,24 +212,6 @@ func WorkspaceInfo(ctx context.Context, client *codersdk.Client, log slog.Logger
221212
return nil
222213
})
223214

224-
eg.Go(func() error {
225-
if len(w.Workspace.LatestBuild.Resources) == 0 {
226-
log.Warn(ctx, "workspace build has no resources")
227-
return nil
228-
}
229-
agentLogCh, closer, err := client.WorkspaceAgentLogsAfter(ctx, agentID, 0, false)
230-
if err != nil {
231-
return xerrors.Errorf("fetch agent startup logs: %w", err)
232-
}
233-
defer closer.Close()
234-
var logs []codersdk.WorkspaceAgentLog
235-
for logChunk := range agentLogCh {
236-
logs = append(w.AgentStartupLogs, logChunk...)
237-
}
238-
w.AgentStartupLogs = logs
239-
return nil
240-
})
241-
242215
eg.Go(func() error {
243216
if w.Workspace.TemplateActiveVersionID == uuid.Nil {
244217
return xerrors.Errorf("workspace has nil template active version id")
@@ -296,6 +269,47 @@ func WorkspaceInfo(ctx context.Context, client *codersdk.Client, log slog.Logger
296269
return w
297270
}
298271

272+
func AgentInfo(ctx context.Context, client *codersdk.Client, log slog.Logger, agentID uuid.UUID) Agent {
273+
var (
274+
a Agent
275+
eg errgroup.Group
276+
)
277+
278+
if agentID == uuid.Nil {
279+
log.Error(ctx, "no agent id specified")
280+
return a
281+
}
282+
283+
eg.Go(func() error {
284+
agt, err := client.WorkspaceAgent(ctx, agentID)
285+
if err != nil {
286+
return xerrors.Errorf("fetch workspace agent: %w", err)
287+
}
288+
a.Agent = agt
289+
return nil
290+
})
291+
292+
eg.Go(func() error {
293+
agentLogCh, closer, err := client.WorkspaceAgentLogsAfter(ctx, agentID, 0, false)
294+
if err != nil {
295+
return xerrors.Errorf("fetch agent startup logs: %w", err)
296+
}
297+
defer closer.Close()
298+
var logs []codersdk.WorkspaceAgentLog
299+
for logChunk := range agentLogCh {
300+
logs = append(logs, logChunk...)
301+
}
302+
a.StartupLogs = logs
303+
return nil
304+
})
305+
306+
if err := eg.Wait(); err != nil {
307+
log.Error(ctx, "fetch agent information", slog.Error(err))
308+
}
309+
310+
return a
311+
}
312+
299313
// Run generates a support bundle with the given dependencies.
300314
func Run(ctx context.Context, d *Deps) (*Bundle, error) {
301315
var b Bundle
@@ -337,7 +351,7 @@ func Run(ctx context.Context, d *Deps) (*Bundle, error) {
337351
return nil
338352
})
339353
eg.Go(func() error {
340-
wi := WorkspaceInfo(ctx, d.Client, d.Log, d.WorkspaceID, d.AgentID)
354+
wi := WorkspaceInfo(ctx, d.Client, d.Log, d.WorkspaceID)
341355
b.Workspace = wi
342356
return nil
343357
})
@@ -346,6 +360,11 @@ func Run(ctx context.Context, d *Deps) (*Bundle, error) {
346360
b.Network = ni
347361
return nil
348362
})
363+
eg.Go(func() error {
364+
ai := AgentInfo(ctx, d.Client, d.Log, d.AgentID)
365+
b.Agent = ai
366+
return nil
367+
})
349368

350369
_ = eg.Wait()
351370

support/support_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ func TestRun(t *testing.T) {
5959
require.NotNil(t, bun.Workspace.Workspace)
6060
assertSanitizedWorkspace(t, bun.Workspace.Workspace)
6161
require.NotEmpty(t, bun.Workspace.BuildLogs)
62-
require.NotNil(t, bun.Workspace.Agent)
63-
require.NotEmpty(t, bun.Workspace.AgentStartupLogs)
6462
require.NotEmpty(t, bun.Workspace.Template)
6563
require.NotEmpty(t, bun.Workspace.TemplateVersion)
6664
require.NotEmpty(t, bun.Workspace.TemplateFileBase64)
6765
require.NotNil(t, bun.Workspace.Parameters)
66+
require.NotNil(t, bun.Agent.Agent)
67+
require.NotEmpty(t, bun.Agent.StartupLogs)
6868
require.NotEmpty(t, bun.Logs)
6969
})
7070

0 commit comments

Comments
 (0)