Browse Source

#1654

add task duration
tags/v1.22.3.2^2
chenyifan01 3 years ago
parent
commit
a63a22ea1c
4 changed files with 49 additions and 3 deletions
  1. +16
    -2
      models/cloudbrain.go
  2. +5
    -0
      routers/api/v1/repo/cloudbrain.go
  3. +23
    -1
      routers/repo/cloudbrain.go
  4. +5
    -0
      routers/repo/modelarts.go

+ 16
- 2
models/cloudbrain.go View File

@@ -150,6 +150,19 @@ type Cloudbrain struct {
Repo *Repository `xorm:"-"`
BenchmarkTypeName string `xorm:"-"`
BenchmarkTypeRankLink string `xorm:"-"`
StartTime timeutil.TimeStamp
EndTime timeutil.TimeStamp
}

func (task *Cloudbrain) ComputeDuration() int64 {
if task.StartTime == 0 || task.EndTime == 0 {
return 0
}
d := task.EndTime.AsTime().Unix() - task.StartTime.AsTime().Unix()
if d < 0 {
d = 0
}
return d
}

type CloudbrainInfo struct {
@@ -1019,6 +1032,7 @@ type GetTrainJobResult struct {
NasShareAddr string `json:"nas_share_addr"`
DatasetName string
ModelMetricList string `json:"model_metric_list"` //列表里包含f1_score,recall,precision,accuracy,若有的话
StartTime int64 `json:"start_time"` //训练作业开始时间。
}

type GetTrainJobLogResult struct {
@@ -1327,13 +1341,13 @@ func GetCloudbrainByJobIDAndIsLatestVersion(jobID string, isLatestVersion string

func GetCloudbrainsNeededStopByUserID(userID int64) ([]*Cloudbrain, error) {
cloudBrains := make([]*Cloudbrain, 0)
err := x.Cols("job_id", "status", "type", "job_type", "version_id").Where("user_id=? AND status !=?", userID, string(JobStopped)).Find(&cloudBrains)
err := x.Cols("job_id", "status", "type", "job_type", "version_id", "start_time").Where("user_id=? AND status !=?", userID, string(JobStopped)).Find(&cloudBrains)
return cloudBrains, err
}

func GetCloudbrainsNeededStopByRepoID(repoID int64) ([]*Cloudbrain, error) {
cloudBrains := make([]*Cloudbrain, 0)
err := x.Cols("job_id", "status", "type", "job_type", "version_id").Where("repo_id=? AND status !=?", repoID, string(JobStopped)).Find(&cloudBrains)
err := x.Cols("job_id", "status", "type", "job_type", "version_id", "start_time").Where("repo_id=? AND status !=?", repoID, string(JobStopped)).Find(&cloudBrains)
return cloudBrains, err
}



+ 5
- 0
routers/api/v1/repo/cloudbrain.go View File

@@ -6,6 +6,7 @@
package repo

import (
"code.gitea.io/gitea/modules/timeutil"
"net/http"
"sort"
"time"
@@ -77,6 +78,10 @@ func GetCloudbrainTask(ctx *context.APIContext) {
job.ContainerIp = taskRes.TaskStatuses[0].ContainerIP
job.ContainerID = taskRes.TaskStatuses[0].ContainerID
job.Status = taskRes.TaskStatuses[0].State

if job.StartTime == 0 {
job.StartTime = timeutil.TimeStamp(taskRes.TaskStatuses[0].StartAt.Unix())
}
}

if result.JobStatus.State != string(models.JobWaiting) {


+ 23
- 1
routers/repo/cloudbrain.go View File

@@ -2,6 +2,7 @@ package repo

import (
"bufio"
"code.gitea.io/gitea/modules/timeutil"
"encoding/json"
"errors"
"fmt"
@@ -380,6 +381,9 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName) {
task.Status = taskRes.TaskStatuses[0].State
task.ContainerID = taskRes.TaskStatuses[0].ContainerID
task.ContainerIp = taskRes.TaskStatuses[0].ContainerIP
if task.StartTime == 0 {
task.StartTime = timeutil.TimeStamp(taskRes.TaskStatuses[0].StartAt.Unix())
}
err = models.UpdateJob(task)
if err != nil {
ctx.Data["error"] = err.Error()
@@ -489,6 +493,8 @@ func CloudBrainStop(ctx *context.Context) {
}

task.Status = string(models.JobStopped)
task.EndTime = timeutil.TimeStampNow()
task.Duration = task.ComputeDuration()
err = models.UpdateJob(task)
if err != nil {
log.Error("UpdateJob(%s) failed:%v", task.JobName, err, ctx.Data["msgID"])
@@ -582,6 +588,8 @@ func logErrorAndUpdateJobStatus(err error, taskInfo *models.Cloudbrain) {
log.Warn("Failed to stop cloudBrain job:"+taskInfo.JobID, err)
} else {
taskInfo.Status = string(models.JobStopped)
taskInfo.EndTime = timeutil.TimeStampNow()
taskInfo.Duration = taskInfo.ComputeDuration()
err = models.UpdateJob(taskInfo)
if err != nil {
log.Warn("UpdateJob failed", err)
@@ -953,6 +961,13 @@ func SyncCloudbrainStatus() {
task.Status = taskRes.TaskStatuses[0].State
if task.Status != string(models.JobWaiting) {
task.Duration = time.Now().Unix() - taskRes.TaskStatuses[0].StartAt.Unix()
if task.StartTime == 0 {
task.StartTime = timeutil.TimeStamp(taskRes.TaskStatuses[0].StartAt.Unix())
}
//if task.Status == string(models.JobFailed) {
// task.EndTime = timeutil.TimeStampNow()
// task.Duration = task.ComputeDuration()
//}
err = models.UpdateJob(task)
if err != nil {
log.Error("UpdateJob(%s) failed:%v", task.JobName, err)
@@ -973,6 +988,8 @@ func SyncCloudbrainStatus() {
continue
}
task.Status = string(models.JobStopped)
task.EndTime = timeutil.TimeStampNow()
task.Duration = task.ComputeDuration()
err = models.UpdateJob(task)
if err != nil {
log.Error("UpdateJob(%s) failed:%v", task.JobName, err)
@@ -991,7 +1008,9 @@ func SyncCloudbrainStatus() {

if result != nil {
task.Status = result.Status

if task.StartTime == 0 {
task.StartTime = timeutil.TimeStamp(result.Lease.CreateTime / 1000)
}
err = models.UpdateJob(task)
if err != nil {
log.Error("UpdateJob(%s) failed:%v", task.JobName, err)
@@ -1010,6 +1029,9 @@ func SyncCloudbrainStatus() {
task.Duration = result.Duration
task.TrainJobDuration = result.TrainJobDuration

if task.StartTime == 0 {
task.StartTime = timeutil.TimeStamp(result.StartTime)
}
if result.Duration != 0 {
task.TrainJobDuration = util.AddZero(result.Duration/3600000) + ":" + util.AddZero(result.Duration%3600000/60000) + ":" + util.AddZero(result.Duration%60000/1000)



+ 5
- 0
routers/repo/modelarts.go View File

@@ -2,6 +2,7 @@ package repo

import (
"archive/zip"
"code.gitea.io/gitea/modules/timeutil"
"encoding/json"
"errors"
"io"
@@ -408,6 +409,10 @@ func NotebookManage(ctx *context.Context) {
}

task.Status = res.Status
if task.Status == string(models.ModelArtsStopped) {
task.EndTime = timeutil.TimeStampNow()
task.Duration = task.ComputeDuration()
}
err = models.UpdateJob(task)
if err != nil {
log.Error("UpdateJob(%s) failed:%v", task.JobName, err.Error(), ctx.Data["MsgID"])


Loading…
Cancel
Save