(stream proto.DRPCProvisioner_SessionStream)
| 26 | } |
| 27 | |
| 28 | func (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 | |
| 64 | func (s *Session) requestReader(done <-chan struct{}) <-chan *proto.Request { |
| 65 | ch := make(chan *proto.Request) |
nothing calls this directly
no test coverage detected