code.gitea.io/gitea@v1.21.7/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/modules/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["Period"] = ctx.Params("period") 26 27 timeUntil := time.Now() 28 var timeFrom time.Time 29 30 switch ctx.Data["Period"] { 31 case "daily": 32 timeFrom = timeUntil.Add(-time.Hour * 24) 33 case "halfweekly": 34 timeFrom = timeUntil.Add(-time.Hour * 72) 35 case "weekly": 36 timeFrom = timeUntil.Add(-time.Hour * 168) 37 case "monthly": 38 timeFrom = timeUntil.AddDate(0, -1, 0) 39 case "quarterly": 40 timeFrom = timeUntil.AddDate(0, -3, 0) 41 case "semiyearly": 42 timeFrom = timeUntil.AddDate(0, -6, 0) 43 case "yearly": 44 timeFrom = timeUntil.AddDate(-1, 0, 0) 45 default: 46 ctx.Data["Period"] = "weekly" 47 timeFrom = timeUntil.Add(-time.Hour * 168) 48 } 49 ctx.Data["DateFrom"] = timeFrom.UTC().Format(time.RFC3339) 50 ctx.Data["DateUntil"] = timeUntil.UTC().Format(time.RFC3339) 51 ctx.Data["PeriodText"] = ctx.Tr("repo.activity.period." + ctx.Data["Period"].(string)) 52 53 var err error 54 if ctx.Data["Activity"], err = activities_model.GetActivityStats(ctx, ctx.Repo.Repository, timeFrom, 55 ctx.Repo.CanRead(unit.TypeReleases), 56 ctx.Repo.CanRead(unit.TypeIssues), 57 ctx.Repo.CanRead(unit.TypePullRequests), 58 ctx.Repo.CanRead(unit.TypeCode)); err != nil { 59 ctx.ServerError("GetActivityStats", err) 60 return 61 } 62 63 if ctx.PageData["repoActivityTopAuthors"], err = activities_model.GetActivityStatsTopAuthors(ctx, ctx.Repo.Repository, timeFrom, 10); err != nil { 64 ctx.ServerError("GetActivityStatsTopAuthors", err) 65 return 66 } 67 68 ctx.HTML(http.StatusOK, tplActivity) 69 } 70 71 // ActivityAuthors renders JSON with top commit authors for given time period over all branches 72 func ActivityAuthors(ctx *context.Context) { 73 timeUntil := time.Now() 74 var timeFrom time.Time 75 76 switch ctx.Params("period") { 77 case "daily": 78 timeFrom = timeUntil.Add(-time.Hour * 24) 79 case "halfweekly": 80 timeFrom = timeUntil.Add(-time.Hour * 72) 81 case "weekly": 82 timeFrom = timeUntil.Add(-time.Hour * 168) 83 case "monthly": 84 timeFrom = timeUntil.AddDate(0, -1, 0) 85 case "quarterly": 86 timeFrom = timeUntil.AddDate(0, -3, 0) 87 case "semiyearly": 88 timeFrom = timeUntil.AddDate(0, -6, 0) 89 case "yearly": 90 timeFrom = timeUntil.AddDate(-1, 0, 0) 91 default: 92 timeFrom = timeUntil.Add(-time.Hour * 168) 93 } 94 95 var err error 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 102 ctx.JSON(http.StatusOK, authors) 103 }