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

Method sessionStart

agent/agentssh/agentssh.go:612–652  ·  view source on GitHub ↗
(logger slog.Logger, session ssh.Session, env []string, magicType MagicSessionType, container, containerUser string)

Source from the content-addressed store, hash-verified

610}
611
612func (s *Server) sessionStart(logger slog.Logger, session ssh.Session, env []string, magicType MagicSessionType, container, containerUser string) (retErr error) {
613 ctx := session.Context()
614
615 magicTypeLabel := magicTypeMetricLabel(magicType)
616 sshPty, windowSize, isPty := session.Pty()
617 ptyLabel := "no"
618 if isPty {
619 ptyLabel = "yes"
620 }
621
622 var ei usershell.EnvInfoer
623 var err error
624 if s.config.ExperimentalContainers && container != "" {
625 ei, err = agentcontainers.EnvInfo(ctx, s.Execer, container, containerUser)
626 if err != nil {
627 s.metrics.sessionErrors.WithLabelValues(magicTypeLabel, ptyLabel, "container_env_info").Add(1)
628 return err
629 }
630 }
631 cmd, err := s.CreateCommand(ctx, session.RawCommand(), env, ei)
632 if err != nil {
633 s.metrics.sessionErrors.WithLabelValues(magicTypeLabel, ptyLabel, "create_command").Add(1)
634 return err
635 }
636
637 if ssh.AgentRequested(session) {
638 l, err := ssh.NewAgentListener()
639 if err != nil {
640 s.metrics.sessionErrors.WithLabelValues(magicTypeLabel, ptyLabel, "listener").Add(1)
641 return xerrors.Errorf("new agent listener: %w", err)
642 }
643 defer l.Close()
644 go ssh.ForwardAgentConnections(l, session)
645 cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", "SSH_AUTH_SOCK", l.Addr().String()))
646 }
647
648 if isPty {
649 return s.startPTYSession(logger, session, magicTypeLabel, cmd, sshPty, windowSize)
650 }
651 return s.startNonPTYSession(logger, session, magicTypeLabel, cmd.AsExec())
652}
653
654func (s *Server) startNonPTYSession(logger slog.Logger, session ssh.Session, magicTypeLabel string, cmd *exec.Cmd) error {
655 s.metrics.sessionsTotal.WithLabelValues(magicTypeLabel, "no").Add(1)

Callers 1

sessionHandlerMethod · 0.95

Calls 14

CreateCommandMethod · 0.95
startPTYSessionMethod · 0.95
startNonPTYSessionMethod · 0.95
EnvInfoFunction · 0.92
magicTypeMetricLabelFunction · 0.85
WithLabelValuesMethod · 0.80
AsExecMethod · 0.80
ContextMethod · 0.65
AddMethod · 0.65
RawCommandMethod · 0.65
CloseMethod · 0.65
ErrorfMethod · 0.45

Tested by

no test coverage detected