Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/577 Reviewed-by: ychao_1983 <ychao_1983@sina.com>tags/v1.21.12.1
| @@ -151,23 +151,42 @@ type TaskPod struct { | |||
| TaskRoleStatus struct { | |||
| Name string `json:"name"` | |||
| } `json:"taskRoleStatus"` | |||
| TaskStatuses []struct { | |||
| TaskIndex int `json:"taskIndex"` | |||
| PodUID string `json:"podUid"` | |||
| PodIP string `json:"podIp"` | |||
| PodName string `json:"podName"` | |||
| ContainerID string `json:"containerId"` | |||
| ContainerIP string `json:"containerIp"` | |||
| ContainerGpus string `json:"containerGpus"` | |||
| State string `json:"state"` | |||
| StartAt time.Time `json:"startAt"` | |||
| FinishedAt time.Time `json:"finishedAt"` | |||
| ExitCode int `json:"exitCode"` | |||
| ExitDiagnostics string `json:"exitDiagnostics"` | |||
| RetriedCount int `json:"retriedCount"` | |||
| StartTime string | |||
| FinishedTime string | |||
| } `json:"taskStatuses"` | |||
| //TaskStatuses []struct { | |||
| // TaskIndex int `json:"taskIndex"` | |||
| // PodUID string `json:"podUid"` | |||
| // PodIP string `json:"podIp"` | |||
| // PodName string `json:"podName"` | |||
| // ContainerID string `json:"containerId"` | |||
| // ContainerIP string `json:"containerIp"` | |||
| // ContainerGpus string `json:"containerGpus"` | |||
| // State string `json:"state"` | |||
| // StartAt time.Time `json:"startAt"` | |||
| // FinishedAt time.Time `json:"finishedAt"` | |||
| // ExitCode int `json:"exitCode"` | |||
| // ExitDiagnostics string `json:"exitDiagnostics"` | |||
| // RetriedCount int `json:"retriedCount"` | |||
| // StartTime string | |||
| // FinishedTime string | |||
| //} `json:"taskStatuses"` | |||
| TaskStatuses []TaskStatuses `json:"taskStatuses"` | |||
| } | |||
| type TaskStatuses struct { | |||
| TaskIndex int `json:"taskIndex"` | |||
| PodUID string `json:"podUid"` | |||
| PodIP string `json:"podIp"` | |||
| PodName string `json:"podName"` | |||
| ContainerID string `json:"containerId"` | |||
| ContainerIP string `json:"containerIp"` | |||
| ContainerGpus string `json:"containerGpus"` | |||
| State string `json:"state"` | |||
| StartAt time.Time `json:"startAt"` | |||
| FinishedAt time.Time `json:"finishedAt"` | |||
| ExitCode int `json:"exitCode"` | |||
| ExitDiagnostics string `json:"exitDiagnostics"` | |||
| RetriedCount int `json:"retriedCount"` | |||
| StartTime string | |||
| FinishedTime string | |||
| } | |||
| type TaskInfo struct { | |||
| @@ -281,17 +281,30 @@ func CloudBrainShow(ctx *context.Context) { | |||
| if result != nil { | |||
| jobRes, _ := models.ConvertToJobResultPayload(result.Payload) | |||
| jobRes.Resource.Memory = strings.ReplaceAll(jobRes.Resource.Memory, "Mi", "MB") | |||
| ctx.Data["result"] = jobRes | |||
| taskRoles := jobRes.TaskRoles | |||
| taskRes, _ := models.ConvertToTaskPod(taskRoles[cloudbrain.SubTaskName].(map[string]interface{})) | |||
| ctx.Data["taskRes"] = taskRes | |||
| task.Status = taskRes.TaskStatuses[0].State | |||
| task.ContainerID = taskRes.TaskStatuses[0].ContainerID | |||
| task.ContainerIp = taskRes.TaskStatuses[0].ContainerIP | |||
| err = models.UpdateJob(task) | |||
| if err != nil { | |||
| ctx.Data["error"] = err.Error() | |||
| if jobRes.JobStatus.State != string(models.JobFailed) { | |||
| taskRes, _ := models.ConvertToTaskPod(taskRoles[cloudbrain.SubTaskName].(map[string]interface{})) | |||
| ctx.Data["taskRes"] = taskRes | |||
| task.Status = taskRes.TaskStatuses[0].State | |||
| task.ContainerID = taskRes.TaskStatuses[0].ContainerID | |||
| task.ContainerIp = taskRes.TaskStatuses[0].ContainerIP | |||
| err = models.UpdateJob(task) | |||
| if err != nil { | |||
| ctx.Data["error"] = err.Error() | |||
| } | |||
| } else { | |||
| task.Status = jobRes.JobStatus.State | |||
| taskRes := models.TaskPod{TaskStatuses: []models.TaskStatuses{ | |||
| { | |||
| State: jobRes.JobStatus.State, | |||
| }, | |||
| }} | |||
| ctx.Data["taskRes"] = taskRes | |||
| jobRes.JobStatus.StartTime = time.Unix(int64(task.CreatedUnix), 0).Format("2006-01-02 15:04:05") | |||
| jobRes.JobStatus.EndTime = time.Unix(int64(task.UpdatedUnix), 0).Format("2006-01-02 15:04:05") | |||
| } | |||
| ctx.Data["result"] = jobRes | |||
| } | |||
| ctx.Data["task"] = task | |||
| @@ -351,7 +364,7 @@ func CloudBrainStop(ctx *context.Context) { | |||
| return | |||
| } | |||
| if task.Status == string(models.JobStopped) { | |||
| if task.Status == string(models.JobStopped) || task.Status == string(models.JobFailed) { | |||
| log.Error("the job(%s) has been stopped", task.JobName, ctx.Data["msgID"]) | |||
| ctx.ServerError("the job has been stopped", errors.New("the job has been stopped")) | |||
| return | |||
| @@ -337,9 +337,9 @@ | |||
| 调试 | |||
| </a> | |||
| <form id="stopForm-{{.JobID}}" action="{{if eq .Status "STOPPED"}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/stop{{end}}" method="post" style="margin-left:-1px;"> | |||
| <form id="stopForm-{{.JobID}}" action="{{if ((eq .Status "STOPPED") or (eq .Status "FAILED"))}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/stop{{end}}" method="post" style="margin-left:-1px;"> | |||
| {{$.CsrfTokenHtml}} | |||
| <a class="ui basic {{if eq .Status "STOPPED"}}disabled {{else}}blue {{end}}button" onclick="document.getElementById('stopForm-{{.JobID}}').submit();"> | |||
| <a class="ui basic {{if ((eq .Status "STOPPED") or (eq .Status "FAILED"))}}disabled {{else}}blue {{end}}button" onclick="document.getElementById('stopForm-{{.JobID}}').submit();"> | |||
| 停止 | |||
| </a> | |||
| </form> | |||