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. // 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/unit"
  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.UTC().Format(time.RFC3339)
  42. ctx.Data["DateUntil"] = timeUntil.UTC().Format(time.RFC3339)
  43. ctx.Data["PeriodText"] = ctx.Tr("repo.activity.period." + ctx.Data["Period"].(string))
  44. var err error
  45. if ctx.Data["Activity"], err = activities_model.GetActivityStats(ctx, ctx.Repo.Repository, timeFrom,
  46. ctx.Repo.CanRead(unit.TypeReleases),
  47. ctx.Repo.CanRead(unit.TypeIssues),
  48. ctx.Repo.CanRead(unit.TypePullRequests),
  49. ctx.Repo.CanRead(unit.TypeCode)); err != nil {
  50. ctx.ServerError("GetActivityStats", err)
  51. return
  52. }
  53. if ctx.PageData["repoActivityTopAuthors"], err = activities_model.GetActivityStatsTopAuthors(ctx, 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 := activities_model.GetActivityStatsTopAuthors(ctx, ctx.Repo.Repository, timeFrom, 10)
  83. if err != nil {
  84. ctx.ServerError("GetActivityStatsTopAuthors", err)
  85. return
  86. }
  87. ctx.JSON(http.StatusOK, authors)
  88. }