@@ -306,6 +306,22 @@ type CreateJobResult struct { | |||
Payload map[string]interface{} `json:"payload"` | |||
} | |||
type QueueDetailResult struct { | |||
Code string `json:"code"` | |||
Msg string `json:"msg"` | |||
Payload map[string]QueueDetail `json:"payload"` | |||
} | |||
type QueueDetail struct { | |||
JobScheduleInfo JobScheduleInfo `json:"JobScheduleInfo"` | |||
} | |||
type JobScheduleInfo struct { | |||
Pending int `json:"Pending"` | |||
Running int `json:"Running"` | |||
MedianPendingJobDurationSec int `json:"MedianPendingJobDurationSec"` | |||
} | |||
type GetJobResult struct { | |||
Code string `json:"code"` | |||
Msg string `json:"msg"` | |||
@@ -1743,7 +1759,10 @@ func GetBenchmarkCountByUserID(userID int64) (int, error) { | |||
} | |||
func GetWaitingCloudbrainCount(cloudbrainType int, computeResource string, jobTypes ...JobType) (int64, error) { | |||
sess := x.In("JobType", jobTypes).And("status=? and type=?", JobWaiting, cloudbrainType) | |||
sess := x.Where("status=? and type=?", JobWaiting, cloudbrainType) | |||
if len(jobTypes) >= 0 { | |||
sess.In("JobType", jobTypes) | |||
} | |||
if computeResource != "" { | |||
sess.And("compute_resource=?", computeResource) | |||
} | |||
@@ -30,6 +30,7 @@ const ( | |||
LogPageSize = 500 | |||
LogPageTokenExpired = "5m" | |||
pageSize = 15 | |||
QueuesDetailUrl = "/rest-server/api/v2/queuesdetail" | |||
) | |||
func getRestyClient() *resty.Client { | |||
@@ -73,6 +74,36 @@ func loginCloudbrain() error { | |||
return nil | |||
} | |||
func GetQueuesDetail() (*map[string]int, error) { | |||
checkSetting() | |||
client := getRestyClient() | |||
var jobResult models.QueueDetailResult | |||
var result = make(map[string]int, 0) | |||
res, err := client.R(). | |||
SetHeader("Content-Type", "application/json"). | |||
SetAuthToken(TOKEN). | |||
SetResult(&jobResult). | |||
Get(HOST + QueuesDetailUrl) | |||
if err != nil { | |||
return nil, fmt.Errorf("resty get queues detail failed: %s", err) | |||
} | |||
if jobResult.Code != Success { | |||
return nil, fmt.Errorf("jobResult err: %s", res.String()) | |||
} | |||
for k, v := range jobResult.Payload { | |||
result[k] = v.JobScheduleInfo.Pending | |||
} | |||
return &result, nil | |||
} | |||
func CreateJob(jobName string, createJobParams models.CreateJobParams) (*models.CreateJobResult, error) { | |||
checkSetting() | |||
client := getRestyClient() | |||
@@ -145,16 +176,6 @@ sendjob: | |||
return &getJobResult, nil | |||
} | |||
func GetImages() (*models.GetImagesResult, error) { | |||
return GetImagesPageable(1, 100, Custom, "") | |||
} | |||
func GetPublicImages() (*models.GetImagesResult, error) { | |||
return GetImagesPageable(1, 100, Public, "") | |||
} | |||
func GetImagesPageable(page int, size int, imageType string, name string) (*models.GetImagesResult, error) { | |||
checkSetting() | |||
client := getRestyClient() | |||
@@ -112,7 +112,10 @@ func cloudBrainNewDataPrepare(ctx *context.Context) error { | |||
ctx.Data["benchmark_categories"] = categories.Category | |||
ctx.Data["benchmark_types"] = GetBenchmarkTypes(ctx).BenchmarkType | |||
queuesDetail, _ := cloudbrain.GetQueuesDetail() | |||
if queuesDetail != nil { | |||
ctx.Data["QueuesDetail"] = queuesDetail | |||
} | |||
if gpuInfos == nil { | |||
json.Unmarshal([]byte(setting.GpuTypes), &gpuInfos) | |||
} | |||
@@ -164,8 +167,6 @@ func CloudBrainNew(ctx *context.Context) { | |||
ctx.ServerError("get new cloudbrain info failed", err) | |||
return | |||
} | |||
waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeDebug) | |||
ctx.Data["WaitCount"] = waitCount | |||
ctx.HTML(200, tplCloudBrainNew) | |||
} | |||
@@ -1922,8 +1923,6 @@ func CloudBrainBenchmarkNew(ctx *context.Context) { | |||
ctx.ServerError("get new cloudbrain info failed", err) | |||
return | |||
} | |||
waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeBrainScore, models.JobTypeSnn4imagenet, models.JobTypeBenchmark) | |||
ctx.Data["WaitCount"] = waitCount | |||
ctx.HTML(200, tplCloudBrainBenchmarkNew) | |||
} | |||
@@ -2367,8 +2366,6 @@ func CloudBrainTrainJobNew(ctx *context.Context) { | |||
ctx.ServerError("get new train-job info failed", err) | |||
return | |||
} | |||
waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeTrain) | |||
ctx.Data["WaitCount"] = waitCount | |||
ctx.HTML(http.StatusOK, tplCloudBrainTrainJobNew) | |||
} | |||
@@ -2378,8 +2375,6 @@ func InferenceCloudBrainJobNew(ctx *context.Context) { | |||
ctx.ServerError("get new train-job info failed", err) | |||
return | |||
} | |||
waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeInference) | |||
ctx.Data["WaitCount"] = waitCount | |||
ctx.HTML(http.StatusOK, tplCloudBrainInferenceJobNew) | |||
} | |||