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

Method StartJob

pkg/jobmanager/jobmanager.go:222–306  ·  view source on GitHub ↗
(msc *MainServerConn, data wshrpc.CommandStartJobData)

Source from the content-addressed store, hash-verified

220}
221
222func (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)

Callers 1

StartJobCommandMethod · 0.80

Calls 5

MakeJobCmdFunction · 0.85
AttachStreamWriterMethod · 0.80
AttachReaderMethod · 0.80
GetCmdMethod · 0.45

Tested by

no test coverage detected