diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 2ace1c1bf..b3cc243c2 100755 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -564,6 +564,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/overview", repo.GetAllCloudbrainsOverview) m.Get("/distribution", repo.GetAllCloudbrainsPeriodDistribution) m.Get("/trend", repo.GetAllCloudbrainsTrend) + m.Get("/trend_detail", repo.GetAllCloudbrainsTrendDetail) m.Get("/status_analysis", repo.GetCloudbrainsStatusAnalysis) m.Get("/detail_data", repo.GetCloudbrainsDetailData) m.Get("/hours_data", repo.GetCloudbrainsCreateHoursData) diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 871b4a793..47e4d115e 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -277,6 +277,87 @@ func GetAllCloudbrainsTrend(ctx *context.Context) { } +func GetAllCloudbrainsTrendDetail(ctx *context.Context) { + + recordBeginTime, err := getBrainRecordBeginTime() + if err != nil { + log.Error("Can not get record begin time", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) + return + } + beginTime, endTime, err := getTimePeroid(ctx, recordBeginTime) + if err != nil { + log.Error("Parameter is wrong", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.parameter_is_wrong")) + return + } + + cloudbrains, err := models.GetAllCloudBrain() + if err != nil { + log.Error("Getcloudbrains failed:%v", err) + return + } + cloudOneJobTypeRes := make(map[string]int) + cloudTwoJobTypeRes := make(map[string]int) + intelligentNetJobTypeRes := make(map[string]int) + cloudBrainPeriodNum := make(map[int]int) + for _, cloudbrain := range cloudbrains { + if int64(cloudbrain.Cloudbrain.CreatedUnix) >= beginTime.Unix() && int64(cloudbrain.Cloudbrain.CreatedUnix) < endTime.Unix() { + if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne { + if _, ok := cloudOneJobTypeRes[cloudbrain.JobType]; !ok { + cloudOneJobTypeRes[cloudbrain.JobType] = 1 + } else { + cloudOneJobTypeRes[cloudbrain.JobType] += 1 + } + } + if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo { + if _, ok := cloudTwoJobTypeRes[cloudbrain.JobType]; !ok { + cloudTwoJobTypeRes[cloudbrain.JobType] = 1 + } else { + cloudTwoJobTypeRes[cloudbrain.JobType] += 1 + } + } + + if _, ok := cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type]; !ok { + cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type] = 1 + } else { + cloudBrainPeriodNum[cloudbrain.Cloudbrain.Type] += 1 + } + + } + } + + jobTypeList := []string{"DEBUG", "BENCHMARK", "INFERENCE", "TRAIN", "SNN4IMAGENET", "BRAINSCORE"} + for _, v := range jobTypeList { + if _, ok := cloudOneJobTypeRes[v]; !ok { + cloudOneJobTypeRes[v] = 0 + } + if _, ok := cloudTwoJobTypeRes[v]; !ok { + cloudTwoJobTypeRes[v] = 0 + } + if _, ok := intelligentNetJobTypeRes[v]; !ok { + intelligentNetJobTypeRes[v] = 0 + } + } + cloudBrainTypeList := []int{0, 1, 2} + for _, v := range cloudBrainTypeList { + if _, ok := cloudBrainPeriodNum[v]; !ok { + cloudBrainPeriodNum[v] = 0 + } + } + // totalTasksCount := cloudBrainPeriodNum[0] + cloudBrainPeriodNum[1] + cloudBrainPeriodNum[2] + + cloudOneJobTypeRes["EVALUATION"] = cloudOneJobTypeRes["BENCHMARK"] + cloudOneJobTypeRes["SNN4IMAGENET"] + cloudOneJobTypeRes["BRAINSCORE"] + cloudTwoJobTypeRes["EVALUATION"] = cloudTwoJobTypeRes["BENCHMARK"] + cloudTwoJobTypeRes["SNN4IMAGENET"] + cloudTwoJobTypeRes["BRAINSCORE"] + intelligentNetJobTypeRes["EVALUATION"] = intelligentNetJobTypeRes["BENCHMARK"] + intelligentNetJobTypeRes["SNN4IMAGENET"] + intelligentNetJobTypeRes["BRAINSCORE"] + ctx.JSON(http.StatusOK, map[string]interface{}{ + "cloudOneJobTypeRes": cloudOneJobTypeRes, + "cloudTwoJobTypeRes": cloudTwoJobTypeRes, + "intelligentNetJobTypeRes": intelligentNetJobTypeRes, + "cloudBrainPeriodNum": cloudBrainPeriodNum, + }) +} + func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) { recordBeginTime, err := getBrainRecordBeginTime() @@ -291,54 +372,6 @@ func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) { ctx.Error(http.StatusBadRequest, ctx.Tr("repo.parameter_is_wrong")) return } - // debugOnePeriodCount, err := models.GetDebugOnePeriodCount(beginTime, endTime) - // if err != nil { - // log.Error("Can not query debugOneCount.", err) - // ctx.Error(http.StatusBadRequest, ctx.Tr("debugOneCount_get_error")) - // return - // } - // benchmarkOnePeriodCount, err := models.GetBenchmarkOnePeriodCount(beginTime, endTime) - // if err != nil { - // log.Error("Can not query benchmarkCount.", err) - // ctx.Error(http.StatusBadRequest, ctx.Tr("benchmarkOneCount_get_error")) - // return - // } - // trainOnePeriodCount, err := models.GetTrainOnePeriodCount(beginTime, endTime) - // if err != nil { - // log.Error("Can not query trainOneCount.", err) - // ctx.Error(http.StatusBadRequest, ctx.Tr("trainOneCount_get_error")) - // return - // } - // debugTwoPeriodCount, err := models.GetDebugTwoPeriodCount(beginTime, endTime) - // if err != nil { - // log.Error("Can not query debugTwoCount.", err) - // ctx.Error(http.StatusBadRequest, ctx.Tr("debugTwoCount_get_error")) - // return - // } - // trainTwoPeriodCount, err := models.GetTrainTwoPeriodCount(beginTime, endTime) - // if err != nil { - // log.Error("Can not query DebugOneTotal count.", err) - // ctx.Error(http.StatusBadRequest, ctx.Tr("total_count_get_error")) - // return - // } - // inferenceTwoPeriodCount, err := models.GetInferenceTwoPeriodCount(beginTime, endTime) - // if err != nil { - // log.Error("Can not query inferenceTwoCount.", err) - // ctx.Error(http.StatusBadRequest, ctx.Tr("inferenceTwoCount_get_error")) - // return - // } - // cloudBrainOnePeriodCount, err := models.GetCloudBrainOnePeriodCount(beginTime, endTime) - // if err != nil { - // log.Error("Can not query cloudBrainOnePeriodCount.", err) - // ctx.Error(http.StatusBadRequest, ctx.Tr("cloudBrainOnePeriodCount_get_error")) - // return - // } - // cloudBrainTwoPeriodCount, err := models.GetCloudBrainTwoPeriodCount(beginTime, endTime) - // if err != nil { - // log.Error("Can not query cloudBrainTwoPeriodCount.", err) - // ctx.Error(http.StatusBadRequest, ctx.Tr("cloudBrainTwoPeriodCount_get_error")) - // return - // } cloudbrains, err := models.GetAllCloudBrain() if err != nil { @@ -773,6 +806,13 @@ func getCloudbrainCount(beginTime time.Time, endTime time.Time) (map[string]int, } } + ComputeResourceList := []string{"CPU/GPU", "NPU"} + for _, v := range ComputeResourceList { + if _, ok := cloudBrainComputeResource[v]; !ok { + cloudBrainComputeResource[v] = 0 + } + } + jobTypeList := []string{"DEBUG", "BENCHMARK", "INFERENCE", "TRAIN", "SNN4IMAGENET", "BRAINSCORE"} cloudBrainTypeList := []int{0, 1, 2} for _, v := range jobTypeList { @@ -825,7 +865,7 @@ func getDayCloudbrainNum(beginTime time.Time, endTimeTemp time.Time, endTime tim return nil, err } dayCloudbrainNum = append(dayCloudbrainNum, DateCloudbrainNum{ - Date: beginTime.Format("2006-01-02"), + Date: beginTime.Format("2006/01/02"), CloudOneJobTypeRes: cloudOneJobTypeRes, CloudTwoJobTypeRes: cloudTwoJobTypeRes, IntelligentNetJobTypeRes: intelligentNetJobTypeRes, @@ -846,7 +886,7 @@ func getYearCloudbrainNum(beginTime time.Time, endTimeTemp time.Time, endTime ti return nil, err } yearCloudbrainNum = append(yearCloudbrainNum, DateCloudbrainNum{ - Date: beginTime.Format("2006-01"), + Date: beginTime.Format("2006/01"), CloudOneJobTypeRes: cloudOneJobTypeRes, CloudTwoJobTypeRes: cloudTwoJobTypeRes, IntelligentNetJobTypeRes: intelligentNetJobTypeRes,