code.gitea.io/gitea@v1.22.3/routers/web/repo/activity.go (about) 1 // Copyright 2017 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repo 5 6 import ( 7 "net/http" 8 "time" 9 10 activities_model "code.gitea.io/gitea/models/activities" 11 "code.gitea.io/gitea/models/unit" 12 "code.gitea.io/gitea/modules/base" 13 "code.gitea.io/gitea/services/context" 14 ) 15 16 const ( 17 tplActivity base.TplName = "repo/activity" 18 ) 19 20 // Activity render the page to show repository latest changes 21 func Activity(ctx *context.Context) { 22 ctx.Data["Title"] = ctx.Tr("repo.activity") 23 ctx.Data["PageIsActivity"] = true 24 25 ctx.Data["PageIsPulse"] = true 26 27 ctx.Data["Period"] = ctx.Params("period") 28 29 timeUntil := time.Now() 30 var timeFrom time.Time 31 32 switch ctx.Data["Period"] { 33 case "daily": 34 timeFrom = timeUntil.Add(-time.Hour * 24) 35 case "halfweekly": 36 timeFrom = timeUntil.Add(-time.Hour * 72) 37 case "weekly": 38 timeFrom = timeUntil.Add(-time.Hour * 168) 39 case "monthly": 40 timeFrom = timeUntil.AddDate(0, -1, 0) 41 case "quarterly": 42 timeFrom = timeUntil.AddDate(0, -3, 0) 43 case "semiyearly": 44 timeFrom = timeUntil.AddDate(0, -6, 0) 45 case "yearly": 46 timeFrom = timeUntil.AddDate(-1, 0, 0) 47 default: 48 ctx.Data["Period"] = "weekly" 49 timeFrom = timeUntil.Add(-time.Hour * 168) 50 } 51 ctx.Data["DateFrom"] = timeFrom.UTC().Format(time.RFC3339) 52 ctx.Data["DateUntil"] = timeUntil.UTC().Format(time.RFC3339) 53 ctx.Data["PeriodText"] = ctx.Tr("repo.activity.period." + ctx.Data["Period"].(string)) 54 55 var err error 56 if ctx.Data["Activity"], err = activities_model.GetActivityStats(ctx, ctx.Repo.Repository, timeFrom, 57 ctx.Repo.CanRead(unit.TypeReleases), 58 ctx.Repo.CanRead(unit.TypeIssues), 59 ctx.Repo.CanRead(unit.TypePullRequests), 60 ctx.Repo.CanRead(unit.TypeCode)); err != nil { 61 ctx.ServerError("GetActivityStats", err) 62 return 63 } 64 65 if ctx.PageData["repoActivityTopAuthors"], err = activities_model.GetActivityStatsTopAuthors(ctx, ctx.Repo.Repository, timeFrom, 10); err != nil { 66 ctx.ServerError("GetActivityStatsTopAuthors", err) 67 return 68 } 69 70 ctx.HTML(http.StatusOK, tplActivity) 71 } 72 73 // ActivityAuthors renders JSON with top commit authors for given time period over all branches 74 func ActivityAuthors(ctx *context.Context) { 75 timeUntil := time.Now() 76 var timeFrom time.Time 77 78 switch ctx.Params("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 97 var err error 98 authors, err := activities_model.GetActivityStatsTopAuthors(ctx, ctx.Repo.Repository, timeFrom, 10) 99 if err != nil { 100 ctx.ServerError("GetActivityStatsTopAuthors", err) 101 return 102 } 103 104 ctx.JSON(http.StatusOK, authors) 105 }