diff --git a/models/repo_statistic.go b/models/repo_statistic.go index df065bb79..0b2ded07a 100755 --- a/models/repo_statistic.go +++ b/models/repo_statistic.go @@ -12,6 +12,7 @@ type RepoStatistic struct { ID int64 `xorm:"pk autoincr" json:"-"` RepoID int64 `xorm:"unique(s) NOT NULL" json:"repo_id"` Name string `xorm:"INDEX" json:"name"` + OwnerName string `json:"ownerName"` IsPrivate bool `json:"isPrivate"` Date string `xorm:"unique(s) NOT NULL" json:"date"` NumWatches int64 `xorm:"NOT NULL DEFAULT 0" json:"watch"` diff --git a/routers/api/v1/repo/repo_dashbord.go b/routers/api/v1/repo/repo_dashbord.go index c08a7d8ca..0af607349 100644 --- a/routers/api/v1/repo/repo_dashbord.go +++ b/routers/api/v1/repo/repo_dashbord.go @@ -243,13 +243,20 @@ func allProjectsPeroidHeader(ctx *context.Context) []string { } func allProjectsPeroidValues(rs *models.RepoStatistic, ctx *context.Context) []string { - return []string{strconv.FormatInt(rs.RepoID, 10), rs.Name, getIsPrivateDisplay(rs.IsPrivate, ctx), strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), + return []string{strconv.FormatInt(rs.RepoID, 10), constructDistinctName(rs), getIsPrivateDisplay(rs.IsPrivate, ctx), strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), strconv.FormatInt(rs.NumVisits, 10), strconv.FormatInt(rs.NumDownloads, 10), strconv.FormatInt(rs.NumPulls, 10), strconv.FormatInt(rs.NumCommits, 10), strconv.FormatInt(rs.NumWatches, 10), strconv.FormatInt(rs.NumStars, 10), strconv.FormatInt(rs.NumForks, 10), strconv.FormatInt(rs.NumIssues, 10), strconv.FormatInt(rs.NumClosedIssues, 10), strconv.FormatInt(rs.NumContributor, 10), } } +func constructDistinctName(rs *models.RepoStatistic) string { + if rs.OwnerName == "" { + return rs.Name + } + return rs.OwnerName + "/" + rs.Name +} + func getIsPrivateDisplay(private bool, ctx *context.Context) string { if private { return ctx.Tr("admin.repos.yes") @@ -390,11 +397,11 @@ func generateCountSql(beginTime time.Time, endTime time.Time, latestDate string, } 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 " + + sql := "SELECT A.repo_id,name,owner_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" + + "(SELECT repo_id,name,owner_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 != "" { @@ -406,11 +413,11 @@ func generateTypeAllSql(beginTime time.Time, endTime time.Time, latestDate strin 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 " + + sql := "SELECT A.repo_id,name,owner_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='" + latestDate + "') B" + + "(SELECT repo_id,name,owner_name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + " where A.repo_id=B.repo_id" if q != "" { sql = sql + " and B.name like '%" + q + "%'" @@ -470,7 +477,7 @@ func getTimePeroid(ctx *context.Context, recordBeginTime time.Time) (time.Time, 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())+1) + 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" { diff --git a/routers/repo/repo_statistic.go b/routers/repo/repo_statistic.go index 99a83f714..59cb5e4c7 100755 --- a/routers/repo/repo_statistic.go +++ b/routers/repo/repo_statistic.go @@ -61,6 +61,8 @@ func RepoStatisticDaily(date string) { var issueFixedRate float32 if repo.NumIssues != 0 { issueFixedRate = float32(repo.NumClosedIssues) / float32(repo.NumIssues) + } else { + issueFixedRate = 1.0 } var numVersions int64 @@ -89,13 +91,15 @@ func RepoStatisticDaily(date string) { } repoStat := models.RepoStatistic{ - RepoID: repo.ID, - Date: date, - Name: repo.Name, - IsPrivate: repo.IsPrivate, - NumWatches: int64(repo.NumWatches), - NumStars: int64(repo.NumStars), - NumForks: int64(repo.NumForks), + RepoID: repo.ID, + Date: date, + Name: repo.Name, + IsPrivate: repo.IsPrivate, + OwnerName: repo.OwnerName, + NumWatches: int64(repo.NumWatches), + NumStars: int64(repo.NumStars), + NumForks: int64(repo.NumForks), + NumDownloads: repo.CloneCnt, NumComments: numComments, NumVisits: int64(numVisits),