(msc *MainServerConn, data wshrpc.CommandStartJobData)
| 220 | } |
| 221 | |
| 222 | func (jm *JobManager) StartJob(msc *MainServerConn, data wshrpc.CommandStartJobData) (*wshrpc.CommandStartJobRtnData, error) { |
| 223 | jm.lock.Lock() |
| 224 | defer jm.lock.Unlock() |
| 225 | |
| 226 | if jm.Cmd != nil { |
| 227 | log.Printf("StartJob: job already started") |
| 228 | return nil, fmt.Errorf("job already started") |
| 229 | } |
| 230 | |
| 231 | cmdDef := CmdDef{ |
| 232 | Cmd: data.Cmd, |
| 233 | Args: data.Args, |
| 234 | Env: data.Env, |
| 235 | TermSize: data.TermSize, |
| 236 | } |
| 237 | log.Printf("StartJob: creating job cmd for jobid=%s", jm.JobId) |
| 238 | jobCmd, err := MakeJobCmd(jm.JobId, cmdDef) |
| 239 | if err != nil { |
| 240 | log.Printf("StartJob: failed to make job cmd: %v", err) |
| 241 | return nil, fmt.Errorf("failed to start job: %w", err) |
| 242 | } |
| 243 | jm.Cmd = jobCmd |
| 244 | log.Printf("StartJob: job cmd created successfully") |
| 245 | |
| 246 | if data.StreamMeta != nil { |
| 247 | serverSeq, err := jm.connectToStreamHelper_withlock(msc, *data.StreamMeta, 0) |
| 248 | if err != nil { |
| 249 | return nil, fmt.Errorf("failed to connect stream: %w", err) |
| 250 | } |
| 251 | err = msc.WshRpc.StreamBroker.AttachStreamWriter(data.StreamMeta, jm.StreamManager) |
| 252 | if err != nil { |
| 253 | return nil, fmt.Errorf("failed to attach stream writer: %w", err) |
| 254 | } |
| 255 | log.Printf("StartJob: connected stream streamid=%s serverSeq=%d\n", data.StreamMeta.Id, serverSeq) |
| 256 | } |
| 257 | |
| 258 | cmd, cmdPty := jobCmd.GetCmd() |
| 259 | if cmdPty != nil { |
| 260 | log.Printf("StartJob: attaching pty reader to stream manager") |
| 261 | err = jm.StreamManager.AttachReader(cmdPty) |
| 262 | if err != nil { |
| 263 | log.Printf("StartJob: failed to attach reader: %v", err) |
| 264 | return nil, fmt.Errorf("failed to attach reader to stream manager: %w", err) |
| 265 | } |
| 266 | log.Printf("StartJob: pty reader attached successfully") |
| 267 | } else { |
| 268 | log.Printf("StartJob: no pty to attach") |
| 269 | } |
| 270 | |
| 271 | if cmd == nil || cmd.Process == nil { |
| 272 | log.Printf("StartJob: cmd or process is nil") |
| 273 | return nil, fmt.Errorf("cmd or process is nil") |
| 274 | } |
| 275 | cmdPid := cmd.Process.Pid |
| 276 | cmdProc, err := process.NewProcess(int32(cmdPid)) |
| 277 | if err != nil { |
| 278 | log.Printf("StartJob: failed to get cmd process: %v", err) |
| 279 | return nil, fmt.Errorf("failed to get cmd process: %w", err) |
no test coverage detected