MCPcopy
hub / github.com/wavetermdev/waveterm / StartJob

Function StartJob

pkg/jobcontroller/jobcontroller.go:613–772  ·  view source on GitHub ↗
(ctx context.Context, params StartJobParams)

Source from the content-addressed store, hash-verified

611}
612
613func StartJob(ctx context.Context, params StartJobParams) (string, error) {
614 if params.ConnName == "" {
615 return "", fmt.Errorf("connection name is required")
616 }
617 if params.JobKind != JobKind_Shell && params.JobKind != JobKind_Task {
618 return "", fmt.Errorf("jobkind must be %q or %q", JobKind_Shell, JobKind_Task)
619 }
620 if params.Cmd == "" {
621 return "", fmt.Errorf("command is required")
622 }
623 if params.TermSize == nil {
624 params.TermSize = &waveobj.TermSize{Rows: 24, Cols: 80}
625 }
626
627 isConnected, err := conncontroller.IsConnected(params.ConnName)
628 if err != nil {
629 return "", fmt.Errorf("error checking connection status: %w", err)
630 }
631 if !isConnected {
632 return "", fmt.Errorf("connection %q is not connected", params.ConnName)
633 }
634
635 jobId := uuid.New().String()
636 jobAuthToken, err := utilfn.RandomHexString(32)
637 if err != nil {
638 return "", fmt.Errorf("failed to generate job auth token: %w", err)
639 }
640
641 jobAccessClaims := &wavejwt.WaveJwtClaims{
642 MainServer: true,
643 JobId: jobId,
644 }
645 jobAccessToken, err := wavejwt.Sign(jobAccessClaims)
646 if err != nil {
647 return "", fmt.Errorf("failed to generate job access token: %w", err)
648 }
649
650 job := &waveobj.Job{
651 OID: jobId,
652 Connection: params.ConnName,
653 JobKind: params.JobKind,
654 Cmd: params.Cmd,
655 CmdArgs: params.Args,
656 CmdEnv: params.Env,
657 CmdTermSize: *params.TermSize,
658 JobAuthToken: jobAuthToken,
659 JobManagerStatus: JobManagerStatus_Init,
660 AttachedBlockId: params.BlockId,
661 WaveVersion: wavebase.WaveVersion,
662 Meta: make(waveobj.MetaMapType),
663 }
664
665 err = wstore.DBInsert(ctx, job)
666 if err != nil {
667 return "", fmt.Errorf("failed to create job in database: %w", err)
668 }
669 if params.BlockId != "" {
670 // AttachJobToBlock will send status

Callers 2

StartRemoteShellJobFunction · 0.92

Calls 15

IsConnectedFunction · 0.92
RandomHexStringFunction · 0.92
SignFunction · 0.92
DBInsertFunction · 0.92
GetBareRpcClientFunction · 0.92
GetBareRpcClientRouteIdFunction · 0.92
MakeJobRouteIdFunction · 0.92
GetClientIdFunction · 0.92
GetPublicKeyFunction · 0.92
CopyAndAddToEnvMapFunction · 0.92
MakeConnectionRouteIdFunction · 0.92
RemoteStartJobCommandFunction · 0.92

Tested by

no test coverage detected