|
- 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"`
- IsFork bool `json:"isFork"`
- RepoCreatedUnix timeutil.TimeStamp `xorm:"NOT NULL DEFAULT 0" 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:"model"`
- 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:"-"`
-
- NumDatasetFile int64 `xorm:"NOT NULL DEFAULT 0" json:"datasetFiles"`
- NumCloudbrain int64 `xorm:"NOT NULL DEFAULT 0" json:"cloudbrains"`
- NumModelConvert int64 `xorm:"NOT NULL DEFAULT 0" json:"modelConverts"`
-
- NumDatasetFileAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"`
- NumCloudbrainAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"-"`
- NumModelConvertAdded int64 `xorm:"NOT NULL DEFAULT 0" json:"- "`
- NumModelsAdded 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 getOpenIByRepoId(repoId int64) float64 {
- repoStatistic := new(RepoStatistic)
- has, err := xStatistic.Cols("radar_total").Where("repo_id=?", repoId).Desc("id").Limit(1).Get(repoStatistic)
- if !has || err != nil {
- return 0
- }
- return repoStatistic.RadarTotal
-
- }
-
- 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
- }
-
- func SumRepoStatColumn(begin, end time.Time, repoId int64, columnName string) (int64, error) {
- res, err := xStatistic.Where("created_unix <= ? and created_unix >= ? and repo_id = ? ", end.Unix(), begin.Unix(), repoId).Sum(&RepoStatistic{}, columnName)
- if err != nil {
- return 0, err
- }
- return int64(res), nil
- }
-
- func SumLastMonthNumVisits(repoId int64) (int64, error) {
- end := time.Now()
- begin := end.AddDate(0, 0, -30)
- return SumRepoStatColumn(begin, end, repoId, "num_visits")
- }
-
- func SumLastFourMonthNumCommits(repoId int64) (int64, error) {
- end := time.Now()
- begin := end.AddDate(0, 0, -120)
- return SumRepoStatColumn(begin, end, repoId, "num_commits_added")
- }
|