You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

repo_statistic.go 3.7 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package repo
  2. import (
  3. "time"
  4. "code.gitea.io/gitea/models"
  5. "code.gitea.io/gitea/modules/log"
  6. "code.gitea.io/gitea/modules/repository"
  7. )
  8. //auto daily or manually
  9. func RepoStatisticAuto() {
  10. log.Info("", time.Now())
  11. yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  12. RepoStatisticDaily(yesterday)
  13. }
  14. func RepoStatisticDaily(date string) {
  15. log.Info("%s", date)
  16. if err := models.DeleteRepoStatDaily(date); err != nil {
  17. log.Error("DeleteRepoStatDaily failed: %v", err.Error())
  18. return
  19. }
  20. repos, err := models.GetAllRepositories()
  21. if err != nil {
  22. log.Error("GetAllRepositories failed: %v", err.Error())
  23. return
  24. }
  25. for _, repo := range repos {
  26. log.Info("start statistic: %s", repo.Name)
  27. var numDevMonths,numWikiViews,numContributor,numKeyContributor int64
  28. repoGitStat, err := models.GetRepoKPIStats(repo)
  29. if err != nil {
  30. log.Error("GetRepoKPIStats failed: %s", repo.Name)
  31. } else {
  32. numDevMonths = repoGitStat.DevelopAge
  33. numKeyContributor = repoGitStat.KeyContributors
  34. numWikiViews = repoGitStat.WikiPages
  35. numContributor = repoGitStat.Contributors
  36. }
  37. var issueFixedRate float32
  38. if repo.NumIssues != 0 {
  39. issueFixedRate = float32(repo.NumClosedIssues) / float32(repo.NumIssues)
  40. }
  41. var numVersions int64
  42. numVersions, err = models.GetReleaseCountByRepoID(repo.ID, models.FindReleasesOptions{})
  43. if err != nil {
  44. log.Error("GetReleaseCountByRepoID failed(%s): %v", repo.Name, err)
  45. }
  46. var datasetSize int64
  47. datasetSize, err = getDatasetSize(repo)
  48. if err != nil {
  49. log.Error("getDatasetSize failed(%s): %v", repo.Name, err)
  50. }
  51. var numComments int64
  52. numComments, err = models.GetCommentCountByRepoID(repo.ID)
  53. if err != nil {
  54. log.Error("GetCommentCountByRepoID failed(%s): %v", repo.Name, err)
  55. }
  56. beginTime, endTime := getStatTime(date)
  57. var numVisits int
  58. numVisits, err = repository.AppointProjectView(repo.OwnerName, repo.Name, beginTime, endTime)
  59. if err != nil {
  60. log.Error("AppointProjectView failed(%s): %v", repo.Name, err)
  61. }
  62. repoStat := models.RepoStatistic{
  63. RepoID: repo.ID,
  64. Date: date,
  65. NumWatches: int64(repo.NumWatches),
  66. NumStars: int64(repo.NumStars),
  67. NumDownloads: repo.CloneCnt,
  68. NumComments: numComments,
  69. NumVisits: int64(numVisits),
  70. NumClosedIssues: int64(repo.NumClosedIssues),
  71. NumVersions: numVersions,
  72. NumDevMonths: numDevMonths,
  73. RepoSize: repo.Size,
  74. DatasetSize: datasetSize,
  75. NumModels: 0,
  76. NumWikiViews: numWikiViews,
  77. NumCommits: repo.NumCommit,
  78. NumIssues: int64(repo.NumIssues),
  79. NumPulls: int64(repo.NumPulls),
  80. IssueFixedRate: issueFixedRate,
  81. NumContributor: numContributor,
  82. NumKeyContributor: numKeyContributor,
  83. }
  84. if _, err = models.InsertRepoStat(&repoStat); err != nil {
  85. log.Error("InsertRepoStat failed(%s): %v", repo.Name, err)
  86. log.Error("failed statistic: %s", repo.Name)
  87. continue
  88. }
  89. log.Info("finish statistic: %s", repo.Name)
  90. }
  91. }
  92. func getDatasetSize(repo *models.Repository) (int64, error) {
  93. dataset, err := models.GetDatasetByRepo(repo)
  94. if err != nil {
  95. return 0, err
  96. }
  97. return models.GetAttachmentSizeByDatasetID(dataset.ID)
  98. }
  99. func getStatTime(timeStr string) (string, string) {
  100. t, _ := time.Parse("2006-01-02", timeStr)
  101. timeNumber := t.Unix()
  102. beginTimeNumber := timeNumber - 8*60*60
  103. endTimeNumber := timeNumber + 16*60*60
  104. beginTime := time.Unix(beginTimeNumber, 0).Format(time.RFC3339)
  105. endTime := time.Unix(endTimeNumber, 0).Format(time.RFC3339)
  106. log.Info("%s, %s", beginTime, endTime)
  107. return beginTime, endTime
  108. }