diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 51e122bb6..1d78acd0d 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -463,32 +463,33 @@ type GetImagesPayload struct { type CloudbrainsOptions struct { ListOptions - RepoID int64 // include all repos if empty - UserID int64 - JobID string - SortType string - CloudbrainIDs []int64 - JobStatus []string - JobStatusNot bool - Keyword string - Type int - JobTypes []string - VersionName string - IsLatestVersion string - JobTypeNot bool - NeedRepoInfo bool - RepoIDList []int64 - BeginTime time.Time - EndTime time.Time - ComputeResource string - BeginTimeUnix int64 - EndTimeUnix int64 - AiCenter string - NeedDeleteInfo string - Cluster string - AccCardType string - AccCardsNum int - WorkServerNumber int + RepoID int64 // include all repos if empty + UserID int64 + JobID string + SortType string + CloudbrainIDs []int64 + JobStatus []string + JobStatusNot bool + Keyword string + Type int + JobTypes []string + VersionName string + IsLatestVersion string + JobTypeNot bool + NeedRepoInfo bool + RepoIDList []int64 + BeginTime time.Time + EndTime time.Time + ComputeResource string + BeginTimeUnix int64 + EndTimeUnix int64 + DateBeginTimeUnix int64 + AiCenter string + NeedDeleteInfo string + Cluster string + AccCardType string + AccCardsNum int + WorkServerNumber int } type TaskPod struct { @@ -2545,6 +2546,12 @@ func CloudbrainAllStatic(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, er builder.And(builder.Gte{"cloudbrain.created_unix": opts.BeginTimeUnix}, builder.Lte{"cloudbrain.created_unix": opts.EndTimeUnix}), ) } + if opts.DateBeginTimeUnix > 0 { + cond = cond.And(builder.Or( + builder.Gte{"cloudbrain.end_time": opts.DateBeginTimeUnix}, + builder.IsNull{"cloudbrain.end_time"}, + )) + } var count int64 var err error count, err = sess.Unscoped().Where(cond).Count(new(Cloudbrain)) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index 9006027a8..ad6877b25 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -252,6 +252,11 @@ func getRunPeriodCount(dateBeginTime string, dateEndTime string, hourBeginTime s return x.SQL(countSql).Count() } +func getRunPeriodCountTest(hourBeginTime string, hourEndTime string) (int64, error) { + countSql := " SELECT count(*) FROM " + "public.cloudbrain where start_time <" + hourEndTime + " and end_time >= " + hourBeginTime + return x.SQL(countSql).Count() +} + func GetCreateHourPeriodCount(dateBeginTime string, dateEndTime string) (map[string]interface{}, error) { //0 to 23 for each hour, dateHourMap := make(map[string]interface{}) @@ -285,6 +290,21 @@ func GetRunHourPeriodCount(dateBeginTime string, dateEndTime string) (map[string return dateHourMap, nil } +func GetRunHourPeriodCountTest(cloudbrain Cloudbrain, dateBeginTime time.Time, dateEndTime time.Time) (map[string]int64, error) { + var runHourPeriodCount = make(map[string]int64) + if dateBeginTime.Before(dateEndTime) { + var slice = []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23} + for _, hour := range slice { + hourBeginTime := dateBeginTime + hourEndTime := dateBeginTime.Unix() + int64(3600*(hour+1)) + if cloudbrain.StartTime.AsTime().Unix() < hourEndTime && cloudbrain.EndTime.AsTime().Unix() > hourBeginTime.Unix() { + runHourPeriodCount[strconv.Itoa(hour)] = runHourPeriodCount[strconv.Itoa(hour)] + 1 + } + } + } + return runHourPeriodCount, nil +} + func GetCloudbrainRunning() ([]*CloudbrainInfo, error) { sess := x.NewSession() defer sess.Close() diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 709f982a0..8c3b0aec9 100755 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -944,22 +944,65 @@ func GetCloudbrainsCreateHoursData(ctx *context.Context) { return } dataPeriodCount := make(map[string]int64) - days := (endTime.Unix() - beginTime.Unix()) / 3600 / 24 - for i := 0; i < int(days); i++ { - runHourPeriodCount, err := models.GetRunHourPeriodCount(dateBeginTime, dateEndTime) - if err != nil { - log.Error("Can not query runHourPeriodCount.", err) - ctx.Error(http.StatusBadRequest, ctx.Tr("runHourPeriodCount_get_error")) - return + // days := (endTime.Unix() - beginTime.Unix()) / 3600 / 24 + // for i := 0; i < int(days); i++ { + // runHourPeriodCount, err := models.GetRunHourPeriodCount(dateBeginTime, dateEndTime) + // if err != nil { + // log.Error("Can not query runHourPeriodCount.", err) + // ctx.Error(http.StatusBadRequest, ctx.Tr("runHourPeriodCount_get_error")) + // return + // } + // var slice = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"} + // for _, v := range slice { + // dataPeriodCount[v] = dataPeriodCount[v] + runHourPeriodCount[v] + // } + // beginTime = endTime + // endTime = endTime.AddDate(0, 0, 1) + // dateBeginTime = beginTime.Format("2006-01-02") + // dateEndTime = endTime.Format("2006-01-02") + // } + + // var runHourPeriodCount map[string]int64 + page := 1 + pagesize := 1000 + // count := pagesize + cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{ + ListOptions: models.ListOptions{ + Page: page, + PageSize: pagesize, + }, + Type: models.TypeCloudBrainAll, + DateBeginTimeUnix: beginTime.Unix(), + }) + log.Info("len(cloudbrains):", len(cloudbrains)) + if err != nil { + log.Error("Can not query cloudbrain.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("cloudbrain_get_error")) + return + } + for _, cloudbrain := range cloudbrains { + if cloudbrain.StartTime != 0 && cloudbrain.EndTime == 0 { + cloudbrain.EndTime = timeutil.TimeStamp(time.Now().Unix()) } - var slice = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"} - for _, v := range slice { - dataPeriodCount[v] = dataPeriodCount[v] + runHourPeriodCount[v] + + days := (endTime.Unix() - beginTime.Unix()) / 3600 / 24 + beginTime = endTime.AddDate(0, 0, -1) + endTime = endTime + for i := 0; i < int(days); i++ { + runHourPeriodCount, err := models.GetRunHourPeriodCountTest(cloudbrain.Cloudbrain, beginTime, endTime) + if err != nil { + log.Error("Can not query runHourPeriodCount.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("runHourPeriodCount_get_error")) + return + } + log.Info("runHourPeriodCount:", runHourPeriodCount) + var slice = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"} + for _, v := range slice { + dataPeriodCount[v] = dataPeriodCount[v] + runHourPeriodCount[v] + } + endTime = beginTime + beginTime = beginTime.AddDate(0, 0, -1) } - beginTime = endTime - endTime = endTime.AddDate(0, 0, 1) - dateBeginTime = beginTime.Format("2006-01-02") - dateEndTime = endTime.Format("2006-01-02") } ctx.JSON(http.StatusOK, map[string]interface{}{