From 17718c507fc3234609040ccf921fb17486727c40 Mon Sep 17 00:00:00 2001 From: liuzx Date: Tue, 22 Mar 2022 17:50:50 +0800 Subject: [PATCH 001/239] update --- models/cloudbrain_static.go | 5 + routers/api/v1/api.go | 15 +++ routers/api/v1/repo/cloudbrain_dashboard.go | 119 ++++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 models/cloudbrain_static.go create mode 100644 routers/api/v1/repo/cloudbrain_dashboard.go diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go new file mode 100644 index 000000000..9898ebf92 --- /dev/null +++ b/models/cloudbrain_static.go @@ -0,0 +1,5 @@ +package models + +func CountBrainStatByRawSql(sql string) (int64, error) { + return xStatistic.SQL(sql).Count() +} diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 306854af3..6118db265 100755 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -554,6 +554,21 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/query_user_last_month", operationReq, repo_ext.QueryUserStaticLastMonth) m.Get("/query_user_yesterday", operationReq, repo_ext.QueryUserStaticYesterday) m.Get("/query_user_all", operationReq, repo_ext.QueryUserStaticAll) + //cloudbrain board + m.Group("/cloudbrainboard", func() { + m.Get("/restoreFork", repo.RestoreForkNumber) + m.Get("/downloadAll", repo.ServeAllProjectsPeriodStatisticsFile) + m.Get("/downloadAllOpenI", repo.ServeAllProjectsOpenIStatisticsFile) + m.Group("/cloudbrain", func() { + m.Get("", repo.GetAllCloudbrainsPeriodStatistics) + m.Group("/:id", func() { + m.Get("", repo.GetProjectLatestStatistics) + m.Get("/period", repo.GetProjectPeriodStatistics) + + }) + }) + }, operationReq) + // Users m.Group("/users", func() { m.Get("/search", user.Search) diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go new file mode 100644 index 000000000..d39f5c373 --- /dev/null +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -0,0 +1,119 @@ +package repo + +import ( + "net/http" + "strconv" + "time" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/log" +) + +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 + } + q := ctx.QueryTrim("q") + page := ctx.QueryInt("page") + if page <= 0 { + page = 1 + } + pageSize := ctx.QueryInt("pagesize") + if pageSize <= 0 { + pageSize = DEFAULT_PAGE_SIZE + } + orderBy := getOrderBy(ctx) + + latestUpdatedTime, 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 + } + + DebugOneCountSql := generateDebugOneCountSql(beginTime, endTime) + DebugOneTotal, err := models.CountBrainStatByRawSql(beginTime, endTime) + if err != nil { + log.Error("Can not query total count.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.total_count_get_error")) + return + } + DebugTwoCountSql := generateDebugTwoCountSql(beginTime, endTime) + DebugOneTotal, err := models.CountBrainStatByRawSql(DebugTwoCountSql) + if err != nil { + log.Error("Can not query total count.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.total_count_get_error")) + return + } + + sql := generateSqlByType(ctx, beginTime, endTime, latestDate, q, orderBy, page, pageSize) + + projectsPeriodData := ProjectsPeriodData{ + RecordBeginTime: recordBeginTime.Format(DATE_FORMAT), + PageSize: pageSize, + TotalPage: getTotalPage(DebugOneTotal, pageSize), + TotalCount: DebugOneTotal, + LastUpdatedTime: latestUpdatedTime, + PageRecords: models.GetRepoStatisticByRawSql(sql), + } + + ctx.JSON(http.StatusOK, projectsPeriodData) + +} + +func generateDebugOneCountSql(beginTime time.Time, endTime time.Time) string { + countSql := "SELECT count(*) FROM " + + "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "DEBUG" + + " and type=" + "0" + + " group by job_id) " + return countSql +} +func generateBenchmarkOneCountSql(beginTime time.Time, endTime time.Time) string { + countSql := "SELECT count(*) FROM " + + "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "BENCHMARK" + + " and type=" + "0" + + " group by job_id) " + return countSql +} +func generateDebugTwoCountSql(beginTime time.Time, endTime time.Time) string { + countSql := "SELECT count(*) FROM " + + "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "DEBUG" + + " and type=" + "2" + + " group by job_id) " + return countSql +} +func generateTrainTwoCountSql(beginTime time.Time, endTime time.Time) string { + countSql := "SELECT count(*) FROM " + + "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "TRAIN" + + " and type=" + "1" + + " group by job_id) " + return countSql +} +func generateInferenceTwoCountSql(beginTime time.Time, endTime time.Time) string { + countSql := "SELECT count(*) FROM " + + "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "INFERENCE" + + " and type=" + "1" + + " group by job_id) " + return countSql +} From 851262f18a4a516cfdc54a5ed65395203934badd Mon Sep 17 00:00:00 2001 From: liuzx Date: Wed, 23 Mar 2022 11:12:06 +0800 Subject: [PATCH 002/239] update --- models/cloudbrain_static.go | 47 ++++++++- routers/api/v1/repo/cloudbrain_dashboard.go | 108 +++++++------------- 2 files changed, 81 insertions(+), 74 deletions(-) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index 9898ebf92..f388caae7 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -1,5 +1,48 @@ package models -func CountBrainStatByRawSql(sql string) (int64, error) { - return xStatistic.SQL(sql).Count() +import ( + "strconv" + "time" +) + +func GenerateDebugOneCount(beginTime time.Time, endTime time.Time) (int64, error) { + countSql := "SELECT count(*) FROM " + + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "DEBUG" + + return xStatistic.SQL(countSql).Count() +} + +func GenerateBenchmarkOneCount(beginTime time.Time, endTime time.Time) (int64, error) { + countSql := "SELECT count(*) FROM " + + "SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "BENCHMARK" + + " and type=" + "0" + return xStatistic.SQL(countSql).Count() +} +func GenerateDebugTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { + countSql := "SELECT count(*) FROM " + + "SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "DEBUG" + + " and type=" + "2" + return xStatistic.SQL(countSql).Count() +} +func GenerateTrainTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { + countSql := "SELECT count(*) FROM " + + "SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "TRAIN" + + " and type=" + "1" + return xStatistic.SQL(countSql).Count() +} +func GenerateInferenceTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { + countSql := "SELECT count(*) FROM " + + "SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type=" + "INFERENCE" + + " and type=" + "1" + return xStatistic.SQL(countSql).Count() } diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index d39f5c373..66df42d88 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -2,14 +2,20 @@ package repo import ( "net/http" - "strconv" - "time" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" ) +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() @@ -24,7 +30,6 @@ func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { ctx.Error(http.StatusBadRequest, ctx.Tr("repo.parameter_is_wrong")) return } - q := ctx.QueryTrim("q") page := ctx.QueryInt("page") if page <= 0 { page = 1 @@ -33,87 +38,46 @@ func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { if pageSize <= 0 { pageSize = DEFAULT_PAGE_SIZE } - orderBy := getOrderBy(ctx) - latestUpdatedTime, latestDate, err := models.GetRepoStatLastUpdatedTime() + debugOneCount, err := models.GenerateDebugOneCount(beginTime, endTime) if err != nil { - log.Error("Can not query the last updated time.", err) - ctx.Error(http.StatusBadRequest, ctx.Tr("repo.last_update_time_error")) + log.Error("Can not query debugOneCount.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("debugOneCount_get_error")) return } - - DebugOneCountSql := generateDebugOneCountSql(beginTime, endTime) - DebugOneTotal, err := models.CountBrainStatByRawSql(beginTime, endTime) + benchmarkOneCount, err := models.GenerateBenchmarkOneCount(beginTime, endTime) if err != nil { - log.Error("Can not query total count.", err) - ctx.Error(http.StatusBadRequest, ctx.Tr("repo.total_count_get_error")) + log.Error("Can not query benchmarkCount.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("benchmarkOneCount_get_error")) return } - DebugTwoCountSql := generateDebugTwoCountSql(beginTime, endTime) - DebugOneTotal, err := models.CountBrainStatByRawSql(DebugTwoCountSql) + debugTwoCount, err := models.GenerateDebugTwoCount(beginTime, endTime) if err != nil { - log.Error("Can not query total count.", err) - ctx.Error(http.StatusBadRequest, ctx.Tr("repo.total_count_get_error")) + log.Error("Can not query debugTwoCount.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("debugTwoCount_get_error")) return } - - sql := generateSqlByType(ctx, beginTime, endTime, latestDate, q, orderBy, page, pageSize) - - projectsPeriodData := ProjectsPeriodData{ - RecordBeginTime: recordBeginTime.Format(DATE_FORMAT), - PageSize: pageSize, - TotalPage: getTotalPage(DebugOneTotal, pageSize), - TotalCount: DebugOneTotal, - LastUpdatedTime: latestUpdatedTime, - PageRecords: models.GetRepoStatisticByRawSql(sql), + 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 } - ctx.JSON(http.StatusOK, projectsPeriodData) + cloudbrainsPeriodData := CloudbrainsPeriodData{ + DebugOneCount: debugOneCount, + BenchmarkOneCount: benchmarkOneCount, + DebugTwoCount: debugTwoCount, + TrainTwoCount: trainTwoCount, + InferenceTwoCount: inferenceTwoCount, + } -} + ctx.JSON(http.StatusOK, cloudbrainsPeriodData) -func generateDebugOneCountSql(beginTime time.Time, endTime time.Time) string { - countSql := "SELECT count(*) FROM " + - "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + - " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "DEBUG" + - " and type=" + "0" + - " group by job_id) " - return countSql -} -func generateBenchmarkOneCountSql(beginTime time.Time, endTime time.Time) string { - countSql := "SELECT count(*) FROM " + - "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + - " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "BENCHMARK" + - " and type=" + "0" + - " group by job_id) " - return countSql -} -func generateDebugTwoCountSql(beginTime time.Time, endTime time.Time) string { - countSql := "SELECT count(*) FROM " + - "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + - " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "DEBUG" + - " and type=" + "2" + - " group by job_id) " - return countSql -} -func generateTrainTwoCountSql(beginTime time.Time, endTime time.Time) string { - countSql := "SELECT count(*) FROM " + - "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + - " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "TRAIN" + - " and type=" + "1" + - " group by job_id) " - return countSql -} -func generateInferenceTwoCountSql(beginTime time.Time, endTime time.Time) string { - countSql := "SELECT count(*) FROM " + - "(SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + - " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "INFERENCE" + - " and type=" + "1" + - " group by job_id) " - return countSql } From 0034d1f23068e87061bdaad427f5942d553ee37d Mon Sep 17 00:00:00 2001 From: liuzx Date: Wed, 23 Mar 2022 16:55:24 +0800 Subject: [PATCH 003/239] update --- models/cloudbrain_static.go | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index f388caae7..e6bdd7848 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -9,40 +9,41 @@ func GenerateDebugOneCount(beginTime time.Time, endTime time.Time) (int64, error countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "DEBUG" + " and job_type ='" + string(JobTypeDebug) + "'" + + " and type='" + strconv.Itoa(TypeCloudBrainOne) + "'" - return xStatistic.SQL(countSql).Count() + return x.SQL(countSql).Count() } func GenerateBenchmarkOneCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + - "SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "BENCHMARK" + - " and type=" + "0" - return xStatistic.SQL(countSql).Count() + " and job_type ='" + string(JobTypeBenchmark) + "'" + + " and type='" + strconv.Itoa(TypeCloudBrainOne) + "'" + return x.SQL(countSql).Count() } func GenerateDebugTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + - "SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "DEBUG" + - " and type=" + "2" - return xStatistic.SQL(countSql).Count() + " and job_type ='" + string(JobTypeDebug) + "'" + + " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" + return x.SQL(countSql).Count() } func GenerateTrainTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + - "SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "TRAIN" + - " and type=" + "1" - return xStatistic.SQL(countSql).Count() + " and job_type ='" + string(JobTypeTrain) + "'" + + " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" + return x.SQL(countSql).Count() } func GenerateInferenceTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + - "SELECT job_id FROM cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + - " and job_type=" + "INFERENCE" + - " and type=" + "1" - return xStatistic.SQL(countSql).Count() + " and job_type ='" + string(JobTypeInference) + "'" + + " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" + return x.SQL(countSql).Count() } From 43358dee5eca837cabfd59a41496e498ec63ef7e Mon Sep 17 00:00:00 2001 From: liuzx Date: Thu, 24 Mar 2022 10:42:28 +0800 Subject: [PATCH 004/239] update --- routers/repo/repo_statistic.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/routers/repo/repo_statistic.go b/routers/repo/repo_statistic.go index 468e6fa85..8c7ea0fe5 100755 --- a/routers/repo/repo_statistic.go +++ b/routers/repo/repo_statistic.go @@ -17,6 +17,7 @@ import ( func StatisticAuto() { RepoStatisticAuto() TimingCountData() + CloudbrainStatisticAuto() } //auto daily @@ -334,3 +335,12 @@ func UpdateRepoVisits(ctx *macaron.Context, repo *models.Repository, date string } return nil } + +func CloudbrainStatisticAuto() { + yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02") + CloudbrainStatisticDaily(yesterday) +} + +func CloudbrainStatisticDaily(date string) { + return +} From 3ea149bada66466eadf721bed4ebf5dba6f180f3 Mon Sep 17 00:00:00 2001 From: liuzx Date: Fri, 25 Mar 2022 09:46:55 +0800 Subject: [PATCH 005/239] update --- models/cloudbrain_static.go | 17 +++++++++++++++++ modules/cron/tasks_basic.go | 11 +++++++++++ routers/repo/repo_statistic.go | 1 - 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index e6bdd7848..f646daf0c 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -3,8 +3,25 @@ package models import ( "strconv" "time" + + "code.gitea.io/gitea/modules/timeutil" ) +// Cloudbrain statistic info of all CloudbrainTasks +type CloudbrainStatistic struct { + ID int64 `xorm:"pk autoincr" json:"-"` + Date string `xorm:"unique(s) NOT NULL" json:"date"` + NumDubugOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numDubugOne"` + NumBenchmarkOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numBenchmarkOne"` + NumTrainOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numTrainOne"` + NumDubugTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numDubugTwo"` + NumTrainTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numTrainTwo"` + NumInferenceTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numInferenceTwo"` + + CreatedUnix timeutil.TimeStamp `xorm:"INDEX created" json:"-"` + UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated" json:"-"` +} + 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/modules/cron/tasks_basic.go b/modules/cron/tasks_basic.go index b9838e66f..011cc8dba 100755 --- a/modules/cron/tasks_basic.go +++ b/modules/cron/tasks_basic.go @@ -173,6 +173,16 @@ func registerHandleRepoAndUserStatistic() { return nil }) } +func registerHandleCloudbrainStatistic() { + RegisterTaskFatal("handle_cloudbrain_statistic", &BaseConfig{ + Enabled: true, + RunAtStart: false, + Schedule: "@daily", + }, func(ctx context.Context, _ *models.User, _ Config) error { + repo.CloudbrainStatisticAuto() + return nil + }) +} func registerHandleSummaryStatistic() { RegisterTaskFatal("handle_summary_statistic", &BaseConfig{ @@ -212,6 +222,7 @@ func initBasicTasks() { registerHandleBlockChainUnSuccessCommits() registerHandleRepoAndUserStatistic() + registerHandleCloudbrainStatistic() registerHandleSummaryStatistic() registerSyncCloudbrainStatus() diff --git a/routers/repo/repo_statistic.go b/routers/repo/repo_statistic.go index 8c7ea0fe5..b889eb951 100755 --- a/routers/repo/repo_statistic.go +++ b/routers/repo/repo_statistic.go @@ -17,7 +17,6 @@ import ( func StatisticAuto() { RepoStatisticAuto() TimingCountData() - CloudbrainStatisticAuto() } //auto daily From 6871c8c15e8b1add99775b8fc839ff22876b4ce8 Mon Sep 17 00:00:00 2001 From: liuzx Date: Mon, 28 Mar 2022 18:03:42 +0800 Subject: [PATCH 006/239] update --- models/cloudbrain_static.go | 119 +++++++++++++++++++++++++++ routers/repo/cloudbrain_statistic.go | 115 ++++++++++++++++++++++++++ routers/repo/repo_statistic.go | 9 -- 3 files changed, 234 insertions(+), 9 deletions(-) create mode 100644 routers/repo/cloudbrain_statistic.go diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index f646daf0c..1b7bef01a 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -1,9 +1,11 @@ package models import ( + "fmt" "strconv" "time" + "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/timeutil" ) @@ -11,12 +13,24 @@ import ( type CloudbrainStatistic struct { ID int64 `xorm:"pk autoincr" json:"-"` Date string `xorm:"unique(s) NOT NULL" json:"date"` + WhichHour int64 `xorm:"NOT NULL DEFAULT -1" json:"whichHour"` NumDubugOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numDubugOne"` NumBenchmarkOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numBenchmarkOne"` NumTrainOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numTrainOne"` NumDubugTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numDubugTwo"` NumTrainTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numTrainTwo"` NumInferenceTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"numInferenceTwo"` + NumCloudOneAll int64 `xorm:"NOT NULL DEFAULT 0" json:"numCloudOneAll"` + NumCloudTwoAll int64 `xorm:"NOT NULL DEFAULT 0" json:"numCloudTwoAll"` + + DurationDubugOne int64 `xorm:"NOT NULL DEFAULT 0" json:"durationDubugOne"` + DurationBenchmarkOne int64 `xorm:"NOT NULL DEFAULT 0" json:"durationBenchmarkOne"` + DurationTrainOne int64 `xorm:"NOT NULL DEFAULT 0" json:"durationTrainOne"` + DurationDebugTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"durationDebugTwo"` + DurationTrainTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"durationTrainTwo"` + DurationInferenceTwo int64 `xorm:"NOT NULL DEFAULT 0" json:"durationInferenceTwo"` + DurationCloudOneAll int64 `xorm:"NOT NULL DEFAULT 0" json:"durationCloudOneAll"` + DurationCloudTwoAll int64 `xorm:"NOT NULL DEFAULT 0" json:"durationCloudTwoAll"` CreatedUnix timeutil.TimeStamp `xorm:"INDEX created" json:"-"` UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated" json:"-"` @@ -31,6 +45,32 @@ func GenerateDebugOneCount(beginTime time.Time, endTime time.Time) (int64, error return x.SQL(countSql).Count() } +func GetDebugOneDuration(beginTime time.Time, endTime time.Time) (int64, error) { + total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeDebug, TypeCloudBrainOne).SumInt(&Cloudbrain{}, "duration") + if err != nil { + return 0, err + } + + return total, nil +} + +func GenerateTrainOneCount(beginTime time.Time, endTime time.Time) (int64, error) { + countSql := "SELECT count(*) FROM " + + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + + " and job_type ='" + string(JobTypeTrain) + "'" + + " and type='" + strconv.Itoa(TypeCloudBrainOne) + "'" + + return x.SQL(countSql).Count() +} +func GetTrainOneDuration(beginTime time.Time, endTime time.Time) (int64, error) { + total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeTrain, TypeCloudBrainOne).SumInt(&Cloudbrain{}, "duration") + if err != nil { + return 0, err + } + + return total, nil +} func GenerateBenchmarkOneCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + @@ -40,6 +80,14 @@ func GenerateBenchmarkOneCount(beginTime time.Time, endTime time.Time) (int64, e " and type='" + strconv.Itoa(TypeCloudBrainOne) + "'" return x.SQL(countSql).Count() } +func GetBenchmarkOneDuration(beginTime time.Time, endTime time.Time) (int64, error) { + total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeBenchmark, TypeCloudBrainOne).SumInt(&Cloudbrain{}, "duration") + if err != nil { + return 0, err + } + + return total, nil +} func GenerateDebugTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + @@ -48,6 +96,13 @@ func GenerateDebugTwoCount(beginTime time.Time, endTime time.Time) (int64, error " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" return x.SQL(countSql).Count() } +func GetDebugTwoDuration(beginTime time.Time, endTime time.Time) (int64, error) { + total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeDebug, TypeCloudBrainTwo).SumInt(&Cloudbrain{}, "duration") + if err != nil { + return 0, err + } + return total, nil +} func GenerateTrainTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + @@ -56,6 +111,13 @@ func GenerateTrainTwoCount(beginTime time.Time, endTime time.Time) (int64, error " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" return x.SQL(countSql).Count() } +func GetTrainTwoDuration(beginTime time.Time, endTime time.Time) (int64, error) { + total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeTrain, TypeCloudBrainTwo).SumInt(&Cloudbrain{}, "duration") + if err != nil { + return 0, err + } + return total, nil +} func GenerateInferenceTwoCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(*) FROM " + "public.cloudbrain where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + @@ -64,3 +126,60 @@ func GenerateInferenceTwoCount(beginTime time.Time, endTime time.Time) (int64, e " and type='" + strconv.Itoa(TypeCloudBrainTwo) + "'" return x.SQL(countSql).Count() } +func GetInferenceTwoDuration(beginTime time.Time, endTime time.Time) (int64, error) { + total, err := x.Where("created_unix >= ? And created_unix < ? And job_type = ? And type = ? ", strconv.FormatInt(beginTime.Unix(), 10), strconv.FormatInt(endTime.Unix(), 10), JobTypeInference, TypeCloudBrainTwo).SumInt(&Cloudbrain{}, "duration") + if err != nil { + return 0, err + } + return total, nil +} + +func DeleteCloudbrainStatisticDaily(date string) error { + sess := xStatistic.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return fmt.Errorf("Begin: %v", err) + } + + if _, err := sess.Where("date = ?", date).Delete(&CloudbrainStatistic{}); err != nil { + return fmt.Errorf("Delete: %v", err) + } + + if err := sess.Commit(); err != nil { + sess.Close() + return fmt.Errorf("Commit: %v", err) + } + + sess.Close() + return nil +} + +func GetHourStatTime(timeStr string, whichHour int64) (time.Time, time.Time) { + t, _ := time.Parse("2006-01-02", timeStr) + timeNumber := t.Unix() + beginTimeNumber := timeNumber - 8*60*60 + whichHour*60*60 + endTimeNumber := beginTimeNumber + 1*60*60 + beginTime := time.Unix(beginTimeNumber, 0) + endTime := time.Unix(endTimeNumber, 0) + log.Info("%s, %s", beginTime, endTime) + + return beginTime, endTime +} +func GetDayStatTime(timeStr string) (time.Time, time.Time) { + t, _ := time.Parse("2006-01-02", timeStr) + timeNumber := t.Unix() + beginTimeNumber := timeNumber - 8*60*60 + endTimeNumber := beginTimeNumber + 16*60*60 + beginTime := time.Unix(beginTimeNumber, 0) + endTime := time.Unix(endTimeNumber, 0) + log.Info("%s, %s", beginTime, endTime) + + return beginTime, endTime +} + +func CreateCloudbrainStatistic(cloudbrainStat *CloudbrainStatistic) (err error) { + if _, err = xStatistic.Insert(cloudbrainStat); err != nil { + return err + } + return nil +} diff --git a/routers/repo/cloudbrain_statistic.go b/routers/repo/cloudbrain_statistic.go new file mode 100644 index 000000000..926fa68c7 --- /dev/null +++ b/routers/repo/cloudbrain_statistic.go @@ -0,0 +1,115 @@ +package repo + +import ( + "time" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/services/mailer" +) + +func CloudbrainStatisticAuto() { + yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02") + CloudbrainStatisticDaily(yesterday) +} + +func CloudbrainStatisticDaily(date string) { + log.Info("%s", date) + log.Info("begin Repo Statistic") + warnEmailMessage := "云脑任务统计信息入库失败,请尽快定位。" + if err := models.DeleteCloudbrainStatisticDaily(date); err != nil { + log.Error("DeleteCloudbrainStatisticDaily failed: %v", err.Error()) + mailer.SendWarnNotifyMail(setting.Warn_Notify_Mails, warnEmailMessage) + return + } + + //0 to 23 for each hour, 25 for all 24 hours + var WhichHour [25]int64 = [25]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25} + for _, whichHour := range WhichHour { + log.Info("start statistic: %s", date) + var beginTime, endTime time.Time + beginTime, endTime = models.GetHourStatTime(date, whichHour) + if whichHour == 25 { + beginTime, endTime = models.GetDayStatTime(date) + } + numDubugOne, err := models.GenerateDebugOneCount(beginTime, endTime) + if err != nil { + log.Error("GenerateDebugOneCount failed(%s): %v", numDubugOne, err) + } + numBenchmarkOne, err := models.GenerateBenchmarkOneCount(beginTime, endTime) + if err != nil { + log.Error("GenerateBenchmarkOneCount failed(%s): %v", numBenchmarkOne, err) + } + numTrainOne, err := models.GenerateTrainOneCount(beginTime, endTime) + if err != nil { + log.Error("GenerateTrainOneCount failed(%s): %v", numTrainOne, err) + } + numDebugTwo, err := models.GenerateDebugTwoCount(beginTime, endTime) + if err != nil { + log.Error("GenerateDebugTwoCount failed(%s): %v", numDebugTwo, err) + } + numTrainTwo, err := models.GenerateTrainTwoCount(beginTime, endTime) + if err != nil { + log.Error("GenerateTrainTwoCount failed(%s): %v", numTrainTwo, err) + } + numInferenceTwo, err := models.GenerateInferenceTwoCount(beginTime, endTime) + if err != nil { + log.Error("GenerateInferenceTwoCount failed(%s): %v", numInferenceTwo, err) + } + numCloudOneAll := numDubugOne + numBenchmarkOne + numTrainOne + numCloudTwoAll := numDebugTwo + numTrainTwo + numInferenceTwo + + durationDubugOne, err := models.GetDebugOneDuration(beginTime, endTime) + if err != nil { + log.Error("GetDebugOneDuration failed(%s): %v", durationDubugOne, err) + } + durationBenchmarkOne, err := models.GetBenchmarkOneDuration(beginTime, endTime) + if err != nil { + log.Error("GetBenchmarkOneDuration failed(%s): %v", durationBenchmarkOne, err) + } + durationTrainOne, err := models.GetTrainOneDuration(beginTime, endTime) + if err != nil { + log.Error("GetTrainOneDuration failed(%s): %v", durationTrainOne, err) + } + durationDebugTwo, err := models.GetDebugTwoDuration(beginTime, endTime) + if err != nil { + log.Error("GetDebugTwoDuration failed(%s): %v", durationDebugTwo, err) + } + durationTrainTwo, err := models.GetTrainTwoDuration(beginTime, endTime) + if err != nil { + log.Error("GetTrainTwoDuration failed(%s): %v", durationTrainTwo, err) + } + durationInferenceTwo, err := models.GetInferenceTwoDuration(beginTime, endTime) + if err != nil { + log.Error("GetInferenceTwoDuration failed(%s): %v", durationInferenceTwo, err) + } + durationCloudOneAll := durationDubugOne + durationBenchmarkOne + durationTrainOne + durationCloudTwoAll := durationDebugTwo + durationTrainTwo + durationInferenceTwo + + err = models.CreateCloudbrainStatistic(&models.CloudbrainStatistic{ + Date: date, + WhichHour: whichHour, + NumDubugOne: numDubugOne, + NumBenchmarkOne: numBenchmarkOne, + NumTrainOne: numTrainOne, + NumDubugTwo: numDebugTwo, + NumTrainTwo: numTrainTwo, + NumInferenceTwo: numInferenceTwo, + NumCloudOneAll: numCloudOneAll, + NumCloudTwoAll: numCloudTwoAll, + DurationDubugOne: durationDubugOne, + DurationBenchmarkOne: durationBenchmarkOne, + DurationTrainOne: durationTrainOne, + DurationDebugTwo: durationDebugTwo, + DurationTrainTwo: durationTrainTwo, + DurationInferenceTwo: durationInferenceTwo, + DurationCloudOneAll: durationCloudOneAll, + DurationCloudTwoAll: durationCloudTwoAll, + }) + if err != nil { + log.Error("CreateCloudbrainStatistic(%s) failed:%v", date, err.Error()) + return + } + } +} diff --git a/routers/repo/repo_statistic.go b/routers/repo/repo_statistic.go index b889eb951..468e6fa85 100755 --- a/routers/repo/repo_statistic.go +++ b/routers/repo/repo_statistic.go @@ -334,12 +334,3 @@ func UpdateRepoVisits(ctx *macaron.Context, repo *models.Repository, date string } return nil } - -func CloudbrainStatisticAuto() { - yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02") - CloudbrainStatisticDaily(yesterday) -} - -func CloudbrainStatisticDaily(date string) { - return -} From 34cf97e9bb7d7e97407a12585d3928ec69f5f8b5 Mon Sep 17 00:00:00 2001 From: liuzx Date: Tue, 29 Mar 2022 09:42:48 +0800 Subject: [PATCH 007/239] update --- routers/api/v1/api.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 6118db265..89914f688 100755 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -556,16 +556,8 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/query_user_all", operationReq, repo_ext.QueryUserStaticAll) //cloudbrain board m.Group("/cloudbrainboard", func() { - m.Get("/restoreFork", repo.RestoreForkNumber) - m.Get("/downloadAll", repo.ServeAllProjectsPeriodStatisticsFile) - m.Get("/downloadAllOpenI", repo.ServeAllProjectsOpenIStatisticsFile) m.Group("/cloudbrain", func() { m.Get("", repo.GetAllCloudbrainsPeriodStatistics) - m.Group("/:id", func() { - m.Get("", repo.GetProjectLatestStatistics) - m.Get("/period", repo.GetProjectPeriodStatistics) - - }) }) }, operationReq) From 3696ce23c414dd9bfd56d82c82f74a9ee8badaa8 Mon Sep 17 00:00:00 2001 From: liuzx Date: Thu, 31 Mar 2022 10:33:25 +0800 Subject: [PATCH 008/239] update --- models/cloudbrain_static.go | 2 +- models/models.go | 1 + routers/api/v1/api.go | 1 + routers/api/v1/repo/cloudbrain_dashboard.go | 74 +++++++++++++++++++++ routers/repo/cloudbrain_statistic.go | 4 +- routers/routes/routes.go | 1 + 6 files changed, 80 insertions(+), 3 deletions(-) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index 1b7bef01a..4d0e7cfaa 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -12,7 +12,7 @@ import ( // Cloudbrain statistic info of all CloudbrainTasks type CloudbrainStatistic struct { ID int64 `xorm:"pk autoincr" json:"-"` - Date string `xorm:"unique(s) NOT NULL" json:"date"` + Date string `xorm:"NOT NULL DEFAULT 0" json:"date"` WhichHour int64 `xorm:"NOT NULL DEFAULT -1" json:"whichHour"` NumDubugOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numDubugOne"` NumBenchmarkOne int64 `xorm:"NOT NULL DEFAULT 0" json:"numBenchmarkOne"` diff --git a/models/models.go b/models/models.go index 0f4679b4f..02cfb3144 100755 --- a/models/models.go +++ b/models/models.go @@ -151,6 +151,7 @@ func init() { new(UserBusinessAnalysisCurrentWeek), new(UserBusinessAnalysisYesterday), new(UserLoginLog), + new(CloudbrainStatistic), ) gonicNames := []string{"SSL", "UID"} diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 89914f688..87af1d19b 100755 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -556,6 +556,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/query_user_all", operationReq, repo_ext.QueryUserStaticAll) //cloudbrain board m.Group("/cloudbrainboard", func() { + m.Get("/downloadtable", repo.ServeCloudbrainPeriodStatisticsFile) m.Group("/cloudbrain", func() { m.Get("", repo.GetAllCloudbrainsPeriodStatistics) }) diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 66df42d88..358aa6c37 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -2,10 +2,12 @@ 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 { @@ -81,3 +83,75 @@ func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { 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) + +} diff --git a/routers/repo/cloudbrain_statistic.go b/routers/repo/cloudbrain_statistic.go index 926fa68c7..16137ed2e 100644 --- a/routers/repo/cloudbrain_statistic.go +++ b/routers/repo/cloudbrain_statistic.go @@ -10,13 +10,13 @@ import ( ) func CloudbrainStatisticAuto() { - yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02") + yesterday := time.Now().AddDate(0, 0, 0).Format("2006-01-02") CloudbrainStatisticDaily(yesterday) } func CloudbrainStatisticDaily(date string) { log.Info("%s", date) - log.Info("begin Repo Statistic") + log.Info("begin Cloudbrain Statistic") warnEmailMessage := "云脑任务统计信息入库失败,请尽快定位。" if err := models.DeleteCloudbrainStatisticDaily(date); err != nil { log.Error("DeleteCloudbrainStatisticDaily failed: %v", err.Error()) diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 2d146c2c6..a2e969a60 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -990,6 +990,7 @@ func RegisterRoutes(m *macaron.Macaron) { }, context.RepoRef()) m.Group("/cloudbrain", func() { + m.Get("/test", repo.CloudbrainStatisticAuto) m.Group("/:id", func() { m.Get("", reqRepoCloudBrainReader, repo.CloudBrainShow) m.Get("/debug", cloudbrain.AdminOrJobCreaterRight, repo.CloudBrainDebug) From 29fdbd5d580f6cd341255332616f0a2a3bea1070 Mon Sep 17 00:00:00 2001 From: liuzx Date: Wed, 6 Apr 2022 18:15:35 +0800 Subject: [PATCH 009/239] update --- models/cloudbrain_static.go | 10 + routers/api/v1/api.go | 1 + routers/api/v1/repo/cloudbrain_dashboard.go | 272 +++++++++++++++++++- routers/repo/cloudbrain_statistic.go | 2 +- 4 files changed, 283 insertions(+), 2 deletions(-) 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) } From f7bff308e2b7ba9f43890da10f5da948faf3bc20 Mon Sep 17 00:00:00 2001 From: liuzx Date: Thu, 7 Apr 2022 17:01:30 +0800 Subject: [PATCH 010/239] update --- models/cloudbrain_static.go | 10 - modules/setting/setting.go | 26 +- routers/api/v1/repo/cloudbrain_dashboard.go | 528 ++++++++++++-------- 3 files changed, 334 insertions(+), 230 deletions(-) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index 8e9329ce2..4d0e7cfaa 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -36,16 +36,6 @@ 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/modules/setting/setting.go b/modules/setting/setting.go index 26f068193..19620f5db 100755 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -452,18 +452,19 @@ var ( DecompressOBSTaskName string //cloudbrain config - CBAuthUser string - CBAuthPassword string - RestServerHost string - JobPath string - CBCodePathPrefix string - JobType string - GpuTypes string - DebugServerHost string - ResourceSpecs string - MaxDuration int64 - TrainGpuTypes string - TrainResourceSpecs string + CBAuthUser string + CBAuthPassword string + RestServerHost string + JobPath string + CBCodePathPrefix string + JobType string + GpuTypes string + DebugServerHost string + ResourceSpecs string + MaxDuration int64 + TrainGpuTypes string + TrainResourceSpecs string + BrainRecordBeginTime string //benchmark config IsBenchmarkEnabled bool @@ -1290,6 +1291,7 @@ func NewContext() { MaxDuration = sec.Key("MAX_DURATION").MustInt64(14400) TrainGpuTypes = sec.Key("TRAIN_GPU_TYPES").MustString("") TrainResourceSpecs = sec.Key("TRAIN_RESOURCE_SPECS").MustString("") + BrainRecordBeginTime = sec.Key("brain_record_beigin_time").MustString("2021-01-01") sec = Cfg.Section("benchmark") IsBenchmarkEnabled = sec.Key("ENABLED").MustBool(false) diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 609783bfb..85bea2189 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -9,6 +9,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" "github.com/360EntSecGroup-Skylar/excelize/v2" ) @@ -21,42 +22,172 @@ type CloudbrainsPeriodData struct { InferenceTwoCount int64 `json:"inferenceTwoCount"` } type TimeCloudbrainsNum struct { - TimeCloudbrainNum []models.TimeCloudbrainNum `json:"imeCloudbrainNum"` + TimeCloudbrainNum []DateCloudbrainNum `json:"dateCloudbrainNum"` +} +type DateCloudbrainNum struct { + Date string `json:"date"` + DebugOneCount int64 `json:"debugOneCount"` + BenchmarkOneCount int64 `json:"benchmarkOneCount"` + TrainOneCount int64 `json:"trainOneCount"` + DebugTwoCount int64 `json:"debugTwoCount"` + TrainTwoCount int64 `json:"trainTwoCount"` + InferenceTwoCount int64 `json:"inferenceTwoCount"` + CloudbrainOneCount int64 `json:"cloudbrainOneCount"` + CloudbrainTwoCount int64 `json:"cloudbrainTwoCount"` + CloudbrainCount int64 `json:"cloudbrainCount"` } func GetAllCloudbrainsTrend(ctx *context.Context) { - - recordBeginTime, err := getRecordBeginTime() + brainRecordBeginTime, 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")) + log.Error("Can not get brain record begin time", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.brain_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 - } + queryType := ctx.QueryTrim("type") + now := time.Now() + + beginTimeStr := ctx.QueryTrim("beginTime") + endTimeStr := ctx.QueryTrim("endTime") + var beginTime time.Time + var endTime time.Time + var endTimeTemp time.Time + dateCloudbrainNum := make([]DateCloudbrainNum, 0) + if queryType != "" { + if queryType == "all" { + beginTime = brainRecordBeginTime + endTime = now + endTimeTemp = beginTime.AddDate(0, 1, 0) + dateCloudbrainNum, err = getYearCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getYearCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getYearCloudbrainNum_get_error")) + return + } + } else if queryType == "yesterday" { + beginTime = now.AddDate(0, 0, -1) + beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) + endTimeTemp = beginTime.Add(time.Hour) + endTime = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) + dateCloudbrainNum, err = getHourCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getHourCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getYearCloudbrainNum_get_error")) + return + } + + } else if queryType == "current_week" { + beginTime = now.AddDate(0, 0, -int(time.Now().Weekday())+1) //begin from monday + beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) + endTime = now + endTimeTemp = beginTime.AddDate(0, 0, 1) + dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getDayCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error")) + return + } + } else if queryType == "current_month" { + endTime = now + beginTime = time.Date(endTime.Year(), endTime.Month(), 1, 0, 0, 0, 0, now.Location()) + endTimeTemp = beginTime.AddDate(0, 0, 1) + dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getDayCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error")) + return + } + + } else if queryType == "monthly" { + endTime = now + beginTime = now.AddDate(0, -1, 0) + beginTime = time.Date(beginTime.Year(), beginTime.Month(), beginTime.Day(), 0, 0, 0, 0, now.Location()) + endTimeTemp = beginTime.AddDate(0, 0, 1) + dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getDayCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error")) + return + } + + } else if queryType == "current_year" { + endTime = now + beginTime = time.Date(endTime.Year(), 1, 1, 0, 0, 0, 0, now.Location()) + endTimeTemp = beginTime.AddDate(0, 1, 0) + dateCloudbrainNum, err = getYearCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getDayCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getYearCloudbrainNum_get_error")) + return + } + + } else if queryType == "last_month" { + + lastMonthTime := now.AddDate(0, -1, 0) + beginTime = time.Date(lastMonthTime.Year(), lastMonthTime.Month(), 1, 0, 0, 0, 0, now.Location()) + endTime = time.Date(now.Year(), now.Month(), 2, 0, 0, 0, 0, now.Location()) + endTimeTemp = beginTime.AddDate(0, 0, 1) + dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getDayCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error")) + return + } + + } + + } else { + if beginTimeStr == "" || endTimeStr == "" { + //如果查询类型和开始时间结束时间都未设置,按queryType=all处理 + beginTime = brainRecordBeginTime + endTime = now + endTimeTemp = beginTime.AddDate(0, 1, 0) + dateCloudbrainNum, err = getYearCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getDayCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getYearCloudbrainNum_get_error")) + return + } + } else { + beginTime, err = time.ParseInLocation("2006-01-02", beginTimeStr, time.Local) + if err != nil { + log.Error("Can not ParseInLocation.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error")) + return + } + endTime, err = time.ParseInLocation("2006-01-02", endTimeStr, time.Local) + if err != nil { + log.Error("Can not ParseInLocation.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("ParseInLocation_get_error")) + return + } + days := (endTime.Unix() - beginTime.Unix()) / 3600 / 24 + if 1 < days { + endTimeTemp = beginTime.AddDate(0, 0, 1) + endTime = endTime.AddDate(0, 0, 2) + dateCloudbrainNum, err = getDayCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getDayCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getDayCloudbrainNum_get_error")) + return + } + } else if 0 < days || days <= 1 { + endTimeTemp = beginTime.Add(time.Hour) + dateCloudbrainNum, err = getHourCloudbrainNum(beginTime, endTimeTemp, endTime) + if err != nil { + log.Error("Can not query getHourCloudbrainNum.", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("getHourCloudbrainNum_get_error")) + return + } + } else { + return + } + } + } cloudbrainsPeriodData := TimeCloudbrainsNum{ - TimeCloudbrainNum: timeCloudbrainNum, + TimeCloudbrainNum: dateCloudbrainNum, } - 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) @@ -141,79 +272,6 @@ func GetAllCloudbrainsPeriodStatistics(ctx *context.Context) { 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 := 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 getCloudbrainTimePeroid(ctx *context.Context, recordBeginTime time.Time) (time.Time, time.Time, error) { queryType := ctx.QueryTrim("type") now := time.Now() @@ -292,136 +350,190 @@ func getCloudbrainTimePeroid(ctx *context.Context, recordBeginTime time.Time) (t } -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) { +func getCloudbrainCount(beginTime time.Time, endTime time.Time) (int64, int64, int64, 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 + return 0, 0, 0, 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 + return 0, 0, 0, 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 + return 0, 0, 0, 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 + return 0, 0, 0, 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 + return 0, 0, 0, 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 0, 0, 0, 0, 0, 0, 0, 0, 0, err } - return debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, err + cloudbrainOneCount := debugOneCount + benchmarkOneCount + trainOneCount + cloudbrainTwoCount := debugTwoCount + trainTwoCount + inferenceTwoCount + cloudbrainCount := cloudbrainOneCount + cloudbrainTwoCount + return debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, cloudbrainOneCount, cloudbrainTwoCount, cloudbrainCount, err +} +func getHourCloudbrainNum(beginTime time.Time, endTimeTemp time.Time, endTime time.Time) ([]DateCloudbrainNum, error) { + dayCloudbrainNum := make([]DateCloudbrainNum, 0) + for endTimeTemp.Before(endTime) || endTimeTemp.Equal(endTime) { + debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, cloudbrainOneCount, cloudbrainTwoCount, cloudbrainCount, err := getCloudbrainCount(beginTime, endTimeTemp) + if err != nil { + log.Error("Can not query getCloudbrainCount.", err) + return nil, err + } + dayCloudbrainNum = append(dayCloudbrainNum, DateCloudbrainNum{ + Date: beginTime.Format(time.RFC3339), + DebugOneCount: debugOneCount, + BenchmarkOneCount: benchmarkOneCount, + TrainOneCount: trainOneCount, + DebugTwoCount: debugTwoCount, + TrainTwoCount: trainTwoCount, + InferenceTwoCount: inferenceTwoCount, + CloudbrainOneCount: cloudbrainOneCount, + CloudbrainTwoCount: cloudbrainTwoCount, + CloudbrainCount: cloudbrainCount, + }) + beginTime = endTimeTemp + endTimeTemp = beginTime.Add(time.Hour) + } + return dayCloudbrainNum, nil +} +func getDayCloudbrainNum(beginTime time.Time, endTimeTemp time.Time, endTime time.Time) ([]DateCloudbrainNum, error) { + dayCloudbrainNum := make([]DateCloudbrainNum, 0) + for endTimeTemp.Before(endTime) { + debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, cloudbrainOneCount, cloudbrainTwoCount, cloudbrainCount, err := getCloudbrainCount(beginTime, endTimeTemp) + if err != nil { + log.Error("Can not query getCloudbrainCount.", err) + return nil, err + } + dayCloudbrainNum = append(dayCloudbrainNum, DateCloudbrainNum{ + Date: beginTime.Format("2006-01-02"), + DebugOneCount: debugOneCount, + BenchmarkOneCount: benchmarkOneCount, + TrainOneCount: trainOneCount, + DebugTwoCount: debugTwoCount, + TrainTwoCount: trainTwoCount, + InferenceTwoCount: inferenceTwoCount, + CloudbrainOneCount: cloudbrainOneCount, + CloudbrainTwoCount: cloudbrainTwoCount, + CloudbrainCount: cloudbrainCount, + }) + beginTime = endTimeTemp + endTimeTemp = beginTime.AddDate(0, 0, 1) + } + return dayCloudbrainNum, nil +} +func getYearCloudbrainNum(beginTime time.Time, endTimeTemp time.Time, endTime time.Time) ([]DateCloudbrainNum, error) { + yearCloudbrainNum := make([]DateCloudbrainNum, 0) + for endTimeTemp.Before(endTime) { + debugOneCount, benchmarkOneCount, trainOneCount, debugTwoCount, trainTwoCount, inferenceTwoCount, cloudbrainOneCount, cloudbrainTwoCount, cloudbrainCount, err := getCloudbrainCount(beginTime, endTimeTemp) + if err != nil { + log.Error("Can not query getCloudbrainCount.", err) + return nil, err + } + yearCloudbrainNum = append(yearCloudbrainNum, DateCloudbrainNum{ + Date: beginTime.Format("2006-01"), + DebugOneCount: debugOneCount, + BenchmarkOneCount: benchmarkOneCount, + TrainOneCount: trainOneCount, + DebugTwoCount: debugTwoCount, + TrainTwoCount: trainTwoCount, + InferenceTwoCount: inferenceTwoCount, + CloudbrainOneCount: cloudbrainOneCount, + CloudbrainTwoCount: cloudbrainTwoCount, + CloudbrainCount: cloudbrainCount, + }) + beginTime = endTimeTemp + endTimeTemp = beginTime.AddDate(0, 1, 0) + } + return yearCloudbrainNum, nil +} +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) + } From 05ab115942601cc6716acb905e6f2a3ae482573c Mon Sep 17 00:00:00 2001 From: liuzx Date: Fri, 8 Apr 2022 18:25:35 +0800 Subject: [PATCH 011/239] update --- models/cloudbrain.go | 65 +- options/locale/locale_zh-CN.ini | 2 + routers/api/v1/api.go | 5 +- routers/api/v1/repo/cloudbrain_dashboard.go | 123 +++ web_src/js/components/BrainAnalysis.vue | 1008 +++++++++++++++++++ web_src/js/components/DataAnalysis.vue | 10 + 6 files changed, 1210 insertions(+), 3 deletions(-) create mode 100644 web_src/js/components/BrainAnalysis.vue diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 1662dcd96..7f7b9bcd6 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -1,13 +1,14 @@ package models import ( - "code.gitea.io/gitea/modules/util" "encoding/json" "fmt" "strconv" "strings" "time" + "code.gitea.io/gitea/modules/util" + "xorm.io/builder" "xorm.io/xorm" @@ -1564,3 +1565,65 @@ func RestartCloudbrain(old *Cloudbrain, new *Cloudbrain) (err error) { return nil } + +func CloudbrainAll(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) { + sess := x.NewSession() + defer sess.Close() + var cond = builder.NewCond() + if (opts.Type) >= 0 { + cond = cond.And( + builder.Eq{"cloudbrain.type": opts.Type}, + ) + } + + var count int64 + var err error + condition := "cloudbrain.user_id = `user`.id" + if len(opts.Keyword) == 0 { + count, err = sess.Where(cond).Count(new(Cloudbrain)) + } else { + lowerKeyWord := strings.ToLower(opts.Keyword) + + cond = cond.And(builder.Or(builder.Like{"LOWER(cloudbrain.job_name)", lowerKeyWord}, builder.Like{"LOWER(cloudbrain.display_job_name)", lowerKeyWord}, builder.Like{"`user`.lower_name", lowerKeyWord})) + count, err = sess.Table(&Cloudbrain{}).Where(cond). + Join("left", "`user`", condition).Count(new(CloudbrainInfo)) + + } + + if err != nil { + return nil, 0, fmt.Errorf("Count: %v", err) + } + + if opts.Page >= 0 && opts.PageSize > 0 { + var start int + if opts.Page == 0 { + start = 0 + } else { + start = (opts.Page - 1) * opts.PageSize + } + sess.Limit(opts.PageSize, start) + } + + sess.OrderBy("cloudbrain.created_unix DESC") + cloudbrains := make([]*CloudbrainInfo, 0, setting.UI.IssuePagingNum) + if err := sess.Table(&Cloudbrain{}).Unscoped().Where(cond). + Join("left", "`user`", condition). + Find(&cloudbrains); err != nil { + return nil, 0, fmt.Errorf("Find: %v", err) + } + if opts.NeedRepoInfo { + var ids []int64 + for _, task := range cloudbrains { + ids = append(ids, task.RepoID) + } + repositoryMap, err := GetRepositoriesMapByIDs(ids) + if err == nil { + for _, task := range cloudbrains { + task.Repo = repositoryMap[task.RepoID] + } + } + + } + + return cloudbrains, count, nil +} diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index d26065363..06ea4bd7f 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -1005,6 +1005,8 @@ modelarts.train_job.job_status=任务状态 modelarts.train_job.job_name=任务名称 modelarts.train_job.version=任务版本 modelarts.train_job.start_time=开始时间 +modelarts.train_job.end_time=结束时间 +modelarts.train_job.wait_time=等待时间 modelarts.train_job.dura_time=运行时长 modelarts.train_job.description=任务描述 modelarts.train_job.parameter_setting=参数设置 diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index c03ffbe02..14bd2e2d1 100755 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -557,10 +557,11 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/query_user_all", operationReq, repo_ext.QueryUserStaticAll) //cloudbrain board m.Group("/cloudbrainboard", func() { - m.Get("/downloadtable", repo.ServeCloudbrainPeriodStatisticsFile) + m.Get("/downloadStatistics", repo.ServeCloudbrainPeriodStatisticsFile) + m.Get("/downloadAll", repo.DownloadCloudBrainBoard) m.Group("/cloudbrain", func() { m.Get("/trend", repo.GetAllCloudbrainsTrend) - m.Get("", repo.GetAllCloudbrainsPeriodStatistics) + m.Get("/statistics", repo.GetAllCloudbrainsPeriodStatistics) }) }, operationReq) diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 85bea2189..ab26d7dfc 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -537,3 +537,126 @@ func ServeCloudbrainPeriodStatisticsFile(ctx *context.Context) { f.WriteTo(ctx.Resp) } +func DownloadCloudBrainBoard(ctx *context.Context) { + + page := 1 + + pageSize := 300 + + var cloudBrain = ctx.Tr("repo.cloudbrain") + fileName := getCloudbrainFileName(cloudBrain) + + _, total, err := models.CloudbrainAll(&models.CloudbrainsOptions{ + ListOptions: models.ListOptions{ + Page: page, + PageSize: 1, + }, + Type: models.TypeCloudBrainAll, + NeedRepoInfo: false, + }) + + if err != nil { + log.Warn("Can not get cloud brain info", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.cloudbrain_query_fail")) + return + } + + totalPage := getTotalPage(total, pageSize) + fmt.Printf("total:%v", total) + fmt.Printf("totalPage:%v", totalPage) + + f := excelize.NewFile() + + index := f.NewSheet(cloudBrain) + f.DeleteSheet("Sheet1") + + for k, v := range allHeader(ctx) { + f.SetCellValue(cloudBrain, k, v) + } + + var row = 2 + for i := 0; i < totalPage; i++ { + + pageRecords, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{ + ListOptions: models.ListOptions{ + Page: page, + PageSize: pageSize, + }, + Type: models.TypeCloudBrainAll, + NeedRepoInfo: true, + }) + if err != nil { + log.Warn("Can not get cloud brain info", err) + continue + } + for _, record := range pageRecords { + + for k, v := range allValues(row, record, ctx) { + f.SetCellValue(cloudBrain, k, v) + } + row++ + + } + + page++ + } + 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 getCloudbrainFileName(baseName string) string { + return baseName + "_" + time.Now().Format(EXCEL_DATE_FORMAT) + ".xlsx" + +} +func allHeader(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")} + +} +func allValues(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), + } +} +func getRepoPathName(rs *models.CloudbrainInfo) string { + if rs.Repo != nil { + return rs.Repo.OwnerName + "/" + rs.Repo.Alias + } + return "" +} +func getBrainStartTime(rs *models.CloudbrainInfo) string { + timeString := time.Unix(int64(rs.Cloudbrain.StartTime), 0).Format(CREATE_TIME_FORMAT) + if timeString != "1970/01/01 08:00:00" { + return timeString + } else { + return "0" + } + +} +func getBrainEndTime(rs *models.CloudbrainInfo) string { + timeString := time.Unix(int64(rs.Cloudbrain.EndTime), 0).Format(CREATE_TIME_FORMAT) + if timeString != "1970/01/01 08:00:00" { + return timeString + } else { + return "0" + } + +} +func getBrainWaitTime(rs *models.CloudbrainInfo) string { + waitTime := rs.Cloudbrain.StartTime - rs.Cloudbrain.CreatedUnix + if waitTime <= 0 { + return "0" + } else { + return models.ConvertDurationToStr(int64(waitTime)) + } +} diff --git a/web_src/js/components/BrainAnalysis.vue b/web_src/js/components/BrainAnalysis.vue new file mode 100644 index 000000000..4f096e024 --- /dev/null +++ b/web_src/js/components/BrainAnalysis.vue @@ -0,0 +1,1008 @@ + + + + + diff --git a/web_src/js/components/DataAnalysis.vue b/web_src/js/components/DataAnalysis.vue index ae536db28..6f80c3481 100755 --- a/web_src/js/components/DataAnalysis.vue +++ b/web_src/js/components/DataAnalysis.vue @@ -26,6 +26,14 @@ + + + + + + 云脑分析 + + @@ -33,12 +41,14 @@ -{{end}} -{{if .PageIsHome}} - {{end}} {{template "custom/footer" .}} +{{if .PageIsHome}} + + + + + + +{{end}} diff --git a/templates/base/head_home.tmpl b/templates/base/head_home.tmpl index 25d7a92ec..2def358f8 100644 --- a/templates/base/head_home.tmpl +++ b/templates/base/head_home.tmpl @@ -192,6 +192,8 @@ var _hmt = _hmt || []; + + {{template "custom/body_outer_pre" .}} diff --git a/templates/home.tmpl b/templates/home.tmpl index 5edd65ceb..9e8e6acf4 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -1,7 +1,59 @@ {{template "base/head_home" .}}
-
+
+ +
+

完成AI任务
1716

+

运行AI任务
120

+

等待AI任务
80

+
+ +
+ +
+ + +
+
+
+
+
+ +

{{item.name}}

+
+
+
+
+
+
+
+ + + + +
+
调试任务 #31412022050816002
+
+
+ + + +
+
+
+ + + + +
+
+
+
+
+
+
+

{{.page_title}}
@@ -16,7 +68,7 @@ {{.page_use}} {{end}}
-
+

* {{.page_only_dynamic}}

From b38e1b048cc447f17741613d897dc101097b8987 Mon Sep 17 00:00:00 2001 From: OpenIhu Date: Mon, 23 May 2022 11:46:22 +0800 Subject: [PATCH 033/239] =?UTF-8?q?=E9=9A=90=E8=97=8F=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/home.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/home.tmpl b/templates/home.tmpl index 9e8e6acf4..401cf02e3 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -20,7 +20,7 @@
-

{{item.name}}

+
From 37b139ffb1140edae546a96d64104eb374707999 Mon Sep 17 00:00:00 2001 From: OpenIhu Date: Mon, 23 May 2022 11:52:14 +0800 Subject: [PATCH 034/239] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=BC=80=E6=BA=90=E5=8A=A8=E6=80=81=E5=AE=BD=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/home.tmpl | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/templates/home.tmpl b/templates/home.tmpl index 401cf02e3..cf27a682e 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -69,15 +69,11 @@ {{end}}

-
+

* {{.page_only_dynamic}}

-
-
-
-
- -
-
+
+
+
From dfba0588313d81f2a9d4c9206e3878571231077a Mon Sep 17 00:00:00 2001 From: OpenIhu Date: Mon, 23 May 2022 11:56:49 +0800 Subject: [PATCH 035/239] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dhomenews?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/home.tmpl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/templates/home.tmpl b/templates/home.tmpl index cf27a682e..2d2fcf3e2 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -71,9 +71,11 @@

* {{.page_only_dynamic}}

-
-
- +
+
+
+ +
From 5cde254ce07f3210a0c825be77faea3733b7b9a8 Mon Sep 17 00:00:00 2001 From: OpenIhu Date: Mon, 23 May 2022 12:02:14 +0800 Subject: [PATCH 036/239] =?UTF-8?q?=E8=B0=83=E6=95=B4h1=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=AE=BD=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/home.tmpl | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/templates/home.tmpl b/templates/home.tmpl index 2d2fcf3e2..5a602dab7 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -54,19 +54,23 @@
-

- {{.page_title}} -
- {{.page_small_title}} +
+
+

+ {{.page_title}} +
+ {{.page_small_title}} +
+

+

{{.page_description}}

+ + {{if .IsSigned}} + {{.page_use}} + {{else}} + {{.page_use}} + {{end}}
-

-

{{.page_description}}

- - {{if .IsSigned}} - {{.page_use}} - {{else}} - {{.page_use}} - {{end}} +
From 3f319dc9f1bf2e0b6755c9bdbfad60130116c9e1 Mon Sep 17 00:00:00 2001 From: OpenIhu Date: Mon, 23 May 2022 15:18:01 +0800 Subject: [PATCH 037/239] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- custom/public/css/git.openi.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/custom/public/css/git.openi.css b/custom/public/css/git.openi.css index 10f68d625..d50b7e2cd 100644 --- a/custom/public/css/git.openi.css +++ b/custom/public/css/git.openi.css @@ -152,10 +152,10 @@ margin-left: 2.3em; } .homenews{ - border-radius: 2em; + border-radius: 1.2em; background-color: rgba(16, 16, 16, .9); position: relative; - padding-left: 1.5em !important; + padding-left: 1.3em !important; } .homeorg, .homepro, .homemodel, .i-env{ position: relative; @@ -186,7 +186,7 @@ padding: 0; } .newslist{ - height: 285px; + height: 260px; overflow: hidden; } From f3d2a2ebff10a483d19e26bd7659639c23325a1b Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 23 May 2022 15:26:16 +0800 Subject: [PATCH 038/239] fix issue --- routers/routes/routes.go | 2 + routers/user/auth.go | 105 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 701df7147..e7ee14a36 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -328,6 +328,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Post("/all/search/", routers.Search) m.Get("/all/search/", routers.EmptySearch) m.Get("/all/dosearch/", routers.SearchApi) + m.Post("/user/login/kanban", user.SignInPostAPI) m.Get("/home/term", routers.HomeTerm) m.Group("/explore", func() { m.Get("", func(ctx *context.Context) { @@ -355,6 +356,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/user", func() { m.Get("/login", user.SignIn) m.Get("/login/cloud_brain", user.SignInCloudBrain) + m.Post("/login", bindIgnErr(auth.SignInForm{}), user.SignInPost) m.Group("", func() { m.Combo("/login/openid"). diff --git a/routers/user/auth.go b/routers/user/auth.go index a02cf24dc..faef017d4 100755 --- a/routers/user/auth.go +++ b/routers/user/auth.go @@ -176,6 +176,48 @@ func SignInCloudBrain(ctx *context.Context) { ctx.HTML(200, tplSignInCloudBrain) } + + + +func SignInPostAPI(ctx *context.Context) { + ctx.Data["Title"] = ctx.Tr("sign_in") + UserName := ctx.Query("UserName") + Password := ctx.Query("Password") + log.Info("0000000") + orderedOAuth2Names, oauth2Providers, err := models.GetActiveOAuth2Providers() + if err != nil { + ctx.ServerError("UserSignIn", err) + return + } + ctx.Data["OrderedOAuth2Names"] = orderedOAuth2Names + ctx.Data["OAuth2Providers"] = oauth2Providers + ctx.Data["Title"] = ctx.Tr("sign_in") + ctx.Data["SignInLink"] = setting.AppSubURL + "/user/login" + ctx.Data["PageIsSignIn"] = true + ctx.Data["PageIsLogin"] = true + ctx.Data["IsCourse"] = ctx.QueryBool("course") + ctx.Data["EnableSSPI"] = models.IsSSPIEnabled() + + if ctx.HasError() { + ctx.HTML(200, tplSignIn) + return + } + log.Info("1111111") + u, err := models.UserSignIn(UserName, Password) + log.Info("22222") + if err != nil { + ctx.ServerError("UserSignIn", err) + return + } + log.Info("3333") + models.SaveLoginInfoToDb(ctx.Req.Request, u) + // If this user is enrolled in 2FA, we can't sign the user in just yet. + // Instead, redirect them to the 2FA authentication page. + //handleSignInFull(ctx, u, form.Remember, false) + handleSignInFullNotRedirect(ctx, u, true, false) +} + + // SignInPost response for sign in request func SignInPost(ctx *context.Context, form auth.SignInForm) { ctx.Data["Title"] = ctx.Tr("sign_in") @@ -518,6 +560,69 @@ func handleSignIn(ctx *context.Context, u *models.User, remember bool) { handleSignInFull(ctx, u, remember, true) } +func handleSignInFullNotRedirect(ctx *context.Context, u *models.User, remember bool, obeyRedirect bool) string { + + log.Info("enter here.") + if remember { + days := 86400 * setting.LogInRememberDays + ctx.SetCookie(setting.CookieUserName, u.Name, days, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true) + ctx.SetSuperSecureCookie(base.EncodeMD5(u.Rands+u.Passwd), + setting.CookieRememberName, u.Name, days, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true) + } + + _ = ctx.Session.Delete("openid_verified_uri") + _ = ctx.Session.Delete("openid_signin_remember") + _ = ctx.Session.Delete("openid_determined_email") + _ = ctx.Session.Delete("openid_determined_username") + _ = ctx.Session.Delete("twofaUid") + _ = ctx.Session.Delete("twofaRemember") + _ = ctx.Session.Delete("u2fChallenge") + _ = ctx.Session.Delete("linkAccount") + if err := ctx.Session.Set("uid", u.ID); err != nil { + log.Error("Error setting uid %d in session: %v", u.ID, err) + } + if err := ctx.Session.Set("uname", u.Name); err != nil { + log.Error("Error setting uname %s session: %v", u.Name, err) + } + if err := ctx.Session.Release(); err != nil { + log.Error("Unable to store session: %v", err) + } + + // If the user does not have a locale set, we save the current one. + if len(u.Language) == 0 { + if len(ctx.GetCookie("lang")) != 0 { + u.Language = ctx.GetCookie("lang") + } else { + u.Language = ctx.Locale.Language() + } + + if err := models.UpdateUserCols(u, "language"); err != nil { + log.Error(fmt.Sprintf("Error updating user language [user: %d, locale: %s]", u.ID, u.Language)) + return setting.AppSubURL + "/dashboard" + } + } else { + // Language setting of the user use the one previously set + if len(ctx.GetCookie("lang")) != 0 { + u.Language = ctx.GetCookie("lang") + } + } + + ctx.SetCookie("lang", u.Language, nil, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true) + + // Clear whatever CSRF has right now, force to generate a new one + ctx.SetCookie(setting.CSRFCookieName, "", -1, setting.AppSubURL, setting.SessionConfig.Domain, setting.SessionConfig.Secure, true) + + // Register last login + u.SetLastLogin() + if err := models.UpdateUserCols(u, "last_login_unix"); err != nil { + ctx.ServerError("UpdateUserCols", err) + return setting.AppSubURL + "/dashboard" + } + + + return setting.AppSubURL + "/dashboard" +} + func handleSignInFull(ctx *context.Context, u *models.User, remember bool, obeyRedirect bool) string { if remember { days := 86400 * setting.LogInRememberDays From e8f24be5c4777be8af0eaf9c87fc0bc1bd3f8daf Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Mon, 23 May 2022 15:44:00 +0800 Subject: [PATCH 039/239] #2026 update --- models/cloudbrain.go | 5 +++++ routers/repo/cloudbrain.go | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index cb7fda7a0..03eef25e1 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -1489,6 +1489,11 @@ func UpdateJob(job *Cloudbrain) error { return updateJob(x, job) } +func UpdateJobDurationWithDeleted(job *Cloudbrain) error { + _, err := x.Exec("update cloudbrain set start_time=?, end_time=?,train_job_duration=?,duration=? where id=?", job.StartTime, job.EndTime, job.TrainJobDuration, job.Duration, job.ID) + return err +} + func updateJob(e Engine, job *Cloudbrain) error { _, err := e.ID(job.ID).AllCols().Update(job) return err diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 9929992e2..82efe47e1 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -1572,7 +1572,7 @@ func handleNoDurationTask(cloudBrains []*models.Cloudbrain) { } task.Duration = task.EndTime.AsTime().Unix() - task.StartTime.AsTime().Unix() task.TrainJobDuration = models.ConvertDurationToStr(task.Duration) - err = models.UpdateJob(task) + err = models.UpdateJobDurationWithDeleted(task) if err != nil { log.Error("UpdateJob(%s) failed:%v", task.JobName, err) } @@ -1597,7 +1597,7 @@ func handleNoDurationTask(cloudBrains []*models.Cloudbrain) { } task.CorrectCreateUnix() task.ComputeAndSetDuration() - err = models.UpdateJob(task) + err = models.UpdateJobDurationWithDeleted(task) if err != nil { log.Error("UpdateJob(%s) failed:%v", task.JobName, err) continue @@ -1618,7 +1618,7 @@ func handleNoDurationTask(cloudBrains []*models.Cloudbrain) { task.EndTime = task.StartTime.Add(result.Duration / 1000) } task.ComputeAndSetDuration() - err = models.UpdateJob(task) + err = models.UpdateJobDurationWithDeleted(task) if err != nil { log.Error("UpdateJob(%s) failed:%v", task.JobName, err) continue @@ -1639,7 +1639,7 @@ func updateDefaultDuration(task *models.Cloudbrain) { task.StartTime = task.CreatedUnix task.EndTime = task.UpdatedUnix task.ComputeAndSetDuration() - err := models.UpdateJob(task) + err := models.UpdateJobDurationWithDeleted(task) if err != nil { log.Error("UpdateJob(%s) failed:%v", task.JobName, err) } From ff1a056905eabb30d30c450330857905bc2371fd Mon Sep 17 00:00:00 2001 From: OpenIhu Date: Mon, 23 May 2022 15:58:43 +0800 Subject: [PATCH 040/239] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E4=B8=BA9=E6=9D=A1=E4=B8=80=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- custom/public/css/git.openi.css | 8 ++++---- public/home/home.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/custom/public/css/git.openi.css b/custom/public/css/git.openi.css index d50b7e2cd..7d05d503b 100644 --- a/custom/public/css/git.openi.css +++ b/custom/public/css/git.openi.css @@ -66,7 +66,7 @@ background: #DFE9F0; padding-top: 0; border: none; - margin-bottom: 11em; + margin-bottom: 13em; } .ui.secondary.hometop.segment #navbar{ z-index: 10; @@ -155,7 +155,7 @@ border-radius: 1.2em; background-color: rgba(16, 16, 16, .9); position: relative; - padding-left: 1.3em !important; + padding: 1.0em 1.0em 1.0em 1.3em; } .homeorg, .homepro, .homemodel, .i-env{ position: relative; @@ -169,7 +169,7 @@ bottom: 0; background-color: rgba(105, 192, 255, .4); width: 2px; -} +} .homenews .time-since{ padding-left: 1em; color: #888888; @@ -186,7 +186,7 @@ padding: 0; } .newslist{ - height: 260px; + height: 300px; overflow: hidden; } diff --git a/public/home/home.js b/public/home/home.js index 3b2a34f06..1f11b9a4f 100755 --- a/public/home/home.js +++ b/public/home/home.js @@ -9,7 +9,7 @@ if(isEmpty(token)){ var swiperNewMessage = new Swiper(".newslist", { direction: "vertical", - slidesPerView: 10, + slidesPerView: 9, loop: true, autoplay: { delay: 2500, From 23b519585b67e543e8d497d159e35a1183b80b01 Mon Sep 17 00:00:00 2001 From: OpenIhu Date: Tue, 24 May 2022 14:42:19 +0800 Subject: [PATCH 041/239] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E6=99=BA=E7=AE=97?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=88=86=E4=B8=AD=E5=BF=83=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- custom/public/rotation3D/rotation3D.css | 30 +++++++++++++++++++++++++ templates/home.tmpl | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/custom/public/rotation3D/rotation3D.css b/custom/public/rotation3D/rotation3D.css index 7f93f1025..d29ee5cb7 100644 --- a/custom/public/rotation3D/rotation3D.css +++ b/custom/public/rotation3D/rotation3D.css @@ -29,6 +29,36 @@ .rotation3D__item .cont{ position: relative; z-index: 2; } .rotation3D__item .cont .iconfont { font-size: 28px; margin-top: 30px; margin-bottom: 96px; display: block; } .rotation3D__item .cont p{ color: #101010; } +.itemList .rotation3D__item .cont p::after{ + content: ''; + position: absolute; + left: 0; + right: 0; +} +.itemList .rotation3D__item:nth-child(1) .cont p::after{ + content: "云脑一号"; +} +.itemList .rotation3D__item:nth-child(2) .cont p::after{ + content: "云脑二号"; +} +.itemList .rotation3D__item:nth-child(3) .cont p::after{ + content: "北大分中心"; +} +.itemList .rotation3D__item:nth-child(4) .cont p::after{ + content: "合肥分中心"; +} +.itemList .rotation3D__item:nth-child(5) .cont p::after{ + content: "武汉AI中心"; +} +.itemList .rotation3D__item:nth-child(6) .cont p::after{ + content: "西安AI中心"; +} +.itemList .rotation3D__item:nth-child(7) .cont p::after{ + content: "中原AI中心"; +} +.itemList .rotation3D__item:nth-child(8) .cont p::after{ + content: "成都AI中心"; +} .rotation3D__item.blue{ color: #01e9fc; } .rotation3D__item.green{ color: #b4b3ca; } diff --git a/templates/home.tmpl b/templates/home.tmpl index 5a602dab7..aa7a21ccc 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -20,7 +20,7 @@
- +

From 27630014b9eb586a172f05936e2594950613d8a6 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 24 May 2022 16:37:15 +0800 Subject: [PATCH 042/239] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=94=B9=E7=89=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- public/home/home.js | 89 ++++++++++++++++++++++++++-------------- routers/home.go | 79 ++++++++++++++++++++++++----------- routers/routes/routes.go | 7 ++-- templates/home.tmpl | 6 +-- 4 files changed, 122 insertions(+), 59 deletions(-) diff --git a/public/home/home.js b/public/home/home.js index 1f11b9a4f..9a4847e73 100755 --- a/public/home/home.js +++ b/public/home/home.js @@ -117,6 +117,7 @@ socket.onmessage = function (e) { continue; } } + refresh3DInfo(record); var recordPrefix = getMsg(record); if(record.OpType == "6" || record.OpType == "10" || record.OpType == "12" || record.OpType == "13"){ html += recordPrefix + actionName; @@ -200,6 +201,22 @@ function getTaskLink(record){ return re; } +function refresh3DInfo(record){ + if(record.OpType == "25" || record.OpType == "29" || record.OpType == "31"){ + //cloudbrain one + var lines = $('.rotation3D__line blue'); + console.log("cloudbrain one line length=" + lines.length); + lines[0].find("span").text(record.RefName); + + }else if(record.OpType == "26" || record.OpType == "27" || record.OpType == "28"){ + //cloudbrain two + var lines = $('.rotation3D__line blue'); + console.log("cloudbrain two line length=" + lines.length); + lines[1].find("span").text(record.RefName); + } + +} + function getMsg(record){ var html =""; html += "
"; @@ -418,48 +435,60 @@ queryRecommendData(); function queryRecommendData(){ $.ajax({ type:"GET", - url:"/recommend/org", + url:"/recommend/home", headers: { authorization:token, }, dataType:"json", async:false, success:function(json){ - displayOrg(json); + displayOrg(json.org); + displayRepo(json.repo); + displayActivity(json.image); + displayCloudBrain(json.cloudbrain) }, error:function(response) { } }); - $.ajax({ - type:"GET", - url:"/recommend/repo", - headers: { - authorization:token, - }, - dataType:"json", - async:false, - success:function(json){ - displayRepo(json); - }, - error:function(response) { - } - }); + // $.ajax({ + // type:"GET", + // url:"/recommend/repo", + // headers: { + // authorization:token, + // }, + // dataType:"json", + // async:false, + // success:function(json){ + // displayRepo(json); + // }, + // error:function(response) { + // } + // }); + + // $.ajax({ + // type:"GET", + // url:"/recommend/imageinfo", + // headers: { + // authorization:token, + // }, + // dataType:"json", + // async:false, + // success:function(json){ + // displayActivity(json); + // }, + // error:function(response) { + // } + // }); +} - $.ajax({ - type:"GET", - url:"/recommend/imageinfo", - headers: { - authorization:token, - }, - dataType:"json", - async:false, - success:function(json){ - displayActivity(json); - }, - error:function(response) { - } - }); +function displayCloudBrain(json){ + var completed_task = document.getElementById("completed_task"); + completed_task.text(json.completed_task); + var running_task = document.getElementById("running_task"); + running_task.text(json.running_task); + var wait_task = document.getElementById("wait_task"); + wait_task.text(json.wait_task); } function displayActivity(json){ diff --git a/routers/home.go b/routers/home.go index e37cacb01..09fe97dc6 100755 --- a/routers/home.go +++ b/routers/home.go @@ -471,7 +471,7 @@ func ExploreOrganizations(ctx *context.Context) { return } - recommendOrgs, err := GetRecommendOrg() + recommendOrgs, err := getRecommendOrg() if err != nil { log.Error("GetRecommendOrgInfos failed:%v", err.Error(), ctx.Data["MsgID"]) ctx.ServerError("GetRecommendOrgInfos", err) @@ -606,31 +606,31 @@ func ExploreImages(ctx *context.Context) { } func ExploreDataAnalysisUserTrend(ctx *context.Context) { - ctx.Data["url_params"]="UserTrend" + ctx.Data["url_params"] = "UserTrend" ctx.HTML(200, tplExploreExploreDataAnalysis) } func ExploreDataAnalysisUserAnalysis(ctx *context.Context) { - ctx.Data["url_params"]="UserAnalysis" + ctx.Data["url_params"] = "UserAnalysis" ctx.HTML(200, tplExploreExploreDataAnalysis) } func ExploreDataAnalysisProTrend(ctx *context.Context) { - ctx.Data["url_params"]="ProTrend" + ctx.Data["url_params"] = "ProTrend" ctx.HTML(200, tplExploreExploreDataAnalysis) } func ExploreDataAnalysisProAnalysis(ctx *context.Context) { - ctx.Data["url_params"]="ProAnalysis" + ctx.Data["url_params"] = "ProAnalysis" ctx.HTML(200, tplExploreExploreDataAnalysis) } func ExploreDataAnalysisOverview(ctx *context.Context) { - ctx.Data["url_params"]="Overview" + ctx.Data["url_params"] = "Overview" ctx.HTML(200, tplExploreExploreDataAnalysis) } func ExploreDataAnalysisBrainAnalysis(ctx *context.Context) { - ctx.Data["url_params"]="BrainAnalysis" + ctx.Data["url_params"] = "BrainAnalysis" ctx.HTML(200, tplExploreExploreDataAnalysis) } func ExploreDataAnalysis(ctx *context.Context) { - ctx.Data["url_params"]="" + ctx.Data["url_params"] = "" ctx.HTML(200, tplExploreExploreDataAnalysis) } @@ -640,7 +640,7 @@ func NotFound(ctx *context.Context) { ctx.NotFound("home.NotFound", nil) } -func GetRecommendOrg() ([]map[string]interface{}, error) { +func getRecommendOrg() ([]map[string]interface{}, error) { url := setting.RecommentRepoAddr + "organizations" result, err := repository.RecommendFromPromote(url) @@ -668,7 +668,7 @@ func GetRecommendOrg() ([]map[string]interface{}, error) { } return resultOrg, nil } -func GetImageInfo() ([]map[string]interface{}, error) { +func getImageInfo() ([]map[string]interface{}, error) { url := setting.RecommentRepoAddr + "picture_info" result, err := repository.RecommendFromPromote(url) @@ -731,14 +731,14 @@ func GetRankUser(index string) ([]map[string]interface{}, error) { return resultOrg, nil } -func GetImageInfoFromPromote(ctx *context.Context) { - imageInfo, err := GetImageInfo() - if err != nil { - ctx.ServerError("500", err) - return - } - ctx.JSON(200, imageInfo) -} +// func GetImageInfoFromPromote(ctx *context.Context) { +// imageInfo, err := GetImageInfo() +// if err != nil { +// ctx.ServerError("500", err) +// return +// } +// ctx.JSON(200, imageInfo) +// } func GetUserRankFromPromote(ctx *context.Context) { index := ctx.Params("index") @@ -750,15 +750,48 @@ func GetUserRankFromPromote(ctx *context.Context) { ctx.JSON(200, resultUserRank) } -func RecommendOrgFromPromote(ctx *context.Context) { - resultOrg, err := GetRecommendOrg() +func RecommendHomeInfo(ctx *context.Context) { + resultOrg, err := getRecommendOrg() if err != nil { - ctx.ServerError("500", err) - return + log.Info("error." + err.Error()) } - ctx.JSON(200, resultOrg) + resultRepo, err := repository.GetRecommendRepoFromPromote("projects") + if err != nil { + log.Info("error." + err.Error()) + } + resultImage, err := getImageInfo() + if err != nil { + log.Info("error." + err.Error()) + } + resultCloudBrain, err := getCloudbrainNums() + if err != nil { + log.Info("error." + err.Error()) + } + mapInterface := make(map[string]interface{}) + mapInterface["org"] = resultOrg + mapInterface["repo"] = resultRepo + mapInterface["image"] = resultImage + mapInterface["cloudbrain"] = resultCloudBrain + ctx.JSON(http.StatusOK, mapInterface) } +func getCloudbrainNums() (map[string]string, error) { + result := make(map[string]string) + result["completed_task"] = "1800" + result["running_task"] = "20" + result["wait_task"] = "30" + return result, nil +} + +// func RecommendOrgFromPromote(ctx *context.Context) { +// resultOrg, err := GetRecommendOrg() +// if err != nil { +// ctx.ServerError("500", err) +// return +// } +// ctx.JSON(200, resultOrg) +// } + func RecommendRepoFromPromote(ctx *context.Context) { result, err := repository.GetRecommendRepoFromPromote("projects") if err != nil { diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 4c3f5f472..12d0e1cf8 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -323,10 +323,11 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/dashboard", routers.Dashboard) go routers.SocketManager.Run() m.Get("/action/notification", routers.ActionNotification) - m.Get("/recommend/org", routers.RecommendOrgFromPromote) - m.Get("/recommend/repo", routers.RecommendRepoFromPromote) + m.Get("/recommend/home", routers.RecommendHomeInfo) + //m.Get("/recommend/org", routers.RecommendOrgFromPromote) + //m.Get("/recommend/repo", routers.RecommendRepoFromPromote) m.Get("/recommend/userrank/:index", routers.GetUserRankFromPromote) - m.Get("/recommend/imageinfo", routers.GetImageInfoFromPromote) + //m.Get("/recommend/imageinfo", routers.GetImageInfoFromPromote) m.Post("/all/search/", routers.Search) m.Get("/all/search/", routers.EmptySearch) m.Get("/all/dosearch/", routers.SearchApi) diff --git a/templates/home.tmpl b/templates/home.tmpl index aa7a21ccc..ccf734081 100755 --- a/templates/home.tmpl +++ b/templates/home.tmpl @@ -4,9 +4,9 @@
-

完成AI任务
1716

-

运行AI任务
120

-

等待AI任务
80

+

完成AI任务
1716

+

运行AI任务
120

+

等待AI任务
80

From 616d002d2f69971ae3f0c721c9d5b67fd412a38a Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 24 May 2022 16:47:40 +0800 Subject: [PATCH 043/239] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=94=B9=E7=89=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- public/home/home.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/public/home/home.js b/public/home/home.js index 9a4847e73..89aad85e0 100755 --- a/public/home/home.js +++ b/public/home/home.js @@ -483,12 +483,9 @@ function queryRecommendData(){ } function displayCloudBrain(json){ - var completed_task = document.getElementById("completed_task"); - completed_task.text(json.completed_task); - var running_task = document.getElementById("running_task"); - running_task.text(json.running_task); - var wait_task = document.getElementById("wait_task"); - wait_task.text(json.wait_task); + $('#completed_task').text(json.completed_task); + $('#running_task').text(json.running_task); + $('#wait_task').text(json.wait_task); } function displayActivity(json){ From 656b5e89c73292e2746aecfe1920dfebacca52d3 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 24 May 2022 16:51:20 +0800 Subject: [PATCH 044/239] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=94=B9=E7=89=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- public/home/home.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/home/home.js b/public/home/home.js index 89aad85e0..bf0da85d6 100755 --- a/public/home/home.js +++ b/public/home/home.js @@ -204,13 +204,13 @@ function getTaskLink(record){ function refresh3DInfo(record){ if(record.OpType == "25" || record.OpType == "29" || record.OpType == "31"){ //cloudbrain one - var lines = $('.rotation3D__line blue'); + var lines = $('.rotation3D__line'); console.log("cloudbrain one line length=" + lines.length); lines[0].find("span").text(record.RefName); }else if(record.OpType == "26" || record.OpType == "27" || record.OpType == "28"){ //cloudbrain two - var lines = $('.rotation3D__line blue'); + var lines = $('.rotation3D__line'); console.log("cloudbrain two line length=" + lines.length); lines[1].find("span").text(record.RefName); } From c50ee706b3e982b7a716753e6925687e9fe0ed2e Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 24 May 2022 16:55:49 +0800 Subject: [PATCH 045/239] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=94=B9=E7=89=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- public/home/home.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/public/home/home.js b/public/home/home.js index bf0da85d6..2d27c76f5 100755 --- a/public/home/home.js +++ b/public/home/home.js @@ -205,14 +205,15 @@ function refresh3DInfo(record){ if(record.OpType == "25" || record.OpType == "29" || record.OpType == "31"){ //cloudbrain one var lines = $('.rotation3D__line'); - console.log("cloudbrain one line length=" + lines.length); + var spans = $('.rotation3D__line').find("span") + console.log("cloudbrain one line length=" + lines.length + " spans=" + spans.length); lines[0].find("span").text(record.RefName); }else if(record.OpType == "26" || record.OpType == "27" || record.OpType == "28"){ //cloudbrain two var lines = $('.rotation3D__line'); console.log("cloudbrain two line length=" + lines.length); - lines[1].find("span").text(record.RefName); + //lines[1].find("span").text(record.RefName); } } From 4330c46658792218327cab63138878fc02870770 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 24 May 2022 16:58:05 +0800 Subject: [PATCH 046/239] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=94=B9=E7=89=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- public/home/home.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/home/home.js b/public/home/home.js index 2d27c76f5..bca9ddb1e 100755 --- a/public/home/home.js +++ b/public/home/home.js @@ -205,14 +205,14 @@ function refresh3DInfo(record){ if(record.OpType == "25" || record.OpType == "29" || record.OpType == "31"){ //cloudbrain one var lines = $('.rotation3D__line'); - var spans = $('.rotation3D__line').find("span") - console.log("cloudbrain one line length=" + lines.length + " spans=" + spans.length); - lines[0].find("span").text(record.RefName); - + $('.rotation3D__line').find("span").eq(0).text(record.RefName) + console.log("cloudbrain one line length=" + lines.length); + //lines[0].find("span").text(record.RefName); }else if(record.OpType == "26" || record.OpType == "27" || record.OpType == "28"){ //cloudbrain two var lines = $('.rotation3D__line'); console.log("cloudbrain two line length=" + lines.length); + $('.rotation3D__line').find("span").eq(1).text(record.RefName) //lines[1].find("span").text(record.RefName); } From 6216bcc30772b1d1be183ab985cbb27f29c02f56 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 24 May 2022 17:03:29 +0800 Subject: [PATCH 047/239] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=94=B9=E7=89=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- public/home/home.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/public/home/home.js b/public/home/home.js index bca9ddb1e..6bba5134a 100755 --- a/public/home/home.js +++ b/public/home/home.js @@ -205,14 +205,16 @@ function refresh3DInfo(record){ if(record.OpType == "25" || record.OpType == "29" || record.OpType == "31"){ //cloudbrain one var lines = $('.rotation3D__line'); - $('.rotation3D__line').find("span").eq(0).text(record.RefName) + var span = $('.rotation3D__line').find("span")[0]; + console.log(span); + //$('.rotation3D__line').find("span").eq(0).text(record.RefName) console.log("cloudbrain one line length=" + lines.length); //lines[0].find("span").text(record.RefName); }else if(record.OpType == "26" || record.OpType == "27" || record.OpType == "28"){ //cloudbrain two var lines = $('.rotation3D__line'); console.log("cloudbrain two line length=" + lines.length); - $('.rotation3D__line').find("span").eq(1).text(record.RefName) + //$('.rotation3D__line').find("span").eq(1).text(record.RefName) //lines[1].find("span").text(record.RefName); } From 460bff4614bde11e9acda192c2f9a98d2472dca5 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 24 May 2022 17:07:32 +0800 Subject: [PATCH 048/239] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=94=B9=E7=89=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- public/home/home.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/home/home.js b/public/home/home.js index 6bba5134a..33c7edc47 100755 --- a/public/home/home.js +++ b/public/home/home.js @@ -207,6 +207,7 @@ function refresh3DInfo(record){ var lines = $('.rotation3D__line'); var span = $('.rotation3D__line').find("span")[0]; console.log(span); + span.innerText =record.RefName; //$('.rotation3D__line').find("span").eq(0).text(record.RefName) console.log("cloudbrain one line length=" + lines.length); //lines[0].find("span").text(record.RefName); @@ -214,6 +215,9 @@ function refresh3DInfo(record){ //cloudbrain two var lines = $('.rotation3D__line'); console.log("cloudbrain two line length=" + lines.length); + var span = $('.rotation3D__line').find("span")[1]; + console.log(span); + span.innerText =record.RefName; //$('.rotation3D__line').find("span").eq(1).text(record.RefName) //lines[1].find("span").text(record.RefName); } From bcc84cb4f5b91505165fae9256517c56722bed22 Mon Sep 17 00:00:00 2001 From: liuzx Date: Wed, 25 May 2022 16:26:02 +0800 Subject: [PATCH 049/239] add jobstatus analysis --- models/cloudbrain_static.go | 30 +++++++++++ routers/api/v1/api.go | 3 ++ routers/api/v1/repo/cloudbrain_dashboard.go | 58 +++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 models/cloudbrain_static.go diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go new file mode 100644 index 000000000..de3575632 --- /dev/null +++ b/models/cloudbrain_static.go @@ -0,0 +1,30 @@ +package models + +func GetJobWaitingCount() (int64, error) { + countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobWaiting) + "'" + return x.SQL(countSql).Count() +} +func GetJobStoppedCount() (int64, error) { + countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobStopped) + "'" + return x.SQL(countSql).Count() +} +func GetJobCompletedCount() (int64, error) { + countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(ModelArtsTrainJobCompleted) + "'" + return x.SQL(countSql).Count() +} +func GetJobFailedCount() (int64, error) { + countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobFailed) + "'" + return x.SQL(countSql).Count() +} +func GetJobRunningCount() (int64, error) { + countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobRunning) + "'" + return x.SQL(countSql).Count() +} +func GetJobKilledCount() (int64, error) { + countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(ModelArtsTrainJobKilled) + "'" + return x.SQL(countSql).Count() +} +func GetJobInitCount() (int64, error) { + countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(ModelArtsTrainJobInit) + "'" + return x.SQL(countSql).Count() +} diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 9a05aa8ae..17122b09d 100755 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -573,6 +573,9 @@ func RegisterRoutes(m *macaron.Macaron) { //cloudbrain board m.Group("/cloudbrainboard", func() { m.Get("/downloadAll", repo.DownloadCloudBrainBoard) + m.Group("/cloudbrain", func() { + m.Get("/status_analysis", repo.GetCloudbrainsStatusAnalysis) + }) }, operationReq) // Users m.Group("/users", func() { diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 2090a2cf2..47a64b5aa 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -11,6 +11,16 @@ import ( "github.com/360EntSecGroup-Skylar/excelize/v2" ) +type CloudbrainsStatusAnalysis struct { + JobWaitingCount int64 `json:"jobWaitingCount"` + JobRunningCount int64 `json:"jobRunningCount"` + JobStoppedCount int64 `json:"jobStoppedCount"` + JobCompletedCount int64 `json:"jobCompletedCount"` + JobFailedCount int64 `json:"jobFailedCount"` + JobKilledCount int64 `json:"jobKilledCount"` + JobInitCount int64 `json:"jobInitCount"` +} + func DownloadCloudBrainBoard(ctx *context.Context) { page := 1 @@ -133,3 +143,51 @@ func getBrainWaitTime(rs *models.CloudbrainInfo) string { return models.ConvertDurationToStr(int64(waitTime)) } } +func GetCloudbrainsStatusAnalysis(ctx *context.Context) { + jobWaitingCount, err := models.GetJobWaitingCount() + if err != nil { + log.Error("Can not query jobWaitingCount.", err) + return + } + jobRunningCount, err := models.GetJobRunningCount() + if err != nil { + log.Error("Can not query jobRunningCount.", err) + return + } + jobStoppedCount, err := models.GetJobStoppedCount() + if err != nil { + log.Error("Can not query jobStoppedCount.", err) + return + } + jobCompletedCount, err := models.GetJobCompletedCount() + if err != nil { + log.Error("Can not query jobCompletedCount.", err) + return + } + jobFailedCount, err := models.GetJobFailedCount() + if err != nil { + log.Error("Can not query jobFailedCount.", err) + return + } + jobKilledCount, err := models.GetJobKilledCount() + if err != nil { + log.Error("Can not query jobKilledCount.", err) + return + } + jobInitCount, err := models.GetJobInitCount() + if err != nil { + log.Error("Can not query jobInitCount.", err) + return + } + + cloudbrainsStatusAnalysis := CloudbrainsStatusAnalysis{ + JobWaitingCount: jobWaitingCount, + JobRunningCount: jobRunningCount, + JobStoppedCount: jobStoppedCount, + JobCompletedCount: jobCompletedCount, + JobFailedCount: jobFailedCount, + JobKilledCount: jobKilledCount, + JobInitCount: jobInitCount, + } + ctx.JSON(http.StatusOK, cloudbrainsStatusAnalysis) +} From 14753d2a341ec2ab6009e19bc620d69adf3c8518 Mon Sep 17 00:00:00 2001 From: liuzx Date: Wed, 25 May 2022 17:58:55 +0800 Subject: [PATCH 050/239] update --- models/cloudbrain_static.go | 36 ++++++++--------- routers/api/v1/repo/cloudbrain_dashboard.go | 45 ++------------------- 2 files changed, 21 insertions(+), 60 deletions(-) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index 3cf8dfb80..dfc1b6dd6 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -215,25 +215,23 @@ func GetCreatorCount() (int64, error) { return x.SQL(countSql).Count() } -func GetJobWaitingCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobWaiting) + "'" - return x.SQL(countSql).Count() -} -func GetJobStoppedCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobStopped) + "'" - return x.SQL(countSql).Count() -} -func GetJobSucceededCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobSucceeded) + "'" - return x.SQL(countSql).Count() -} -func GetJobFailedCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobFailed) + "'" - return x.SQL(countSql).Count() -} -func GetJobRunningCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobRunning) + "'" - return x.SQL(countSql).Count() +func GetAllStatusCloudBrain() map[string]int { + sess := x.NewSession() + defer sess.Close() + cloudbrains := make([]*CloudbrainInfo, 0) + if err := sess.Table(&Cloudbrain{}).Unscoped(). + Find(&cloudbrains); err != nil { + log.Info("find error.") + } + cloudBrainStatusResult := make(map[string]int) + for _, cloudbrain := range cloudbrains { + if _, ok := cloudBrainStatusResult[cloudbrain.Status]; !ok { + cloudBrainStatusResult[cloudbrain.Status] = 1 + } else { + cloudBrainStatusResult[cloudbrain.Status] += 1 + } + } + return cloudBrainStatusResult } func getCreatePeriodCount(dateBeginTime string, dateEndTime string, hourBeginTime string, hourEndTime string) (int64, error) { diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 3a80abc20..01c78ff87 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -43,13 +43,6 @@ type CloudbrainsOverviewData struct { CreatorCount int64 `json:"creatorCount"` } -type CloudbrainsStatusAnalysis struct { - JobWaitingCount int64 `json:"jobWaitingCount"` - JobRunningCount int64 `json:"jobRunningCount"` - JobStoppedCount int64 `json:"jobStoppedCount"` - JobSucceededCount int64 `json:"jobSucceededCount"` - JobFailedCount int64 `json:"jobFailedCount"` -} type TimeCloudbrainsNum struct { TimeCloudbrainNum []DateCloudbrainNum `json:"dateCloudbrainNum"` } @@ -379,40 +372,10 @@ func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) { } func GetCloudbrainsStatusAnalysis(ctx *context.Context) { - jobWaitingCount, err := models.GetJobWaitingCount() - if err != nil { - log.Error("Can not query jobWaitingCount.", err) - return - } - jobRunningCount, err := models.GetJobRunningCount() - if err != nil { - log.Error("Can not query jobRunningCount.", err) - return - } - jobStoppedCount, err := models.GetJobStoppedCount() - if err != nil { - log.Error("Can not query jobStoppedCount.", err) - return - } - jobSucceededCount, err := models.GetJobSucceededCount() - if err != nil { - log.Error("Can not query jobSucceededCount.", err) - return - } - jobFailedCount, err := models.GetJobFailedCount() - if err != nil { - log.Error("Can not query jobFailedCount.", err) - return - } - - cloudbrainsStatusAnalysis := CloudbrainsStatusAnalysis{ - JobWaitingCount: jobWaitingCount, - JobRunningCount: jobRunningCount, - JobStoppedCount: jobStoppedCount, - JobSucceededCount: jobSucceededCount, - JobFailedCount: jobFailedCount, - } - ctx.JSON(http.StatusOK, cloudbrainsStatusAnalysis) + cloudBrainStatusResult := models.GetAllStatusCloudBrain() + ctx.JSON(http.StatusOK, map[string]interface{}{ + "cloudBrainStatusResult": cloudBrainStatusResult, + }) } func GetCloudbrainsDetailData(ctx *context.Context) { From deba9009e6d33753d3d6aa1afd799986799e95a7 Mon Sep 17 00:00:00 2001 From: liuzx Date: Wed, 25 May 2022 18:06:47 +0800 Subject: [PATCH 051/239] update --- models/cloudbrain_static.go | 46 ++++++++----------- routers/api/v1/repo/cloudbrain_dashboard.go | 50 ++------------------- 2 files changed, 23 insertions(+), 73 deletions(-) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index de3575632..31f66d4fc 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -1,30 +1,22 @@ package models -func GetJobWaitingCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobWaiting) + "'" - return x.SQL(countSql).Count() -} -func GetJobStoppedCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobStopped) + "'" - return x.SQL(countSql).Count() -} -func GetJobCompletedCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(ModelArtsTrainJobCompleted) + "'" - return x.SQL(countSql).Count() -} -func GetJobFailedCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobFailed) + "'" - return x.SQL(countSql).Count() -} -func GetJobRunningCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(JobRunning) + "'" - return x.SQL(countSql).Count() -} -func GetJobKilledCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(ModelArtsTrainJobKilled) + "'" - return x.SQL(countSql).Count() -} -func GetJobInitCount() (int64, error) { - countSql := "SELECT count(*) FROM " + "public.cloudbrain where status ='" + string(ModelArtsTrainJobInit) + "'" - return x.SQL(countSql).Count() +import "code.gitea.io/gitea/modules/log" + +func GetAllStatusCloudBrain() map[string]int { + sess := x.NewSession() + defer sess.Close() + cloudbrains := make([]*CloudbrainInfo, 0) + if err := sess.Table(&Cloudbrain{}).Unscoped(). + Find(&cloudbrains); err != nil { + log.Info("find error.") + } + cloudBrainStatusResult := make(map[string]int) + for _, cloudbrain := range cloudbrains { + if _, ok := cloudBrainStatusResult[cloudbrain.Status]; !ok { + cloudBrainStatusResult[cloudbrain.Status] = 1 + } else { + cloudBrainStatusResult[cloudbrain.Status] += 1 + } + } + return cloudBrainStatusResult } diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 47a64b5aa..0710a21e4 100644 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -144,50 +144,8 @@ func getBrainWaitTime(rs *models.CloudbrainInfo) string { } } func GetCloudbrainsStatusAnalysis(ctx *context.Context) { - jobWaitingCount, err := models.GetJobWaitingCount() - if err != nil { - log.Error("Can not query jobWaitingCount.", err) - return - } - jobRunningCount, err := models.GetJobRunningCount() - if err != nil { - log.Error("Can not query jobRunningCount.", err) - return - } - jobStoppedCount, err := models.GetJobStoppedCount() - if err != nil { - log.Error("Can not query jobStoppedCount.", err) - return - } - jobCompletedCount, err := models.GetJobCompletedCount() - if err != nil { - log.Error("Can not query jobCompletedCount.", err) - return - } - jobFailedCount, err := models.GetJobFailedCount() - if err != nil { - log.Error("Can not query jobFailedCount.", err) - return - } - jobKilledCount, err := models.GetJobKilledCount() - if err != nil { - log.Error("Can not query jobKilledCount.", err) - return - } - jobInitCount, err := models.GetJobInitCount() - if err != nil { - log.Error("Can not query jobInitCount.", err) - return - } - - cloudbrainsStatusAnalysis := CloudbrainsStatusAnalysis{ - JobWaitingCount: jobWaitingCount, - JobRunningCount: jobRunningCount, - JobStoppedCount: jobStoppedCount, - JobCompletedCount: jobCompletedCount, - JobFailedCount: jobFailedCount, - JobKilledCount: jobKilledCount, - JobInitCount: jobInitCount, - } - ctx.JSON(http.StatusOK, cloudbrainsStatusAnalysis) + cloudBrainStatusResult := models.GetAllStatusCloudBrain() + ctx.JSON(http.StatusOK, map[string]interface{}{ + "cloudBrainStatusResult": cloudBrainStatusResult, + }) } From 09879828aade23f7ca85735e572e85e781d3476b Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 26 May 2022 08:56:36 +0800 Subject: [PATCH 052/239] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/home.go | 19 ++++++++++++++----- templates/explore/repo_right.tmpl | 2 +- templates/user/dashboard/repolist.tmpl | 4 ++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/routers/home.go b/routers/home.go index 09fe97dc6..2f37357e4 100755 --- a/routers/home.go +++ b/routers/home.go @@ -259,7 +259,11 @@ func ExploreRepos(ctx *context.Context) { ctx.Data["PageIsExplore"] = true ctx.Data["PageIsExploreRepositories"] = true ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled - + pictureInfo, err := getImageInfo("dashboard-picture") + if err == nil && len(pictureInfo) > 0 { + ctx.Data["image_url"] = pictureInfo[0]["url"] + ctx.Data["image_link"] = pictureInfo[0]["image_link"] + } var ownerID int64 if ctx.User != nil && !ctx.User.IsAdmin { ownerID = ctx.User.ID @@ -434,7 +438,11 @@ func ExploreUsers(ctx *context.Context) { ctx.Data["PageIsExplore"] = true ctx.Data["PageIsExploreUsers"] = true ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled - + pictureInfo, err := getImageInfo("explore-user-picture") + if err == nil && len(pictureInfo) > 0 { + ctx.Data["image_url"] = pictureInfo[0]["url"] + ctx.Data["image_link"] = pictureInfo[0]["image_link"] + } RenderUserSearch(ctx, &models.SearchUserOptions{ Actor: ctx.User, Type: models.UserTypeIndividual, @@ -668,8 +676,9 @@ func getRecommendOrg() ([]map[string]interface{}, error) { } return resultOrg, nil } -func getImageInfo() ([]map[string]interface{}, error) { - url := setting.RecommentRepoAddr + "picture_info" + +func getImageInfo(filename string) ([]map[string]interface{}, error) { + url := setting.RecommentRepoAddr + filename result, err := repository.RecommendFromPromote(url) if err != nil { @@ -759,7 +768,7 @@ func RecommendHomeInfo(ctx *context.Context) { if err != nil { log.Info("error." + err.Error()) } - resultImage, err := getImageInfo() + resultImage, err := getImageInfo("picture_info") if err != nil { log.Info("error." + err.Error()) } diff --git a/templates/explore/repo_right.tmpl b/templates/explore/repo_right.tmpl index 5e05e797b..d4eebbe6d 100644 --- a/templates/explore/repo_right.tmpl +++ b/templates/explore/repo_right.tmpl @@ -1,4 +1,4 @@ - +