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.6 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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. repoGitStat, err := models.GetRepoKPIStats(repo)
  28. if err != nil {
  29. log.Error("GetRepoKPIStats failed: %s", repo.Name)
  30. log.Error("failed statistic: %s", repo.Name)
  31. continue
  32. }
  33. var issueFixedRate float32
  34. if repo.NumIssues != 0 {
  35. issueFixedRate = float32(repo.NumClosedIssues) / float32(repo.NumIssues)
  36. }
  37. numVersions, err := models.GetReleaseCountByRepoID(repo.ID, models.FindReleasesOptions{})
  38. if err != nil {
  39. log.Error("GetReleaseCountByRepoID failed: %s", repo.Name)
  40. log.Error("failed statistic: %s", repo.Name)
  41. continue
  42. }
  43. datasetSize, err := getDatasetSize(repo)
  44. if err != nil {
  45. log.Error("getDatasetSize failed: %s", repo.Name)
  46. log.Error("failed statistic: %s", repo.Name)
  47. continue
  48. }
  49. numComments, err := models.GetCommentCountByRepoID(repo.ID)
  50. if err != nil {
  51. log.Error("GetCommentCountByRepoID failed: %s", repo.Name)
  52. log.Error("failed statistic: %s", repo.Name)
  53. continue
  54. }
  55. beginTime, endTime := getStatTime(date)
  56. numVisits, err := repository.AppointProjectView(repo.OwnerName, repo.Name, beginTime, endTime)
  57. if err != nil {
  58. log.Error("Get numVisits failed", err)
  59. numVisits = 0
  60. }
  61. repoStat := models.RepoStatistic{
  62. RepoID: repo.ID,
  63. Date: date,
  64. NumWatches: int64(repo.NumWatches),
  65. NumStars: int64(repo.NumStars),
  66. NumDownloads: repo.CloneCnt,
  67. NumComments: numComments,
  68. NumVisits: int64(numVisits),
  69. NumClosedIssues: int64(repo.NumClosedIssues),
  70. NumVersions: numVersions,
  71. NumDevMonths: repoGitStat.DevelopAge,
  72. RepoSize: repo.Size,
  73. DatasetSize: datasetSize,
  74. NumModels: 0,
  75. NumWikiViews: repoGitStat.WikiPages,
  76. NumCommits: repo.NumCommit,
  77. NumIssues: int64(repo.NumIssues),
  78. NumPulls: int64(repo.NumPulls),
  79. IssueFixedRate: issueFixedRate,
  80. NumContributor: repoGitStat.Contributors,
  81. NumKeyContributor: repoGitStat.KeyContributors,
  82. }
  83. if _, err = models.InsertRepoStat(&repoStat); err != nil {
  84. log.Error("InsertRepoStat failed: %s", repo.Name)
  85. log.Error("failed statistic: %s", repo.Name)
  86. continue
  87. }
  88. log.Info("finish statistic: %s", repo.Name)
  89. }
  90. }
  91. func getDatasetSize(repo *models.Repository) (int64, error) {
  92. dataset, err := models.GetDatasetByRepo(repo)
  93. if err != nil {
  94. return 0, err
  95. }
  96. return models.GetAttachmentSizeByDatasetID(dataset.ID)
  97. }
  98. func getStatTime(timeStr string) (string, string) {
  99. t, _ := time.Parse("2006-01-02", timeStr)
  100. timeNumber := t.Unix()
  101. beginTimeNumber := timeNumber - 8*60*60
  102. endTimeNumber := timeNumber + 16*60*60
  103. beginTime := time.Unix(beginTimeNumber, 0).Format(time.RFC3339)
  104. endTime := time.Unix(endTimeNumber, 0).Format(time.RFC3339)
  105. log.Info("%s, %s", beginTime, endTime)
  106. return beginTime, endTime
  107. }