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  }