| @@ -107,6 +107,7 @@ func GetAllProjectsPeriodStatistics(ctx *context.Context) { | |||
| 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), | |||
| @@ -114,13 +115,23 @@ func GetAllProjectsPeriodStatistics(ctx *context.Context) { | |||
| TotalPage: getTotalPage(total, pageSize), | |||
| TotalCount: total, | |||
| LastUpdatedTime: latestUpdatedTime, | |||
| PageRecords: models.GetRepoStatisticByRawSql(generatePageSql(beginTime, endTime, latestDate, q, orderBy, page, pageSize)), | |||
| PageRecords: models.GetRepoStatisticByRawSql(sql), | |||
| } | |||
| ctx.JSON(http.StatusOK, projectsPeriodData) | |||
| } | |||
| func generateSqlByType(ctx *context.Context, beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { | |||
| sql := "" | |||
| if ctx.QueryTrim("type") == "all" { | |||
| sql = generateTypeAllSql(beginTime, endTime, latestDate, q, orderBy, page, pageSize) | |||
| } else { | |||
| sql = generatePageSql(beginTime, endTime, latestDate, q, orderBy, page, pageSize) | |||
| } | |||
| return sql | |||
| } | |||
| func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) { | |||
| recordBeginTime, err := getRecordBeginTime() | |||
| @@ -175,7 +186,7 @@ func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) { | |||
| writer.Write(allProjectsPeroidHeader(ctx)) | |||
| for i := 0; i <= totalPage; i++ { | |||
| pageRecords := models.GetRepoStatisticByRawSql(generatePageSql(beginTime, endTime, latestDate, q, orderBy, i+1, pageSize)) | |||
| pageRecords := models.GetRepoStatisticByRawSql(generateSqlByType(ctx, beginTime, endTime, latestDate, q, orderBy, i+1, pageSize)) | |||
| for _, record := range pageRecords { | |||
| e = writer.Write(allProjectsPeroidValues(record, ctx)) | |||
| if e != nil { | |||
| @@ -358,11 +369,11 @@ func generateTargetSql(beginTime time.Time, endTime time.Time, repoId int64) str | |||
| return sql | |||
| } | |||
| func generateCountSql(beginTime time.Time, endTime time.Time, yesterday string, q string) string { | |||
| func generateCountSql(beginTime time.Time, endTime time.Time, latestDate string, q string) string { | |||
| countSql := "SELECT count(*) FROM " + | |||
| "(SELECT repo_id FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | |||
| " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | |||
| "(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + yesterday + "') B" + | |||
| "(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + | |||
| " where A.repo_id=B.repo_id" | |||
| if q != "" { | |||
| countSql = countSql + " and B.name like '%" + q + "%'" | |||
| @@ -370,18 +381,34 @@ func generateCountSql(beginTime time.Time, endTime time.Time, yesterday string, | |||
| return countSql | |||
| } | |||
| func generatePageSql(beginTime time.Time, endTime time.Time, yesterday string, q string, orderBy string, page int, pageSize int) string { | |||
| countSql := "SELECT A.repo_id,name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + | |||
| func generateTypeAllSql(beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { | |||
| sql := "SELECT A.repo_id,name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + | |||
| "(SELECT repo_id,sum(num_visits) as num_visits " + | |||
| " FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | |||
| " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | |||
| "(SELECT repo_id,name,is_private,radar_total,num_watches,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor from public.repo_statistic where date='" + latestDate + "') B" + | |||
| " where A.repo_id=B.repo_id" | |||
| if q != "" { | |||
| sql = sql + " and name like '%" + q + "%'" | |||
| } | |||
| sql = sql + " order by " + orderBy + " desc,repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | |||
| return sql | |||
| } | |||
| func generatePageSql(beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { | |||
| sql := "SELECT A.repo_id,name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + | |||
| "(SELECT repo_id,sum(num_watches_added) as num_watches,sum(num_visits) as num_visits, sum(num_downloads_added) as num_downloads,sum(num_pulls_added) as num_pulls,sum(num_commits_added) as num_commits,sum(num_stars_added) as num_stars,sum(num_forks_added) num_forks,sum(num_issues_added) as num_issues,sum(num_closed_issues_added) as num_closed_issues,sum(num_contributor_added) as num_contributor " + | |||
| " FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + | |||
| " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + | |||
| "(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + yesterday + "') B" + | |||
| "(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + | |||
| " where A.repo_id=B.repo_id" | |||
| if q != "" { | |||
| countSql = countSql + " and B.name like '%" + q + "%'" | |||
| sql = sql + " and B.name like '%" + q + "%'" | |||
| } | |||
| countSql = countSql + " order by " + orderBy + " desc,A.repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | |||
| return countSql | |||
| sql = sql + " order by " + orderBy + " desc,A.repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) | |||
| return sql | |||
| } | |||
| func getOrderBy(ctx *context.Context) string { | |||