From 4ff47f4507a76b9bf96edf0a81b4c7847954d045 Mon Sep 17 00:00:00 2001 From: zhanghan Date: Mon, 27 Oct 2025 16:34:13 +0800 Subject: [PATCH] The execution status of subtasks is given in the subtask function --- automation/agent/exec/service/common.go | 15 +------- automation/agent/exec/service/exec.go | 51 ++++++++++--------------- 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/automation/agent/exec/service/common.go b/automation/agent/exec/service/common.go index 7f5d676f..95353eb6 100644 --- a/automation/agent/exec/service/common.go +++ b/automation/agent/exec/service/common.go @@ -141,6 +141,7 @@ func createScriptResultPath(jobId, scriptId string) (string, error) { return resultFilePath, nil } +// 创建job存储路径 func createJobResultPath(jobId string) (string, error) { resultDir := fmt.Sprintf("%s/jobId_%s", JobsBaseDir, jobId) if _, err := os.Stat(resultDir); os.IsNotExist(err) { @@ -215,17 +216,3 @@ func runScriptWithCancel(interpreter, scriptPath string, params string, timeoutS return stdoutStr, stderrStr, model.SubJobSuccess, cmd.ProcessState.ExitCode(), nil } } - -func getResult(jobId string, scriptId string) ([]byte, error) { - resultFilePath := fmt.Sprintf("%s/jobId_%s/result_%s.json", JobsBaseDir, jobId, scriptId) - if _, err := os.Stat(resultFilePath); os.IsNotExist(err) { - return nil, fmt.Errorf("任务结果不存在") - } - - data, err := os.ReadFile(resultFilePath) - if err != nil { - return nil, fmt.Errorf("读取任务结果失败: %s", err.Error()) - } - return data, nil - -} diff --git a/automation/agent/exec/service/exec.go b/automation/agent/exec/service/exec.go index 1dc53cc4..f96957de 100644 --- a/automation/agent/exec/service/exec.go +++ b/automation/agent/exec/service/exec.go @@ -31,7 +31,8 @@ func ExecJob(job *model.JobTask) error { OutputParams: job.OutputParams, } for _, sj := range job.SubJobs { - taskStatus.SubJobs[sj.StepNum] = &sj + subJob := sj + taskStatus.SubJobs[sj.StepNum] = &subJob } TaskManager.Lock() @@ -59,7 +60,6 @@ func CreateJobExecutionTemplate(job *model.JobTask) error { } } - // 创建job存储路径 resultFilePath, err := createJobResultPath(job.Job.JobId) if err != nil { logger.Error("创建任务结果存储路径失败: %s", err.Error()) @@ -73,9 +73,7 @@ func CreateJobExecutionTemplate(job *model.JobTask) error { return nil } -// ========================== -// 执行逻辑 -// ========================== +// 父作业执行逻辑 func executeJob(job *model.JobTask, taskStatus *TaskStatus) { taskStatus.JobStatus = model.JobRunning @@ -100,33 +98,21 @@ func executeJob(job *model.JobTask, taskStatus *TaskStatus) { } } - // 更新状态:执行中 + // 切换执行步骤 TaskManager.Lock() subStatus := taskStatus.SubJobs[subJob.StepNum] taskStatus.CurrentStep = subJob.StepNum - subStatus.SubJobStatus = model.SubJobRunning - subStatus.StartTime = time.Now().Format("2006-01-02 15:04:05") TaskManager.Unlock() - subJob.SubJobStatus = model.SubJobRunning // 执行脚本 scriptResultPath, _ := createScriptResultPath(job.Job.JobId, subJob.ScriptId) - - statusMessage, err := executeSubJob(&subJob) - - TaskManager.Lock() - subStatus.SubJobStatus = statusMessage - subStatus.Result = subJob.Result - subStatus.EndTime = time.Now().Format("2006-01-02 15:04:05") - TaskManager.Unlock() - subJob.SubJobStatus = statusMessage - - writeResultToFile(scriptResultPath, subJob) - if err != nil || statusMessage != model.SubJobSuccess { + err := executeSubJob(subStatus) + writeResultToFile(scriptResultPath, subStatus) + if err != nil || subStatus.SubJobStatus != model.SubJobSuccess { TaskManager.Lock() - taskStatus.JobStatus = statusMessage + taskStatus.JobStatus = subStatus.SubJobStatus TaskManager.Unlock() - logger.Error("子任务 %d 执行失败: %s", subJob.StepNum, statusMessage) + logger.Error("子任务 %d 执行失败: %s", subJob.StepNum, subStatus.SubJobStatus) // 如果失败,不进行下一步了 writeResultToFile(fmt.Sprintf("%s/jobId_%s/result.json", JobsBaseDir, job.Job.JobId), taskStatus) return @@ -141,19 +127,21 @@ func executeJob(job *model.JobTask, taskStatus *TaskStatus) { logger.Debug("任务 %s 执行完成", job.Job.JobId) } -// ========================== -// 子任务执行逻辑 -// ========================== -func executeSubJob(subJob *model.SubJob) (string, error) { +// 子作业执行 +func executeSubJob(subJob *model.SubJob) error { + subJob.SubJobStatus = model.SubJobRunning + subJob.StartTime = time.Now().Format("2006-01-02 15:04:05") + scriptPath, err := getScriptFilePath(subJob.ScriptId) if err != nil { - return "", err + return err } interpreter, err := getScriptInterpreter(scriptPath) if err != nil { - return "", err + return err } + var scriptParam string TaskManager.Lock() for _, input := range TaskManager.Tasks[subJob.JobId].InputParams { @@ -177,5 +165,8 @@ func executeSubJob(subJob *model.SubJob) (string, error) { } else { subJob.Result = json.RawMessage([]byte("{}")) } - return statusMessage, err + + subJob.SubJobStatus = statusMessage + subJob.EndTime = time.Now().Format("2006-01-02 15:04:05") + return err } -- Gitee