@@ -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(generatePage Sql(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 = s ql + " 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 = s ql + " order by " + orderBy + " desc,A.repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize)
return s ql
}
func getOrderBy(ctx *context.Context) string {