MCPcopy Index your code
hub / github.com/coder/coder / Session

Method Session

provisionersdk/session.go:28–62  ·  view source on GitHub ↗
(stream proto.DRPCProvisioner_SessionStream)

Source from the content-addressed store, hash-verified

26}
27
28func (p *protoServer) Session(stream proto.DRPCProvisioner_SessionStream) error {
29 sessID := uuid.New().String()
30 s := &Session{
31 Logger: p.opts.Logger.With(slog.F("session_id", sessID)),
32 stream: stream,
33 server: p.server,
34 }
35
36 s.Files = tfpath.Session(p.opts.WorkDirectory, sessID)
37
38 defer func() {
39 s.Files.Cleanup(s.Context(), s.Logger, afero.NewOsFs())
40 }()
41
42 req, err := stream.Recv()
43 if err != nil {
44 return xerrors.Errorf("receive config: %w", err)
45 }
46 config := req.GetConfig()
47 if config == nil {
48 return xerrors.New("first request must be Config")
49 }
50 s.Config = config
51 if s.Config.ProvisionerLogLevel != "" {
52 s.logLevel = proto.LogLevel_value[strings.ToUpper(s.Config.ProvisionerLogLevel)]
53 }
54
55 // Cleanup any previously left stale sessions.
56 err = s.Files.CleanStaleSessions(s.Context(), s.Logger, afero.NewOsFs(), time.Now())
57 if err != nil {
58 return xerrors.Errorf("unable to clean stale sessions %q: %w", s.Files, err)
59 }
60
61 return s.handleRequests()
62}
63
64func (s *Session) requestReader(done <-chan struct{}) <-chan *proto.Request {
65 ch := make(chan *proto.Request)

Callers

nothing calls this directly

Calls 10

SessionFunction · 0.92
CleanStaleSessionsMethod · 0.80
handleRequestsMethod · 0.80
NewMethod · 0.65
CleanupMethod · 0.65
ContextMethod · 0.65
RecvMethod · 0.65
GetConfigMethod · 0.65
StringMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected