gitea源码

activity.go 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package repo
  4. import (
  5. "net/http"
  6. "time"
  7. activities_model "code.gitea.io/gitea/models/activities"
  8. "code.gitea.io/gitea/models/git"
  9. "code.gitea.io/gitea/models/unit"
  10. "code.gitea.io/gitea/modules/templates"
  11. "code.gitea.io/gitea/services/context"
  12. )
  13. const (
  14. tplActivity templates.TplName = "repo/activity"
  15. )
  16. // Activity render the page to show repository latest changes
  17. func Activity(ctx *context.Context) {
  18. ctx.Data["Title"] = ctx.Tr("repo.activity")
  19. ctx.Data["PageIsActivity"] = true
  20. ctx.Data["PageIsPulse"] = true
  21. ctx.Data["Period"] = ctx.PathParam("period")
  22. timeUntil := time.Now()
  23. var timeFrom time.Time
  24. switch ctx.Data["Period"] {
  25. case "daily":
  26. timeFrom = timeUntil.Add(-time.Hour * 24)
  27. case "halfweekly":
  28. timeFrom = timeUntil.Add(-time.Hour * 72)
  29. case "weekly":
  30. timeFrom = timeUntil.Add(-time.Hour * 168)
  31. case "monthly":
  32. timeFrom = timeUntil.AddDate(0, -1, 0)
  33. case "quarterly":
  34. timeFrom = timeUntil.AddDate(0, -3, 0)
  35. case "semiyearly":
  36. timeFrom = timeUntil.AddDate(0, -6, 0)
  37. case "yearly":
  38. timeFrom = timeUntil.AddDate(-1, 0, 0)
  39. default:
  40. ctx.Data["Period"] = "weekly"
  41. timeFrom = timeUntil.Add(-time.Hour * 168)
  42. }
  43. ctx.Data["DateFrom"] = timeFrom
  44. ctx.Data["DateUntil"] = timeUntil
  45. ctx.Data["PeriodText"] = ctx.Tr("repo.activity.period." + ctx.Data["Period"].(string))
  46. canReadCode := ctx.Repo.CanRead(unit.TypeCode)
  47. if canReadCode {
  48. // GetActivityStats needs to read the default branch to get some information
  49. branchExist, _ := git.IsBranchExist(ctx, ctx.Repo.Repository.ID, ctx.Repo.Repository.DefaultBranch)
  50. if !branchExist {
  51. ctx.Data["NotFoundPrompt"] = ctx.Tr("repo.branch.default_branch_not_exist", ctx.Repo.Repository.DefaultBranch)
  52. ctx.NotFound(nil)
  53. return
  54. }
  55. }
  56. var err error
  57. // TODO: refactor these arguments to a struct
  58. ctx.Data["Activity"], err = activities_model.GetActivityStats(ctx, ctx.Repo.Repository, timeFrom,
  59. ctx.Repo.CanRead(unit.TypeReleases),
  60. ctx.Repo.CanRead(unit.TypeIssues),
  61. ctx.Repo.CanRead(unit.TypePullRequests),
  62. canReadCode,
  63. )
  64. if err != nil {
  65. ctx.ServerError("GetActivityStats", err)
  66. return
  67. }
  68. if ctx.PageData["repoActivityTopAuthors"], err = activities_model.GetActivityStatsTopAuthors(ctx, ctx.Repo.Repository, timeFrom, 10); err != nil {
  69. ctx.ServerError("GetActivityStatsTopAuthors", err)
  70. return
  71. }
  72. ctx.HTML(http.StatusOK, tplActivity)
  73. }
  74. // ActivityAuthors renders JSON with top commit authors for given time period over all branches
  75. func ActivityAuthors(ctx *context.Context) {
  76. timeUntil := time.Now()
  77. var timeFrom time.Time
  78. switch ctx.PathParam("period") {
  79. case "daily":
  80. timeFrom = timeUntil.Add(-time.Hour * 24)
  81. case "halfweekly":
  82. timeFrom = timeUntil.Add(-time.Hour * 72)
  83. case "weekly":
  84. timeFrom = timeUntil.Add(-time.Hour * 168)
  85. case "monthly":
  86. timeFrom = timeUntil.AddDate(0, -1, 0)
  87. case "quarterly":
  88. timeFrom = timeUntil.AddDate(0, -3, 0)
  89. case "semiyearly":
  90. timeFrom = timeUntil.AddDate(0, -6, 0)
  91. case "yearly":
  92. timeFrom = timeUntil.AddDate(-1, 0, 0)
  93. default:
  94. timeFrom = timeUntil.Add(-time.Hour * 168)
  95. }
  96. authors, err := activities_model.GetActivityStatsTopAuthors(ctx, ctx.Repo.Repository, timeFrom, 10)
  97. if err != nil {
  98. ctx.ServerError("GetActivityStatsTopAuthors", err)
  99. return
  100. }
  101. ctx.JSON(http.StatusOK, authors)
  102. }