diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index 4d0e7cfaa..8e9329ce2 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -36,6 +36,16 @@ type CloudbrainStatistic struct { UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated" json:"-"` } +type TimeCloudbrainNum struct { + Time time.Time `json:"time"` + DebugOneCount int64 `json:"debugOneCount"` + BenchmarkOneCount int64 `json:"benchmarkOneCount"` + TrainOneCount int64 `json:"trainOneCount"` + DebugTwoCount int64 `json:"debugTwoCount"` + TrainTwoCount int64 `json:"trainTwoCount"` + InferenceTwoCount int64 `json:"inferenceTwoCount"` +} + func GenerateDebugOneCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index fded809f4..c03ffbe02 100755 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -559,6 +559,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/cloudbrainboard", func() { m.Get("/downloadtable", repo.ServeCloudbrainPeriodStatisticsFile) m.Group("/cloudbrain", func() { + m.Get("/trend", repo.GetAllCloudbrainsTrend) m.Get("", repo.GetAllCloudbrainsPeriodStatistics) }) }, operationReq) diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 358aa6c37..609783bfb 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -1,8 +1,10 @@ package repo import ( + "fmt" "net/http" "net/url" + "time" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" @@ -13,10 +15,52 @@ import ( type CloudbrainsPeriodData struct { DebugOneCount int64 `json:"debugOneCount"` BenchmarkOneCount int64 `json:"benchmarkOneCount"` + TrainOneCount int64 `json:"trainOneCount"` DebugTwoCount int64 `json:"debugTwoCount"` TrainTwoCount int64 `json:"trainTwoCount"` InferenceTwoCount int64 `json:"inferenceTwoCount"` } +type TimeCloudbrainsNum struct { + TimeCloudbrainNum []models.TimeCloudbrainNum `json:"imeCloudbrainNum"` +} + +func GetAllCloudbrainsTrend(ctx *context.Context) { + + recordBeginTime, err := getRecordBeginTime() + if err != nil { + log.Error("Can not get record begin time", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) + return + } + timeCloudbrainNum, beginTime, endTime, err := getCloudbrainTrendTime(ctx, recordBeginTime) + if err != nil { + log.Error("Parameter is wrong", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.parameter_is_wrong")) + return + } + page := ctx.QueryInt("page") + if page <= 0 { + page = 1 + } + pageSize := ctx.QueryInt("pagesize") + if pageSize <= 0 { + pageSize = DEFAULT_PAGE_SIZE + } + + cloudbrainsPeriodData := TimeCloudbrainsNum{ + TimeCloudbrainNum: timeCloudbrainNum, + } + now := time.Now() + endTime = now + beginTime = time.Date(endTime.Year(), endTime.Month(), 2, 0, 0, 0, 0, now.Location()) + testtime := now.AddDate(0, -1, 1) + fmt.Printf("beginTime is: %s", beginTime) + fmt.Printf("endTime is: %s", endTime) + fmt.Printf("testtime is:%s", testtime) + + ctx.JSON(http.StatusOK, cloudbrainsPeriodData) + +} func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { @@ -53,6 +97,12 @@ func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { ctx.Error(http.StatusBadRequest, ctx.Tr("benchmarkOneCount_get_error")) return } + trainOneCount, err := models.GenerateTrainOneCount(beginTime, endTime) + if err != nil { + log.Error("Can not query trainOneCount.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("trainOneCount_get_error")) + return + } debugTwoCount, err := models.GenerateDebugTwoCount(beginTime, endTime) if err != nil { log.Error("Can not query debugTwoCount.", err) @@ -75,10 +125,18 @@ func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { cloudbrainsPeriodData := CloudbrainsPeriodData{ DebugOneCount: debugOneCount, BenchmarkOneCount: benchmarkOneCount, + TrainOneCount: trainOneCount, DebugTwoCount: debugTwoCount, TrainTwoCount: trainTwoCount, InferenceTwoCount: inferenceTwoCount, } + now := time.Now() + endTime = now + beginTime = time.Date(endTime.Year(), endTime.Month(), 2, 0, 0, 0, 0, now.Location()) + testtime := now.AddDate(0, -1, 1) + fmt.Printf("beginTime is: %s", beginTime) + fmt.Printf("endTime is: %s", endTime) + fmt.Printf("testtime is:%s", testtime) ctx.JSON(http.StatusOK, cloudbrainsPeriodData) @@ -91,7 +149,7 @@ func ServeCloudbrainPeriodStatisticsFile(ctx *context.Context) { ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) return } - beginTime, endTime, err := getTimePeroid(ctx, recordBeginTime) + beginTime, endTime, err := getCloudbrainTimePeroid(ctx, recordBeginTime) if err != nil { log.Error("Parameter is wrong", err) ctx.Error(http.StatusBadRequest, ctx.Tr("repo.parameter_is_wrong")) @@ -155,3 +213,215 @@ func ServeCloudbrainPeriodStatisticsFile(ctx *context.Context) { f.WriteTo(ctx.Resp) } + +func getCloudbrainTimePeroid(ctx *context.Context, recordBeginTime time.Time) (time.Time, time.Time, error) { + queryType := ctx.QueryTrim("type") + now := time.Now() + recordBeginTimeTemp := recordBeginTime.AddDate(0, 0, 1) + + beginTimeStr := ctx.QueryTrim("beginTime") + endTimeStr := ctx.QueryTrim("endTime") + var beginTime time.Time + var endTime time.Time + var err error + if queryType != "" { + + if queryType == "all" { + beginTime = recordBeginTimeTemp + endTime = now + } else if queryType == "yesterday" { + endTime = now + beginTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location()) + + } else if queryType == "current_week" { + beginTime = now.AddDate(0, 0, -int(time.Now().Weekday())+2) //begin from monday + beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) + endTime = now + } else if queryType == "current_month" { + endTime = now + beginTime = time.Date(endTime.Year(), endTime.Month(), 2, 0, 0, 0, 0, now.Location()) + } else if queryType == "monthly" { + endTime = now + beginTime = now.AddDate(0, -1, 1) + beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) + + } else if queryType == "current_year" { + endTime = now + beginTime = time.Date(endTime.Year(), 1, 2, 0, 0, 0, 0, now.Location()) + + } else if queryType == "last_month" { + + lastMonthTime := now.AddDate(0, -1, 0) + beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 2, 0, 0, 0, 0, now.Location()) + endTime = time.Date(now.Year(), now.Month(), 2, 0, 0, 0, 0, now.Location()) + + } else { + return now, now, fmt.Errorf("The value of type parameter is wrong.") + + } + + } else { + if beginTimeStr == "" || endTimeStr == "" { + //如果查询类型和开始时间结束时间都未设置,按queryType=all处理 + beginTime = recordBeginTimeTemp + endTime = now + + } else { + + beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local) + if err != nil { + return now, now, err + } + + endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local) + if err != nil { + return now, now, err + } + + beginTime = beginTime.AddDate(0, 0, 1) + endTime = endTime.AddDate(0, 0, 1) + } + + } + + if beginTime.Before(recordBeginTimeTemp) { + beginTime = recordBeginTimeTemp + } + + return beginTime, endTime, nil + +} + +func getCloudbrainTrendTime(ctx *context.Context, recordBeginTime time.Time) ([]models.TimeCloudbrainNum, time.Time, time.Time, error) { + queryType := ctx.QueryTrim("type") + now := time.Now() + recordBeginTimeTemp := recordBeginTime.AddDate(0, 0, 1) + + beginTimeStr := ctx.QueryTrim("beginTime") + endTimeStr := ctx.QueryTrim("endTime") + var beginTime time.Time + var endTime time.Time + var err error + timeCloudbrainNum := make([]models.TimeCloudbrainNum, 0) + if queryType != "" { + + if queryType == "all" { + beginTime = recordBeginTimeTemp + endTime = now + } else if queryType == "yesterday" { + endTime = now + beginTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, now.Location()) + + } else if queryType == "current_week" { + beginTime = now.AddDate(0, 0, -int(time.Now().Weekday())+2) //begin from monday + beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) + endTime = now + } else if queryType == "current_month" { + endTime = now + beginTime = time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location()) + endTime1 := beginTime.AddDate(0, 0, 1) + for endTime1.Before(endTime) { + debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, err := getCloudbrainCount(beginTime, endTime1) + if err != nil { + log.Error("Can not query debugOneCount.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("debugOneCount_get_error")) + } + timeCloudbrainNum = append(timeCloudbrainNum, models.TimeCloudbrainNum{ + Time: beginTime, + DebugOneCount: debugOneCount, + BenchmarkOneCount: benchmarkOneCount, + TrainOneCount: trainOneCount, + DebugTwoCount: debugTwoCount, + TrainTwoCount: trainTwoCount, + InferenceTwoCount: inferenceTwoCount, + }) + beginTime = endTime1 + endTime1 = beginTime.AddDate(0, 0, 1) + } + return timeCloudbrainNum, beginTime, endTime, nil + + } else if queryType == "monthly" { + endTime = now + beginTime = now.AddDate(0, -1, 1) + beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) + + } else if queryType == "current_year" { + endTime = now + beginTime = time.Date(endTime.Year(), 1, 2, 0, 0, 0, 0, now.Location()) + + } else if queryType == "last_month" { + + lastMonthTime := now.AddDate(0, -1, 0) + beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 2, 0, 0, 0, 0, now.Location()) + endTime = time.Date(now.Year(), now.Month(), 2, 0, 0, 0, 0, now.Location()) + + } else { + return timeCloudbrainNum, now, now, fmt.Errorf("The value of type parameter is wrong.") + + } + + } else { + if beginTimeStr == "" || endTimeStr == "" { + //如果查询类型和开始时间结束时间都未设置,按queryType=all处理 + beginTime = recordBeginTimeTemp + endTime = now + + } else { + + beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local) + if err != nil { + return timeCloudbrainNum, now, now, err + } + + endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local) + if err != nil { + return timeCloudbrainNum, now, now, err + } + + beginTime = beginTime.AddDate(0, 0, 1) + endTime = endTime.AddDate(0, 0, 1) + } + + } + + if beginTime.Before(recordBeginTimeTemp) { + beginTime = recordBeginTimeTemp + } + + return timeCloudbrainNum, beginTime, endTime, nil + +} + +func getCloudbrainCount(beginTime time.Time, endTime time.Time) (int64, int64, int64, int64, int64, int64, error) { + debugOneCount, err := models.GenerateDebugOneCount(beginTime, endTime) + if err != nil { + log.Error("Can not query debugOneCount.", err) + return 0, 0, 0, 0, 0, 0, err + } + benchmarkOneCount, err := models.GenerateBenchmarkOneCount(beginTime, endTime) + if err != nil { + log.Error("Can not query benchmarkCount.", err) + return 0, 0, 0, 0, 0, 0, err + } + trainOneCount, err := models.GenerateTrainOneCount(beginTime, endTime) + if err != nil { + log.Error("Can not query trainOneCount.", err) + return 0, 0, 0, 0, 0, 0, err + } + debugTwoCount, err := models.GenerateDebugTwoCount(beginTime, endTime) + if err != nil { + log.Error("Can not query debugTwoCount.", err) + return 0, 0, 0, 0, 0, 0, err + } + trainTwoCount, err := models.GenerateTrainTwoCount(beginTime, endTime) + if err != nil { + log.Error("Can not query DebugOneTotal count.", err) + return 0, 0, 0, 0, 0, 0, err + } + inferenceTwoCount, err := models.GenerateInferenceTwoCount(beginTime, endTime) + if err != nil { + log.Error("Can not query inferenceTwoCount.", err) + return 0, 0, 0, 0, 0, 0, err + } + return debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, err +} diff --git a/routers/repo/cloudbrain_statistic.go b/routers/repo/cloudbrain_statistic.go index 16137ed2e..142b0c14e 100644 --- a/routers/repo/cloudbrain_statistic.go +++ b/routers/repo/cloudbrain_statistic.go @@ -10,7 +10,7 @@ import ( ) func CloudbrainStatisticAuto() { - yesterday := time.Now().AddDate(0, 0, 0).Format("2006-01-02") + yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02") CloudbrainStatisticDaily(yesterday) }