|
|
|
@@ -195,7 +195,7 @@ func GetAllCloudbrainsTrend(ctx *context.Context) { |
|
|
|
|
|
|
|
func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { |
|
|
|
|
|
|
|
recordBeginTime, err := getRecordBeginTime() |
|
|
|
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")) |
|
|
|
@@ -272,83 +272,84 @@ func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { |
|
|
|
ctx.JSON(http.StatusOK, cloudbrainsPeriodData) |
|
|
|
|
|
|
|
} |
|
|
|
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 != "" { |
|
|
|
// 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) |
|
|
|
|
|
|
|
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()) |
|
|
|
// beginTimeStr := ctx.QueryTrim("beginTime") |
|
|
|
// endTimeStr := ctx.QueryTrim("endTime") |
|
|
|
// var beginTime time.Time |
|
|
|
// var endTime time.Time |
|
|
|
// var err error |
|
|
|
// if queryType != "" { |
|
|
|
|
|
|
|
} 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()) |
|
|
|
// 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_year" { |
|
|
|
endTime = now |
|
|
|
beginTime = time.Date(endTime.Year(), 1, 2, 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 == "last_month" { |
|
|
|
// } else if queryType == "current_year" { |
|
|
|
// endTime = now |
|
|
|
// beginTime = time.Date(endTime.Year(), 1, 2, 0, 0, 0, 0, now.Location()) |
|
|
|
|
|
|
|
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 if queryType == "last_month" { |
|
|
|
|
|
|
|
} else { |
|
|
|
return now, now, fmt.Errorf("The value of type parameter is wrong.") |
|
|
|
// 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 { |
|
|
|
// } else { |
|
|
|
// if beginTimeStr == "" || endTimeStr == "" { |
|
|
|
// //如果查询类型和开始时间结束时间都未设置,按queryType=all处理 |
|
|
|
// beginTime = recordBeginTimeTemp |
|
|
|
// endTime = now |
|
|
|
|
|
|
|
beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local) |
|
|
|
if err != nil { |
|
|
|
return now, now, err |
|
|
|
} |
|
|
|
// } else { |
|
|
|
|
|
|
|
endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local) |
|
|
|
if err != nil { |
|
|
|
return now, now, err |
|
|
|
} |
|
|
|
// beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local) |
|
|
|
// if err != nil { |
|
|
|
// return now, now, err |
|
|
|
// } |
|
|
|
|
|
|
|
beginTime = beginTime.AddDate(0, 0, 1) |
|
|
|
endTime = endTime.AddDate(0, 0, 1) |
|
|
|
} |
|
|
|
// 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 |
|
|
|
// if beginTime.Before(recordBeginTimeTemp) { |
|
|
|
// beginTime = recordBeginTimeTemp |
|
|
|
// } |
|
|
|
|
|
|
|
} |
|
|
|
// return beginTime, endTime, nil |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
func getCloudbrainCount(beginTime time.Time, endTime time.Time) (int64, int64, int64, int64, int64, int64, int64, int64, int64, error) { |
|
|
|
debugOneCount, err := models.GenerateDebugOneCount(beginTime, endTime) |
|
|
|
@@ -465,78 +466,78 @@ func getBrainRecordBeginTime() (time.Time, error) { |
|
|
|
return time.ParseInLocation(DATE_FORMAT, setting.BrainRecordBeginTime, time.Local) |
|
|
|
} |
|
|
|
|
|
|
|
func ServeCloudbrainPeriodStatisticsFile(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 |
|
|
|
} |
|
|
|
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")) |
|
|
|
return |
|
|
|
} |
|
|
|
q := ctx.QueryTrim("q") |
|
|
|
page := ctx.QueryInt("page") |
|
|
|
if page <= 0 { |
|
|
|
page = 1 |
|
|
|
} |
|
|
|
pageSize := 1000 |
|
|
|
orderBy := getOrderBy(ctx) |
|
|
|
|
|
|
|
_, latestDate, err := models.GetRepoStatLastUpdatedTime() |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query the last updated time.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.last_update_time_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
countSql := generateCountSql(beginTime, endTime, latestDate, q) |
|
|
|
total, err := models.CountRepoStatByRawSql(countSql) |
|
|
|
if err != nil { |
|
|
|
log.Error("Can not query total count.", err) |
|
|
|
ctx.Error(http.StatusBadRequest, ctx.Tr("repo.total_count_get_error")) |
|
|
|
return |
|
|
|
} |
|
|
|
var projectAnalysis = ctx.Tr("repo.repo_stat_inspect") |
|
|
|
fileName := getFileName(ctx, beginTime, endTime, projectAnalysis) |
|
|
|
|
|
|
|
totalPage := getTotalPage(total, pageSize) |
|
|
|
|
|
|
|
f := excelize.NewFile() |
|
|
|
|
|
|
|
index := f.NewSheet(projectAnalysis) |
|
|
|
f.DeleteSheet("Sheet1") |
|
|
|
|
|
|
|
for k, v := range allProjectsPeroidHeader(ctx) { |
|
|
|
f.SetCellValue(projectAnalysis, k, v) |
|
|
|
} |
|
|
|
|
|
|
|
var row = 2 |
|
|
|
for i := 0; i <= totalPage; i++ { |
|
|
|
|
|
|
|
pageRecords := models.GetRepoStatisticByRawSql(generateSqlByType(ctx, beginTime, endTime, latestDate, q, orderBy, i+1, pageSize)) |
|
|
|
for _, record := range pageRecords { |
|
|
|
|
|
|
|
for k, v := range allProjectsPeroidValues(row, record, ctx) { |
|
|
|
f.SetCellValue(projectAnalysis, k, v) |
|
|
|
} |
|
|
|
row++ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
f.SetActiveSheet(index) |
|
|
|
|
|
|
|
ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(fileName)) |
|
|
|
ctx.Resp.Header().Set("Content-Type", "application/octet-stream") |
|
|
|
|
|
|
|
f.WriteTo(ctx.Resp) |
|
|
|
|
|
|
|
} |
|
|
|
// func ServeCloudbrainPeriodStatisticsFile(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 |
|
|
|
// } |
|
|
|
// 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")) |
|
|
|
// return |
|
|
|
// } |
|
|
|
// q := ctx.QueryTrim("q") |
|
|
|
// page := ctx.QueryInt("page") |
|
|
|
// if page <= 0 { |
|
|
|
// page = 1 |
|
|
|
// } |
|
|
|
// pageSize := 1000 |
|
|
|
// orderBy := getOrderBy(ctx) |
|
|
|
|
|
|
|
// _, latestDate, err := models.GetRepoStatLastUpdatedTime() |
|
|
|
// if err != nil { |
|
|
|
// log.Error("Can not query the last updated time.", err) |
|
|
|
// ctx.Error(http.StatusBadRequest, ctx.Tr("repo.last_update_time_error")) |
|
|
|
// return |
|
|
|
// } |
|
|
|
|
|
|
|
// countSql := generateCountSql(beginTime, endTime, latestDate, q) |
|
|
|
// total, err := models.CountRepoStatByRawSql(countSql) |
|
|
|
// if err != nil { |
|
|
|
// log.Error("Can not query total count.", err) |
|
|
|
// ctx.Error(http.StatusBadRequest, ctx.Tr("repo.total_count_get_error")) |
|
|
|
// return |
|
|
|
// } |
|
|
|
// var projectAnalysis = ctx.Tr("repo.repo_stat_inspect") |
|
|
|
// fileName := getFileName(ctx, beginTime, endTime, projectAnalysis) |
|
|
|
|
|
|
|
// totalPage := getTotalPage(total, pageSize) |
|
|
|
|
|
|
|
// f := excelize.NewFile() |
|
|
|
|
|
|
|
// index := f.NewSheet(projectAnalysis) |
|
|
|
// f.DeleteSheet("Sheet1") |
|
|
|
|
|
|
|
// for k, v := range allProjectsPeroidHeader(ctx) { |
|
|
|
// f.SetCellValue(projectAnalysis, k, v) |
|
|
|
// } |
|
|
|
|
|
|
|
// var row = 2 |
|
|
|
// for i := 0; i <= totalPage; i++ { |
|
|
|
|
|
|
|
// pageRecords := models.GetRepoStatisticByRawSql(generateSqlByType(ctx, beginTime, endTime, latestDate, q, orderBy, i+1, pageSize)) |
|
|
|
// for _, record := range pageRecords { |
|
|
|
|
|
|
|
// for k, v := range allProjectsPeroidValues(row, record, ctx) { |
|
|
|
// f.SetCellValue(projectAnalysis, k, v) |
|
|
|
// } |
|
|
|
// row++ |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// } |
|
|
|
// f.SetActiveSheet(index) |
|
|
|
|
|
|
|
// ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(fileName)) |
|
|
|
// ctx.Resp.Header().Set("Content-Type", "application/octet-stream") |
|
|
|
|
|
|
|
// f.WriteTo(ctx.Resp) |
|
|
|
|
|
|
|
// } |
|
|
|
func DownloadCloudBrainBoard(ctx *context.Context) { |
|
|
|
|
|
|
|
page := 1 |
|
|
|
@@ -570,7 +571,7 @@ func DownloadCloudBrainBoard(ctx *context.Context) { |
|
|
|
index := f.NewSheet(cloudBrain) |
|
|
|
f.DeleteSheet("Sheet1") |
|
|
|
|
|
|
|
for k, v := range allHeader(ctx) { |
|
|
|
for k, v := range allCloudbrainHeader(ctx) { |
|
|
|
f.SetCellValue(cloudBrain, k, v) |
|
|
|
} |
|
|
|
|
|
|
|
@@ -591,7 +592,7 @@ func DownloadCloudBrainBoard(ctx *context.Context) { |
|
|
|
} |
|
|
|
for _, record := range pageRecords { |
|
|
|
|
|
|
|
for k, v := range allValues(row, record, ctx) { |
|
|
|
for k, v := range allCloudbrainValues(row, record, ctx) { |
|
|
|
f.SetCellValue(cloudBrain, k, v) |
|
|
|
} |
|
|
|
row++ |
|
|
|
@@ -612,23 +613,25 @@ func getCloudbrainFileName(baseName string) string { |
|
|
|
return baseName + "_" + time.Now().Format(EXCEL_DATE_FORMAT) + ".xlsx" |
|
|
|
|
|
|
|
} |
|
|
|
func allHeader(ctx *context.Context) map[string]string { |
|
|
|
func allCloudbrainHeader(ctx *context.Context) map[string]string { |
|
|
|
|
|
|
|
return map[string]string{"A1": ctx.Tr("repo.cloudbrain_task"), "B1": ctx.Tr("repo.cloudbrain_task_type"), "C1": ctx.Tr("repo.modelarts.status"), |
|
|
|
"D1": ctx.Tr("repo.modelarts.createtime"), "E1": ctx.Tr("repo.modelarts.train_job.dura_time"), "F1": ctx.Tr("repo.modelarts.computing_resources"), |
|
|
|
"G1": ctx.Tr("repo.cloudbrain_creator"), "H1": ctx.Tr("repo.repo_name"), "I1": ctx.Tr("repo.cloudbrain_task_name"), "J1": ctx.Tr("repo.modelarts.train_job.start_time"), |
|
|
|
"K1": ctx.Tr("repo.modelarts.train_job.end_time"), "L1": ctx.Tr("repo.modelarts.train_job.wait_time")} |
|
|
|
"D1": ctx.Tr("repo.modelarts.createtime"), "E1": ctx.Tr("repo.modelarts.train_job.wait_time"), "F1": ctx.Tr("repo.modelarts.train_job.dura_time"), |
|
|
|
"G1": ctx.Tr("repo.modelarts.train_job.start_time"), |
|
|
|
"H1": ctx.Tr("repo.modelarts.train_job.end_time"), "I1": ctx.Tr("repo.modelarts.computing_resources"), |
|
|
|
"J1": ctx.Tr("repo.cloudbrain_creator"), "K1": ctx.Tr("repo.repo_name"), "L1": ctx.Tr("repo.cloudbrain_task_name")} |
|
|
|
|
|
|
|
} |
|
|
|
func allValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[string]string { |
|
|
|
func allCloudbrainValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[string]string { |
|
|
|
return map[string]string{getCellName("A", row): rs.DisplayJobName, getCellName("B", row): rs.JobType, getCellName("C", row): rs.Status, |
|
|
|
getCellName("D", row): time.Unix(int64(rs.Cloudbrain.CreatedUnix), 0).Format(CREATE_TIME_FORMAT), getCellName("E", row): rs.TrainJobDuration, |
|
|
|
getCellName("F", row): rs.ComputeResource, getCellName("G", row): rs.Name, getCellName("H", row): getRepoPathName(rs), |
|
|
|
getCellName("I", row): rs.JobName, getCellName("J", row): getBrainStartTime(rs), |
|
|
|
getCellName("K", row): getBrainEndTime(rs), getCellName("L", row): getBrainWaitTime(rs), |
|
|
|
getCellName("D", row): time.Unix(int64(rs.Cloudbrain.CreatedUnix), 0).Format(CREATE_TIME_FORMAT), getCellName("E", row): getBrainWaitTime(rs), |
|
|
|
getCellName("F", row): rs.TrainJobDuration, getCellName("G", row): getBrainStartTime(rs), |
|
|
|
getCellName("H", row): getBrainEndTime(rs), |
|
|
|
getCellName("I", row): rs.ComputeResource, getCellName("J", row): rs.Name, getCellName("K", row): getBrainRepo(rs), |
|
|
|
getCellName("L", row): rs.JobName, |
|
|
|
} |
|
|
|
} |
|
|
|
func getRepoPathName(rs *models.CloudbrainInfo) string { |
|
|
|
func getBrainRepo(rs *models.CloudbrainInfo) string { |
|
|
|
if rs.Repo != nil { |
|
|
|
return rs.Repo.OwnerName + "/" + rs.Repo.Alias |
|
|
|
} |
|
|
|
|