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

activity.go 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package repo
  5. import (
  6. "net/http"
  7. "time"
  8. "code.gitea.io/gitea/models"
  9. "code.gitea.io/gitea/modules/base"
  10. "code.gitea.io/gitea/modules/context"
  11. )
  12. const (
  13. tplActivity base.TplName = "repo/activity"
  14. )
  15. // Activity render the page to show repository latest changes
  16. func Activity(ctx *context.Context) {
  17. ctx.Data["Title"] = ctx.Tr("repo.activity")
  18. ctx.Data["PageIsActivity"] = true
  19. ctx.Data["Period"] = ctx.Params("period")
  20. timeUntil := time.Now()
  21. var timeFrom time.Time
  22. switch ctx.Data["Period"] {
  23. case "daily":
  24. timeFrom = timeUntil.Add(-time.Hour * 24)
  25. case "halfweekly":
  26. timeFrom = timeUntil.Add(-time.Hour * 72)
  27. case "weekly":
  28. timeFrom = timeUntil.Add(-time.Hour * 168)
  29. case "monthly":
  30. timeFrom = timeUntil.AddDate(0, -1, 0)
  31. case "quarterly":
  32. timeFrom = timeUntil.AddDate(0, -3, 0)
  33. case "semiyearly":
  34. timeFrom = timeUntil.AddDate(0, -6, 0)
  35. case "yearly":
  36. timeFrom = timeUntil.AddDate(-1, 0, 0)
  37. default:
  38. ctx.Data["Period"] = "weekly"
  39. timeFrom = timeUntil.Add(-time.Hour * 168)
  40. }
  41. ctx.Data["DateFrom"] = timeFrom.Format("January 2, 2006")
  42. ctx.Data["DateUntil"] = timeUntil.Format("January 2, 2006")
  43. ctx.Data["PeriodText"] = ctx.Tr("repo.activity.period." + ctx.Data["Period"].(string))
  44. var err error
  45. if ctx.Data["Activity"], err = models.GetActivityStats(ctx.Repo.Repository, timeFrom,
  46. ctx.Repo.CanRead(models.UnitTypeReleases),
  47. ctx.Repo.CanRead(models.UnitTypeIssues),
  48. ctx.Repo.CanRead(models.UnitTypePullRequests),
  49. ctx.Repo.CanRead(models.UnitTypeCode)); err != nil {
  50. ctx.ServerError("GetActivityStats", err)
  51. return
  52. }
  53. if ctx.Data["ActivityTopAuthors"], err = models.GetActivityStatsTopAuthors(ctx.Repo.Repository, timeFrom, 10); err != nil {
  54. ctx.ServerError("GetActivityStatsTopAuthors", err)
  55. return
  56. }
  57. ctx.HTML(http.StatusOK, tplActivity)
  58. }
  59. // ActivityAuthors renders JSON with top commit authors for given time period over all branches
  60. func ActivityAuthors(ctx *context.Context) {
  61. timeUntil := time.Now()
  62. var timeFrom time.Time
  63. switch ctx.Params("period") {
  64. case "daily":
  65. timeFrom = timeUntil.Add(-time.Hour * 24)
  66. case "halfweekly":
  67. timeFrom = timeUntil.Add(-time.Hour * 72)
  68. case "weekly":
  69. timeFrom = timeUntil.Add(-time.Hour * 168)
  70. case "monthly":
  71. timeFrom = timeUntil.AddDate(0, -1, 0)
  72. case "quarterly":
  73. timeFrom = timeUntil.AddDate(0, -3, 0)
  74. case "semiyearly":
  75. timeFrom = timeUntil.AddDate(0, -6, 0)
  76. case "yearly":
  77. timeFrom = timeUntil.AddDate(-1, 0, 0)
  78. default:
  79. timeFrom = timeUntil.Add(-time.Hour * 168)
  80. }
  81. var err error
  82. authors, err := models.GetActivityStatsTopAuthors(ctx.Repo.Repository, timeFrom, 10)
  83. if err != nil {
  84. ctx.ServerError("GetActivityStatsTopAuthors", err)
  85. return
  86. }
  87. ctx.JSON(http.StatusOK, authors)
  88. }