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