(ctx context.Context, params StartJobParams)
| 611 | } |
| 612 | |
| 613 | func 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 |
no test coverage detected