package repo import ( "net/http" "net/url" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "github.com/360EntSecGroup-Skylar/excelize/v2" ) type CloudbrainsPeriodData struct { DebugOneCount int64 `json:"debugOneCount"` BenchmarkOneCount int64 `json:"benchmarkOneCount"` DebugTwoCount int64 `json:"debugTwoCount"` TrainTwoCount int64 `json:"trainTwoCount"` InferenceTwoCount int64 `json:"inferenceTwoCount"` } func GetAllCloudbrainsPeriodStatistics(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 := getTimePeroid(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 } debugOneCount, err := models.GenerateDebugOneCount(beginTime, endTime) if err != nil { log.Error("Can not query debugOneCount.", err) ctx.Error(http.StatusBadRequest, ctx.Tr("debugOneCount_get_error")) return } benchmarkOneCount, err := models.GenerateBenchmarkOneCount(beginTime, endTime) if err != nil { log.Error("Can not query benchmarkCount.", err) ctx.Error(http.StatusBadRequest, ctx.Tr("benchmarkOneCount_get_error")) return } debugTwoCount, err := models.GenerateDebugTwoCount(beginTime, endTime) if err != nil { log.Error("Can not query debugTwoCount.", err) ctx.Error(http.StatusBadRequest, ctx.Tr("debugTwoCount_get_error")) return } trainTwoCount, err := models.GenerateTrainTwoCount(beginTime, endTime) if err != nil { log.Error("Can not query DebugOneTotal count.", err) ctx.Error(http.StatusBadRequest, ctx.Tr("total_count_get_error")) return } inferenceTwoCount, err := models.GenerateInferenceTwoCount(beginTime, endTime) if err != nil { log.Error("Can not query inferenceTwoCount.", err) ctx.Error(http.StatusBadRequest, ctx.Tr("inferenceTwoCount_get_error")) return } cloudbrainsPeriodData := CloudbrainsPeriodData{ DebugOneCount: debugOneCount, BenchmarkOneCount: benchmarkOneCount, DebugTwoCount: debugTwoCount, TrainTwoCount: trainTwoCount, InferenceTwoCount: inferenceTwoCount, } ctx.JSON(http.StatusOK, cloudbrainsPeriodData) } 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 := getTimePeroid(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) }