|
|
|
@@ -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 |
|
|
|
} |