From 5218da537307976787d0d883423c88bf42fed5fb Mon Sep 17 00:00:00 2001 From: yanchao Date: Wed, 16 Mar 2022 17:24:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/repo.go | 15 +++ models/repo_statistic.go | 76 +++++++------- models/repo_statistic.go.bak | 190 +++++++++++++++++++++++++++++++++++ options/locale/locale_en-US.ini | 3 + options/locale/locale_zh-CN.ini | 3 + routers/api/v1/repo/repo_dashbord.go | 53 +++++----- 6 files changed, 277 insertions(+), 63 deletions(-) create mode 100644 models/repo_statistic.go.bak diff --git a/models/repo.go b/models/repo.go index 6b3df9fe0..2d1fdacfb 100755 --- a/models/repo.go +++ b/models/repo.go @@ -1547,6 +1547,21 @@ func GetAllRepositoriesCount() (int64, error) { return x.Count(repo) } +func GetAllPublicRepositoriesCount() (int64, error) { + repo := new(Repository) + return x.Where("is_private = ?", false).Count(repo) +} + +func GetAllMirrorRepositoriesCount() (int64, error) { + repo := new(Repository) + return x.Where("is_mirror = ?", true).Count(repo) +} + +func GetAllForkRepositoriesCount() (int64, error) { + repo := new(Repository) + return x.Where("is_fork = ?", true).Count(repo) +} + func GetAllRepositoriesSize() (int64, error) { return x.SumInt(&Repository{}, "size") } diff --git a/models/repo_statistic.go b/models/repo_statistic.go index 809cb26c4..f7c3029da 100755 --- a/models/repo_statistic.go +++ b/models/repo_statistic.go @@ -9,43 +9,45 @@ import ( // RepoStatistic statistic info of all repository 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"` - Alias string `xorm:"INDEX" json:"alias"` - OwnerName string `json:"ownerName"` - IsPrivate bool `json:"isPrivate"` - IsMirror bool `json:"isMirror"` - Date string `xorm:"unique(s) NOT NULL" json:"date"` - NumWatches int64 `xorm:"NOT NULL DEFAULT 0" json:"watch"` - NumWatchesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumStars int64 `xorm:"NOT NULL DEFAULT 0" json:"star"` - NumStarsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumForks int64 `xorm:"NOT NULL DEFAULT 0" json:"fork"` - NumForksAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumDownloads int64 `xorm:"NOT NULL DEFAULT 0" json:"download"` - NumDownloadsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumComments int64 `xorm:"NOT NULL DEFAULT 0" json:"comment"` - NumCommentsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumVisits int64 `xorm:"NOT NULL DEFAULT 0" json:"view"` - NumClosedIssues int64 `xorm:"NOT NULL DEFAULT 0" json:"issueClosed"` - NumClosedIssuesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumVersions int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumDevMonths int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - RepoSize int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - DatasetSize int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumModels int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumWikiViews int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumCommits int64 `xorm:"NOT NULL DEFAULT 0" json:"commit"` - NumCommitsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumIssues int64 `xorm:"NOT NULL DEFAULT 0" json:"issue"` - NumIssuesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumPulls int64 `xorm:"NOT NULL DEFAULT 0" json:"pr"` - NumPullsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - IssueFixedRate float32 `xorm:"NOT NULL" json:"issueClosedRatio"` - NumContributor int64 `xorm:"NOT NULL DEFAULT 0" json:"contributor"` - NumContributorAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumKeyContributor int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + ID int64 `xorm:"pk autoincr" json:"-"` + RepoID int64 `xorm:"unique(s) NOT NULL" json:"repo_id"` + Name string `xorm:"INDEX" json:"name"` + Alias string `xorm:"INDEX" json:"alias"` + OwnerName string `json:"ownerName"` + IsPrivate bool `json:"isPrivate"` + IsMirror bool `json:"isMirror"` + IsFork bool `json:"isFork"` + RepoCreatedUnix timeutil.TimeStamp `xorm:"NOT NULL" json:"createUnix"` + Date string `xorm:"unique(s) NOT NULL" json:"date"` + NumWatches int64 `xorm:"NOT NULL DEFAULT 0" json:"watch"` + NumWatchesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumStars int64 `xorm:"NOT NULL DEFAULT 0" json:"star"` + NumStarsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumForks int64 `xorm:"NOT NULL DEFAULT 0" json:"fork"` + NumForksAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumDownloads int64 `xorm:"NOT NULL DEFAULT 0" json:"download"` + NumDownloadsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumComments int64 `xorm:"NOT NULL DEFAULT 0" json:"comment"` + NumCommentsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumVisits int64 `xorm:"NOT NULL DEFAULT 0" json:"view"` + NumClosedIssues int64 `xorm:"NOT NULL DEFAULT 0" json:"issueClosed"` + NumClosedIssuesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumVersions int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumDevMonths int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + RepoSize int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + DatasetSize int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumModels int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumWikiViews int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumCommits int64 `xorm:"NOT NULL DEFAULT 0" json:"commit"` + NumCommitsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumIssues int64 `xorm:"NOT NULL DEFAULT 0" json:"issue"` + NumIssuesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumPulls int64 `xorm:"NOT NULL DEFAULT 0" json:"pr"` + NumPullsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + IssueFixedRate float32 `xorm:"NOT NULL" json:"issueClosedRatio"` + NumContributor int64 `xorm:"NOT NULL DEFAULT 0" json:"contributor"` + NumContributorAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumKeyContributor int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` NumContributorsGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` NumCommitsGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` diff --git a/models/repo_statistic.go.bak b/models/repo_statistic.go.bak new file mode 100644 index 000000000..809cb26c4 --- /dev/null +++ b/models/repo_statistic.go.bak @@ -0,0 +1,190 @@ +package models + +import ( + "fmt" + "time" + + "code.gitea.io/gitea/modules/timeutil" +) + +// RepoStatistic statistic info of all repository +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"` + Alias string `xorm:"INDEX" json:"alias"` + OwnerName string `json:"ownerName"` + IsPrivate bool `json:"isPrivate"` + IsMirror bool `json:"isMirror"` + Date string `xorm:"unique(s) NOT NULL" json:"date"` + NumWatches int64 `xorm:"NOT NULL DEFAULT 0" json:"watch"` + NumWatchesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumStars int64 `xorm:"NOT NULL DEFAULT 0" json:"star"` + NumStarsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumForks int64 `xorm:"NOT NULL DEFAULT 0" json:"fork"` + NumForksAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumDownloads int64 `xorm:"NOT NULL DEFAULT 0" json:"download"` + NumDownloadsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumComments int64 `xorm:"NOT NULL DEFAULT 0" json:"comment"` + NumCommentsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumVisits int64 `xorm:"NOT NULL DEFAULT 0" json:"view"` + NumClosedIssues int64 `xorm:"NOT NULL DEFAULT 0" json:"issueClosed"` + NumClosedIssuesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumVersions int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumDevMonths int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + RepoSize int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + DatasetSize int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumModels int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumWikiViews int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumCommits int64 `xorm:"NOT NULL DEFAULT 0" json:"commit"` + NumCommitsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumIssues int64 `xorm:"NOT NULL DEFAULT 0" json:"issue"` + NumIssuesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumPulls int64 `xorm:"NOT NULL DEFAULT 0" json:"pr"` + NumPullsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + IssueFixedRate float32 `xorm:"NOT NULL" json:"issueClosedRatio"` + NumContributor int64 `xorm:"NOT NULL DEFAULT 0" json:"contributor"` + NumContributorAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumKeyContributor int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + + NumContributorsGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumCommitsGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumCommitLinesGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumIssuesGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + NumCommentsGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` + + Impact float64 `xorm:"NOT NULL DEFAULT 0" json:"impact"` + Completeness float64 `xorm:"NOT NULL DEFAULT 0" json:"completeness"` + Liveness float64 `xorm:"NOT NULL DEFAULT 0" json:"liveness"` + ProjectHealth float64 `xorm:"NOT NULL DEFAULT 0" json:"projectHealth"` + TeamHealth float64 `xorm:"NOT NULL DEFAULT 0" json:"teamHealth"` + Growth float64 `xorm:"NOT NULL DEFAULT 0" json:"growth"` + RadarTotal float64 `xorm:"NOT NULL DEFAULT 0" json:"openi"` + CreatedUnix timeutil.TimeStamp `xorm:"INDEX created" json:"-"` + UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated" json:"-"` +} + +func (repo *RepoStatistic) DisplayName() string { + if repo.Alias == "" { + return repo.Name + } + return repo.Alias +} + +func DeleteRepoStatDaily(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(&RepoStatistic{}); 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 CountRepoStatByRawSql(sql string) (int64, error) { + + return xStatistic.SQL(sql).Count() + +} + +func GetRepoStatisticByRawSql(sql string) []*RepoStatistic { + repoStatistics := make([]*RepoStatistic, 0) + xStatistic.SQL(sql).Find(&repoStatistics) + return repoStatistics +} + +func GetRepoStatLastUpdatedTime(repoId ...string) (string, string, error) { + + repoStatistic := new(RepoStatistic) + var has bool + var err error + if len(repoId) == 0 { + has, err = xStatistic.Desc("created_unix").Limit(1).Cols("created_unix", "date").Get(repoStatistic) + + } else { + has, err = xStatistic.Where("repo_id=?", repoId[0]).Desc("created_unix").Limit(1).Cols("created_unix", "date").Get(repoStatistic) + } + + if err != nil { + return "", "", err + } else { + if has { + return repoStatistic.CreatedUnix.Format("2006-01-02 15:04:05"), repoStatistic.Date, nil + } else { + return "", "", fmt.Errorf("Can not get the latest record.") + } + } + +} + +func GetRepoStatisticByDateAndRepoId(date string, repoId int64) (*RepoStatistic, error) { + repoStatistic := new(RepoStatistic) + has, err := xStatistic.Where("date=? and repo_id=?", date, repoId).Get(repoStatistic) + if err != nil { + return nil, err + } else { + if has { + return repoStatistic, nil + } else { + return nil, fmt.Errorf("The num of return records is 0.") + } + } + +} + +func GetRepoStatisticByDate(date string, repoId int64) ([]*RepoStatistic, error) { + repoStatistics := make([]*RepoStatistic, 0) + err := xStatistic.Where("date = ? and repo_id=?", date, repoId).Find(&repoStatistics) + return repoStatistics, err + +} + +func GetOneRepoStatisticBeforeTime(time time.Time) (*RepoStatistic, error) { + repoStatistics := make([]*RepoStatistic, 0) + err := xStatistic.Where("created_unix >= ?", time.Unix()).OrderBy("created_unix").Limit(1).Find(&repoStatistics) + if err != nil { + return nil, err + } else { + if len(repoStatistics) == 0 { + return nil, fmt.Errorf("the repo statistic record count is 0") + } else { + return repoStatistics[0], nil + } + } + +} + +func InsertRepoStat(repoStat *RepoStatistic) (int64, error) { + return xStatistic.Insert(repoStat) +} + +func RestoreRepoStatFork(numForks int64, repoId int64) error { + sql := "update repo_statistic set num_forks=? where repo_id=?" + + _, err := xStatistic.Exec(sql, numForks, repoId) + return err +} + +func UpdateRepoStat(repoStat *RepoStatistic) error { + sql := "update repo_statistic set impact=?,completeness=?,liveness=?,project_health=?,team_health=?,growth=?,radar_total=? where repo_id=? and date=?" + + _, err := xStatistic.Exec(sql, repoStat.Impact, repoStat.Completeness, repoStat.Liveness, repoStat.ProjectHealth, repoStat.TeamHealth, repoStat.Growth, repoStat.RadarTotal, repoStat.RepoID, repoStat.Date) + return err +} + +func UpdateRepoStatVisits(repoStat *RepoStatistic) error { + sql := "update repo_statistic set num_visits=? where repo_id=? and date=?" + + _, err := xStatistic.Exec(sql, repoStat.NumVisits, repoStat.RepoID, repoStat.Date) + return err +} diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index cb8fd7e15..226fa2147 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2348,6 +2348,9 @@ repos.size = Size repos.id=ID repos.projectName=Project Name repos.isPrivate=Private +repos.create=Project Create Time +repos.isFork=Fork +repos.isMirror=Mirror repos.openi=OpenI repos.visit=Visit repos.download=Code Download diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index b356e0d5b..ce5367d98 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -2356,6 +2356,9 @@ repos.size=大小 repos.id=ID repos.projectName=项目名称 repos.isPrivate=私有 +repos.create=项目创建时间 +repos.isFork=派生 +repos.isMirror=镜像 repos.openi=OpenI指数 repos.visit=浏览量 repos.download=代码下载量 diff --git a/routers/api/v1/repo/repo_dashbord.go b/routers/api/v1/repo/repo_dashbord.go index 959fb4c9f..b1f344d55 100644 --- a/routers/api/v1/repo/repo_dashbord.go +++ b/routers/api/v1/repo/repo_dashbord.go @@ -21,6 +21,7 @@ import ( const DEFAULT_PAGE_SIZE = 10 const DATE_FORMAT = "2006-01-02" const EXCEL_DATE_FORMAT = "20060102" +const CREATE_TIME_FORMAT = "2006/01/02 15:04:05" type ProjectsPeriodData struct { RecordBeginTime string `json:"recordBeginTime"` @@ -291,41 +292,41 @@ func getFileName(ctx *context.Context, beginTime time.Time, endTime time.Time, p func allProjectsPeroidHeader(ctx *context.Context) map[string]string { - return map[string]string{"A1": ctx.Tr("admin.repos.id"), "B1": ctx.Tr("admin.repos.projectName"), "C1": ctx.Tr("repo.owner"), "D1": ctx.Tr("admin.repos.isPrivate"), "E1": ctx.Tr("admin.repos.openi"), "F1": ctx.Tr("admin.repos.visit"), "G1": ctx.Tr("admin.repos.download"), "H1": ctx.Tr("admin.repos.pr"), "I1": ctx.Tr("admin.repos.commit"), - "J1": ctx.Tr("admin.repos.watches"), "K1": ctx.Tr("admin.repos.stars"), "L1": ctx.Tr("admin.repos.forks"), "M1": ctx.Tr("admin.repos.issues"), "N1": ctx.Tr("admin.repos.closedIssues"), "O1": ctx.Tr("admin.repos.contributor")} + return map[string]string{"A1": ctx.Tr("admin.repos.id"), "B1": ctx.Tr("admin.repos.projectName"), "C1": ctx.Tr("repo.owner"), "D1": ctx.Tr("admin.repos.isPrivate"), "E1": ctx.Tr("admin.repos.isFork"), "F1": ctx.Tr("admin.repos.isMirror"), "G1": ctx.Tr("admin.repos.openi"), "H1": ctx.Tr("admin.repos.visit"), "I1": ctx.Tr("admin.repos.download"), "J1": ctx.Tr("admin.repos.pr"), "K1": ctx.Tr("admin.repos.commit"), + "L1": ctx.Tr("admin.repos.watches"), "M1": ctx.Tr("admin.repos.stars"), "N1": ctx.Tr("admin.repos.forks"), "O1": ctx.Tr("admin.repos.issues"), "P1": ctx.Tr("admin.repos.closedIssues"), "Q1": ctx.Tr("admin.repos.contributor"), "R1": ctx.Tr("admin.repos.create")} } func allProjectsPeroidValues(row int, rs *models.RepoStatistic, ctx *context.Context) map[string]string { - return map[string]string{getCellName("A", row): strconv.FormatInt(rs.RepoID, 10), getCellName("B", row): rs.DisplayName(), getCellName("C", row): rs.OwnerName, getCellName("D", row): getIsPrivateDisplay(rs.IsPrivate, ctx), getCellName("E", row): strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), - getCellName("F", row): strconv.FormatInt(rs.NumVisits, 10), getCellName("G", row): strconv.FormatInt(rs.NumDownloads, 10), getCellName("H", row): strconv.FormatInt(rs.NumPulls, 10), getCellName("I", row): strconv.FormatInt(rs.NumCommits, 10), - getCellName("J", row): strconv.FormatInt(rs.NumWatches, 10), getCellName("K", row): strconv.FormatInt(rs.NumStars, 10), getCellName("L", row): strconv.FormatInt(rs.NumForks, 10), getCellName("M", row): strconv.FormatInt(rs.NumIssues, 10), - getCellName("N", row): strconv.FormatInt(rs.NumClosedIssues, 10), getCellName("O", row): strconv.FormatInt(rs.NumContributor, 10), + return map[string]string{getCellName("A", row): strconv.FormatInt(rs.RepoID, 10), getCellName("B", row): rs.DisplayName(), getCellName("C", row): rs.OwnerName, getCellName("D", row): getBoolDisplay(rs.IsPrivate, ctx), getCellName("E", row): getBoolDisplay(rs.IsFork, ctx), getCellName("F", row): getBoolDisplay(rs.IsMirror, ctx), getCellName("G", row): strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), + getCellName("H", row): strconv.FormatInt(rs.NumVisits, 10), getCellName("I", row): strconv.FormatInt(rs.NumDownloads, 10), getCellName("J", row): strconv.FormatInt(rs.NumPulls, 10), getCellName("K", row): strconv.FormatInt(rs.NumCommits, 10), + getCellName("L", row): strconv.FormatInt(rs.NumWatches, 10), getCellName("M", row): strconv.FormatInt(rs.NumStars, 10), getCellName("N", row): strconv.FormatInt(rs.NumForks, 10), getCellName("O", row): strconv.FormatInt(rs.NumIssues, 10), + getCellName("P", row): strconv.FormatInt(rs.NumClosedIssues, 10), getCellName("Q", row): strconv.FormatInt(rs.NumContributor, 10), getCellName("R", row): time.Unix(int64(rs.RepoCreatedUnix), 0).Format(CREATE_TIME_FORMAT), } } func allProjectsOpenIHeader() map[string]string { - return map[string]string{"A1": "ID", "B1": "项目名称", "C1": "拥有者", "D1": "是否私有", "E1": "OpenI指数", - "F1": "影响力", "G1": "成熟度", "H1": "活跃度", "I1": "项目健康度", "J1": "团队健康度", "K1": "项目发展趋势", - "L1": "关注数", "M1": "点赞数", "N1": "派生数", "O1": "代码下载量", "P1": "评论数", "Q1": "浏览量", "R1": "已解决任务数", "S1": "版本发布数量", "T1": "有效开发年龄", - "U1": "数据集", "V1": "模型数", "W1": "百科页面数量", "X1": "提交数", "Y1": "任务数", "Z1": "PR数", "AA1": "版本发布数量", "AB1": "任务完成比例", "AC1": "贡献者数", "AD1": "关键贡献者数", - "AE1": "新人增长量", "AF1": "代码规模增长量", "AG1": "任务增长量", "AH1": "新人增长量", "AI1": "提交增长量", "AJ1": "评论增长量", + return map[string]string{"A1": "ID", "B1": "项目名称", "C1": "拥有者", "D1": "私有", "E1": "迁移", "F1": "镜像", "G1": "OpenI指数", + "H1": "影响力", "I1": "成熟度", "J1": "活跃度", "K1": "项目健康度", "L1": "团队健康度", "M1": "项目发展趋势", + "N1": "关注数", "O1": "点赞数", "P1": "派生数", "Q1": "代码下载量", "R1": "评论数", "S1": "浏览量", "T1": "已解决任务数", "U1": "版本发布数量", "V1": "有效开发年龄", + "W1": "数据集", "X1": "模型数", "Y1": "百科页面数量", "Z1": "提交数", "AA1": "任务数", "AB1": "PR数", "AC1": "版本发布数量", "AD1": "任务完成比例", "AE1": "贡献者数", "AF1": "关键贡献者数", + "AG1": "新人增长量", "AH1": "代码规模增长量", "AI1": "任务增长量", "AJ1": "新人增长量", "AK1": "提交增长量", "AL1": "评论增长量", "AM1": "项目创建时间", } } func allProjectsOpenIValues(row int, rs *models.RepoStatistic, ctx *context.Context) map[string]string { - return map[string]string{getCellName("A", row): strconv.FormatInt(rs.RepoID, 10), getCellName("B", row): rs.DisplayName(), getCellName("C", row): rs.OwnerName, getCellName("D", row): getIsPrivateDisplay(rs.IsPrivate, ctx), getCellName("E", row): strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), - getCellName("F", row): strconv.FormatFloat(rs.Impact, 'f', 2, 64), getCellName("G", row): strconv.FormatFloat(rs.Completeness, 'f', 2, 64), getCellName("H", row): strconv.FormatFloat(rs.Liveness, 'f', 2, 64), getCellName("I", row): strconv.FormatFloat(rs.ProjectHealth, 'f', 2, 64), getCellName("J", row): strconv.FormatFloat(rs.TeamHealth, 'f', 2, 64), getCellName("K", row): strconv.FormatFloat(rs.Growth, 'f', 2, 64), - getCellName("L", row): strconv.FormatInt(rs.NumWatches, 10), getCellName("M", row): strconv.FormatInt(rs.NumStars, 10), getCellName("N", row): strconv.FormatInt(rs.NumForks, 10), getCellName("O", row): strconv.FormatInt(rs.NumDownloads, 10), + return map[string]string{getCellName("A", row): strconv.FormatInt(rs.RepoID, 10), getCellName("B", row): rs.DisplayName(), getCellName("C", row): rs.OwnerName, getCellName("D", row): getBoolDisplay(rs.IsPrivate, ctx), getCellName("E", row): getBoolDisplay(rs.IsFork, ctx), getCellName("F", row): getBoolDisplay(rs.IsMirror, ctx), getCellName("G", row): strconv.FormatFloat(rs.RadarTotal, 'f', 2, 64), + getCellName("H", row): strconv.FormatFloat(rs.Impact, 'f', 2, 64), getCellName("I", row): strconv.FormatFloat(rs.Completeness, 'f', 2, 64), getCellName("J", row): strconv.FormatFloat(rs.Liveness, 'f', 2, 64), getCellName("K", row): strconv.FormatFloat(rs.ProjectHealth, 'f', 2, 64), getCellName("L", row): strconv.FormatFloat(rs.TeamHealth, 'f', 2, 64), getCellName("M", row): strconv.FormatFloat(rs.Growth, 'f', 2, 64), + getCellName("N", row): strconv.FormatInt(rs.NumWatches, 10), getCellName("O", row): strconv.FormatInt(rs.NumStars, 10), getCellName("P", row): strconv.FormatInt(rs.NumForks, 10), getCellName("Q", row): strconv.FormatInt(rs.NumDownloads, 10), - getCellName("P", row): strconv.FormatInt(rs.NumComments, 10), getCellName("Q", row): strconv.FormatInt(rs.NumVisits, 10), getCellName("R", row): strconv.FormatInt(rs.NumClosedIssues, 10), getCellName("S", row): strconv.FormatInt(rs.NumVersions, 10), - getCellName("T", row): strconv.FormatInt(rs.NumDevMonths, 10), getCellName("U", row): strconv.FormatInt(rs.DatasetSize, 10), getCellName("V", row): strconv.FormatInt(rs.NumModels, 10), getCellName("W", row): strconv.FormatInt(rs.NumWikiViews, 10), - getCellName("X", row): strconv.FormatInt(rs.NumCommits, 10), getCellName("Y", row): strconv.FormatInt(rs.NumIssues, 10), getCellName("Z", row): strconv.FormatInt(rs.NumPulls, 10), getCellName("AA", row): strconv.FormatInt(rs.NumVersions, 10), - getCellName("AB", row): strconv.FormatFloat(float64(rs.IssueFixedRate), 'f', 2, 64), getCellName("AC", row): strconv.FormatInt(rs.NumContributor, 10), getCellName("AD", row): strconv.FormatInt(rs.NumKeyContributor, 10), getCellName("AE", row): strconv.FormatInt(rs.NumContributorsGrowth, 10), - getCellName("AF", row): strconv.FormatInt(rs.NumCommitLinesGrowth, 10), getCellName("AG", row): strconv.FormatInt(rs.NumIssuesGrowth, 10), getCellName("AH", row): strconv.FormatInt(rs.NumContributorsGrowth, 10), getCellName("AI", row): strconv.FormatInt(rs.NumCommitsGrowth, 10), getCellName("AJ", row): strconv.FormatInt(rs.NumCommentsGrowth, 10), + getCellName("R", row): strconv.FormatInt(rs.NumComments, 10), getCellName("S", row): strconv.FormatInt(rs.NumVisits, 10), getCellName("T", row): strconv.FormatInt(rs.NumClosedIssues, 10), getCellName("U", row): strconv.FormatInt(rs.NumVersions, 10), + getCellName("V", row): strconv.FormatInt(rs.NumDevMonths, 10), getCellName("W", row): strconv.FormatInt(rs.DatasetSize, 10), getCellName("X", row): strconv.FormatInt(rs.NumModels, 10), getCellName("Y", row): strconv.FormatInt(rs.NumWikiViews, 10), + getCellName("Z", row): strconv.FormatInt(rs.NumCommits, 10), getCellName("AA", row): strconv.FormatInt(rs.NumIssues, 10), getCellName("AB", row): strconv.FormatInt(rs.NumPulls, 10), getCellName("AC", row): strconv.FormatInt(rs.NumVersions, 10), + getCellName("AD", row): strconv.FormatFloat(float64(rs.IssueFixedRate), 'f', 2, 64), getCellName("AE", row): strconv.FormatInt(rs.NumContributor, 10), getCellName("AF", row): strconv.FormatInt(rs.NumKeyContributor, 10), getCellName("AG", row): strconv.FormatInt(rs.NumContributorsGrowth, 10), + getCellName("AH", row): strconv.FormatInt(rs.NumCommitLinesGrowth, 10), getCellName("AI", row): strconv.FormatInt(rs.NumIssuesGrowth, 10), getCellName("AJ", row): strconv.FormatInt(rs.NumContributorsGrowth, 10), getCellName("AK", row): strconv.FormatInt(rs.NumCommitsGrowth, 10), getCellName("AL", row): strconv.FormatInt(rs.NumCommentsGrowth, 10), getCellName("AM", row): time.Unix(int64(rs.RepoCreatedUnix), 0).Format(CREATE_TIME_FORMAT), } } @@ -334,8 +335,8 @@ func getCellName(col string, row int) string { return col + strconv.Itoa(row) } -func getIsPrivateDisplay(private bool, ctx *context.Context) string { - if private { +func getBoolDisplay(value bool, ctx *context.Context) string { + if value { return ctx.Tr("admin.repos.yes") } else { return ctx.Tr("admin.repos.no") @@ -482,11 +483,11 @@ func generateOpenICountSql(latestDate string) 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,alias,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 " + + sql := "SELECT A.repo_id,name,alias,owner_name,is_private,is_mirror,is_fork,repo_created_unix,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,alias,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" + + "(SELECT repo_id,name,alias,owner_name,is_private,is_mirror,is_fork,repo_created_unix,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 != "" { @@ -497,7 +498,7 @@ func generateTypeAllSql(beginTime time.Time, endTime time.Time, latestDate strin } func generateTypeAllOpenISql(latestDate string, page int, pageSize int) string { - sql := "SELECT id, repo_id, date, num_watches, num_stars, num_forks, num_downloads, num_comments, num_visits, num_closed_issues, num_versions, num_dev_months, repo_size, dataset_size, num_models, num_wiki_views, num_commits, num_issues, num_pulls, issue_fixed_rate, num_contributor, num_key_contributor, num_contributors_growth, num_commits_growth, num_commit_lines_growth, num_issues_growth, num_comments_growth, impact, completeness, liveness, project_health, team_health, growth, radar_total, name,alias, is_private, owner_name FROM " + + sql := "SELECT id, repo_id, date, num_watches, num_stars, num_forks, num_downloads, num_comments, num_visits, num_closed_issues, num_versions, num_dev_months, repo_size, dataset_size, num_models, num_wiki_views, num_commits, num_issues, num_pulls, issue_fixed_rate, num_contributor, num_key_contributor, num_contributors_growth, num_commits_growth, num_commit_lines_growth, num_issues_growth, num_comments_growth, impact, completeness, liveness, project_health, team_health, growth, radar_total, name,alias, is_private,is_mirror,is_fork,repo_created_unix, owner_name FROM " + " public.repo_statistic where date='" + latestDate + "'" sql = sql + " order by radar_total desc,repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) @@ -506,11 +507,11 @@ func generateTypeAllOpenISql(latestDate string, page int, pageSize int) string { 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,alias,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 " + + sql := "SELECT A.repo_id,name,alias,owner_name,is_private,is_mirror,is_fork,repo_created_unix,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,alias,owner_name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + + "(SELECT repo_id,name,alias,owner_name,is_private,is_mirror,is_fork,repo_created_unix,radar_total from public.repo_statistic where date='" + latestDate + "') B" + " where A.repo_id=B.repo_id" if q != "" { sql = sql + " and LOWER(B.alias) like '%" + strings.ToLower(q) + "%'" From b9183e58a2443f4b182ce2eecf0c0b738df9a1ff Mon Sep 17 00:00:00 2001 From: yanchao Date: Thu, 17 Mar 2022 11:38:40 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/summary_statistic.go | 5 +++++ routers/repo/repo_statistic.go | 2 ++ routers/repo/repo_summary_statistic.go | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/models/summary_statistic.go b/models/summary_statistic.go index 0addd472b..e5cf54b75 100644 --- a/models/summary_statistic.go +++ b/models/summary_statistic.go @@ -40,6 +40,11 @@ type SummaryStatistic struct { NumRepoLeagueLearn int `xorm:"NOT NULL DEFAULT 0"` NumRepoDataMining int `xorm:"NOT NULL DEFAULT 0"` NumRepoRISC int `xorm:"NOT NULL DEFAULT 0"` + NumRepoPublic int64 `xorm:"NOT NULL DEFAULT 0"` + NumRepoPrivate int64 `xorm:"NOT NULL DEFAULT 0"` + NumRepoFork int64 `xorm:"NOT NULL DEFAULT 0"` + NumRepoMirror int64 `xorm:"NOT NULL DEFAULT 0"` + NumRepoSelf int64 `xorm:"NOT NULL DEFAULT 0"` CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` } diff --git a/routers/repo/repo_statistic.go b/routers/repo/repo_statistic.go index 06f45e608..468e6fa85 100755 --- a/routers/repo/repo_statistic.go +++ b/routers/repo/repo_statistic.go @@ -110,6 +110,8 @@ func RepoStatisticDaily(date string) { Alias: repo.Alias, IsPrivate: repo.IsPrivate, IsMirror: repo.IsMirror, + IsFork: repo.IsFork, + RepoCreatedUnix: repo.CreatedUnix, OwnerName: repo.OwnerName, NumWatches: int64(repo.NumWatches), NumStars: int64(repo.NumStars), diff --git a/routers/repo/repo_summary_statistic.go b/routers/repo/repo_summary_statistic.go index 53270664c..3af31737c 100644 --- a/routers/repo/repo_summary_statistic.go +++ b/routers/repo/repo_summary_statistic.go @@ -39,6 +39,27 @@ func SummaryStatisticDaily(date string) { log.Error("can not get repository number", err) repositoryNumer = 0 } + + publicRepositoryNumer, err := models.GetAllPublicRepositoriesCount() + if err != nil { + log.Error("can not get public repository number", err) + publicRepositoryNumer = 0 + } + + privateRepositoryNumer := repositoryNumer - publicRepositoryNumer + + mirrorRepositoryNumber, err := models.GetAllMirrorRepositoriesCount() + if err != nil { + log.Error("can not get mirror repository number", err) + mirrorRepositoryNumber = 0 + } + forkRepositoryNumber, err := models.GetAllForkRepositoriesCount() + if err != nil { + log.Error("can not get fork mirror repository number", err) + forkRepositoryNumber = 0 + } + selfRepositoryNumber := repositoryNumer - mirrorRepositoryNumber - forkRepositoryNumber + //repository size repositorySize, err := models.GetAllRepositoriesSize() if err != nil { @@ -73,6 +94,11 @@ func SummaryStatisticDaily(date string) { DatasetSize: allDatasetSize, NumOrganizations: organizationNumber, NumRepos: repositoryNumer, + NumRepoFork: forkRepositoryNumber, + NumRepoMirror: mirrorRepositoryNumber, + NumRepoPrivate: privateRepositoryNumer, + NumRepoPublic: publicRepositoryNumer, + NumRepoSelf: selfRepositoryNumber, NumRepoBigModel: topicsCount[0], NumRepoAI: topicsCount[1], NumRepoVision: topicsCount[2], From de07e1248f05f75eb04b582de7b098346791418b Mon Sep 17 00:00:00 2001 From: yanchao Date: Thu, 17 Mar 2022 11:41:35 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/repo_statistic.go.bak | 190 ------------------------------------------- 1 file changed, 190 deletions(-) delete mode 100644 models/repo_statistic.go.bak diff --git a/models/repo_statistic.go.bak b/models/repo_statistic.go.bak deleted file mode 100644 index 809cb26c4..000000000 --- a/models/repo_statistic.go.bak +++ /dev/null @@ -1,190 +0,0 @@ -package models - -import ( - "fmt" - "time" - - "code.gitea.io/gitea/modules/timeutil" -) - -// RepoStatistic statistic info of all repository -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"` - Alias string `xorm:"INDEX" json:"alias"` - OwnerName string `json:"ownerName"` - IsPrivate bool `json:"isPrivate"` - IsMirror bool `json:"isMirror"` - Date string `xorm:"unique(s) NOT NULL" json:"date"` - NumWatches int64 `xorm:"NOT NULL DEFAULT 0" json:"watch"` - NumWatchesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumStars int64 `xorm:"NOT NULL DEFAULT 0" json:"star"` - NumStarsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumForks int64 `xorm:"NOT NULL DEFAULT 0" json:"fork"` - NumForksAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumDownloads int64 `xorm:"NOT NULL DEFAULT 0" json:"download"` - NumDownloadsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumComments int64 `xorm:"NOT NULL DEFAULT 0" json:"comment"` - NumCommentsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumVisits int64 `xorm:"NOT NULL DEFAULT 0" json:"view"` - NumClosedIssues int64 `xorm:"NOT NULL DEFAULT 0" json:"issueClosed"` - NumClosedIssuesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumVersions int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumDevMonths int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - RepoSize int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - DatasetSize int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumModels int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumWikiViews int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumCommits int64 `xorm:"NOT NULL DEFAULT 0" json:"commit"` - NumCommitsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumIssues int64 `xorm:"NOT NULL DEFAULT 0" json:"issue"` - NumIssuesAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumPulls int64 `xorm:"NOT NULL DEFAULT 0" json:"pr"` - NumPullsAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - IssueFixedRate float32 `xorm:"NOT NULL" json:"issueClosedRatio"` - NumContributor int64 `xorm:"NOT NULL DEFAULT 0" json:"contributor"` - NumContributorAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumKeyContributor int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - - NumContributorsGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumCommitsGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumCommitLinesGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumIssuesGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - NumCommentsGrowth int64 `xorm:"NOT NULL DEFAULT 0" json:"-"` - - Impact float64 `xorm:"NOT NULL DEFAULT 0" json:"impact"` - Completeness float64 `xorm:"NOT NULL DEFAULT 0" json:"completeness"` - Liveness float64 `xorm:"NOT NULL DEFAULT 0" json:"liveness"` - ProjectHealth float64 `xorm:"NOT NULL DEFAULT 0" json:"projectHealth"` - TeamHealth float64 `xorm:"NOT NULL DEFAULT 0" json:"teamHealth"` - Growth float64 `xorm:"NOT NULL DEFAULT 0" json:"growth"` - RadarTotal float64 `xorm:"NOT NULL DEFAULT 0" json:"openi"` - CreatedUnix timeutil.TimeStamp `xorm:"INDEX created" json:"-"` - UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated" json:"-"` -} - -func (repo *RepoStatistic) DisplayName() string { - if repo.Alias == "" { - return repo.Name - } - return repo.Alias -} - -func DeleteRepoStatDaily(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(&RepoStatistic{}); 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 CountRepoStatByRawSql(sql string) (int64, error) { - - return xStatistic.SQL(sql).Count() - -} - -func GetRepoStatisticByRawSql(sql string) []*RepoStatistic { - repoStatistics := make([]*RepoStatistic, 0) - xStatistic.SQL(sql).Find(&repoStatistics) - return repoStatistics -} - -func GetRepoStatLastUpdatedTime(repoId ...string) (string, string, error) { - - repoStatistic := new(RepoStatistic) - var has bool - var err error - if len(repoId) == 0 { - has, err = xStatistic.Desc("created_unix").Limit(1).Cols("created_unix", "date").Get(repoStatistic) - - } else { - has, err = xStatistic.Where("repo_id=?", repoId[0]).Desc("created_unix").Limit(1).Cols("created_unix", "date").Get(repoStatistic) - } - - if err != nil { - return "", "", err - } else { - if has { - return repoStatistic.CreatedUnix.Format("2006-01-02 15:04:05"), repoStatistic.Date, nil - } else { - return "", "", fmt.Errorf("Can not get the latest record.") - } - } - -} - -func GetRepoStatisticByDateAndRepoId(date string, repoId int64) (*RepoStatistic, error) { - repoStatistic := new(RepoStatistic) - has, err := xStatistic.Where("date=? and repo_id=?", date, repoId).Get(repoStatistic) - if err != nil { - return nil, err - } else { - if has { - return repoStatistic, nil - } else { - return nil, fmt.Errorf("The num of return records is 0.") - } - } - -} - -func GetRepoStatisticByDate(date string, repoId int64) ([]*RepoStatistic, error) { - repoStatistics := make([]*RepoStatistic, 0) - err := xStatistic.Where("date = ? and repo_id=?", date, repoId).Find(&repoStatistics) - return repoStatistics, err - -} - -func GetOneRepoStatisticBeforeTime(time time.Time) (*RepoStatistic, error) { - repoStatistics := make([]*RepoStatistic, 0) - err := xStatistic.Where("created_unix >= ?", time.Unix()).OrderBy("created_unix").Limit(1).Find(&repoStatistics) - if err != nil { - return nil, err - } else { - if len(repoStatistics) == 0 { - return nil, fmt.Errorf("the repo statistic record count is 0") - } else { - return repoStatistics[0], nil - } - } - -} - -func InsertRepoStat(repoStat *RepoStatistic) (int64, error) { - return xStatistic.Insert(repoStat) -} - -func RestoreRepoStatFork(numForks int64, repoId int64) error { - sql := "update repo_statistic set num_forks=? where repo_id=?" - - _, err := xStatistic.Exec(sql, numForks, repoId) - return err -} - -func UpdateRepoStat(repoStat *RepoStatistic) error { - sql := "update repo_statistic set impact=?,completeness=?,liveness=?,project_health=?,team_health=?,growth=?,radar_total=? where repo_id=? and date=?" - - _, err := xStatistic.Exec(sql, repoStat.Impact, repoStat.Completeness, repoStat.Liveness, repoStat.ProjectHealth, repoStat.TeamHealth, repoStat.Growth, repoStat.RadarTotal, repoStat.RepoID, repoStat.Date) - return err -} - -func UpdateRepoStatVisits(repoStat *RepoStatistic) error { - sql := "update repo_statistic set num_visits=? where repo_id=? and date=?" - - _, err := xStatistic.Exec(sql, repoStat.NumVisits, repoStat.RepoID, repoStat.Date) - return err -}