MCPcopy Create free account
hub / github.com/cloudbase/garm / AgentHandler

Method AgentHandler

apiserver/controllers/agent.go:18–61  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

16)
17
18func (a *APIController) AgentHandler(w http.ResponseWriter, r *http.Request) {
19 ctx := r.Context()
20 instance, err := auth.InstanceParams(ctx)
21 if err != nil {
22 w.WriteHeader(http.StatusForbidden)
23 slog.ErrorContext(ctx, "failed to authenticate instance")
24 return
25 }
26
27 conn, err := a.upgrader.Upgrade(w, r, nil)
28 if err != nil {
29 slog.With(slog.Any("error", err)).ErrorContext(ctx, "error upgrading to websockets")
30 return
31 }
32
33 slog.DebugContext(ctx, "new agent connected", "agent_name", instance.Name)
34 agent, err := agent.NewAgent(ctx, conn, instance, a.r)
35 if err != nil {
36 slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to create agent")
37 return
38 }
39 defer func() {
40 slog.DebugContext(ctx, "stopping agent", "agent_name", instance.Name)
41 agent.Stop()
42 }()
43
44 if err := agent.Start(); err != nil {
45 slog.ErrorContext(ctx, "failed to start agent loop", "error", err, "agent_name", instance.Name)
46 handleError(ctx, w, err)
47 return
48 }
49
50 if err := a.agentHub.RegisterAgent(agent); err != nil {
51 handleError(ctx, w, err)
52 return
53 }
54 defer a.agentHub.UnregisterAgent(instance.Name)
55
56 select {
57 case <-agent.Done():
58 case <-ctx.Done():
59 }
60 slog.InfoContext(ctx, "connection closed", "agent_name", instance.Name)
61}
62
63func (a *APIController) AgentShellHandler(w http.ResponseWriter, r *http.Request) {
64 ctx := r.Context()

Callers

nothing calls this directly

Calls 8

StopMethod · 0.95
StartMethod · 0.95
DoneMethod · 0.95
InstanceParamsFunction · 0.92
handleErrorFunction · 0.85
RegisterAgentMethod · 0.80
UnregisterAgentMethod · 0.80
DoneMethod · 0.45

Tested by

no test coverage detected