mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-09-12 18:03:57 +02:00
Nowadays, cache will be used on almost everywhere of Gitea and it cannot be disabled, otherwise some features will become unaviable. Then I think we can just remove the option for cache enable. That means cache cannot be disabled. But of course, we can still use cache configuration to set how should Gitea use the cache.
81 lines
2.4 KiB
Go
81 lines
2.4 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package misc
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
issues_model "code.gitea.io/gitea/models/issues"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
"code.gitea.io/gitea/modules/context"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
"code.gitea.io/gitea/modules/structs"
|
|
)
|
|
|
|
const cacheKeyNodeInfoUsage = "API_NodeInfoUsage"
|
|
|
|
// NodeInfo returns the NodeInfo for the Gitea instance to allow for federation
|
|
func NodeInfo(ctx *context.APIContext) {
|
|
// swagger:operation GET /nodeinfo miscellaneous getNodeInfo
|
|
// ---
|
|
// summary: Returns the nodeinfo of the Gitea application
|
|
// produces:
|
|
// - application/json
|
|
// responses:
|
|
// "200":
|
|
// "$ref": "#/responses/NodeInfo"
|
|
|
|
nodeInfoUsage := structs.NodeInfoUsage{}
|
|
if setting.Federation.ShareUserStatistics {
|
|
var cached bool
|
|
nodeInfoUsage, cached = ctx.Cache.Get(cacheKeyNodeInfoUsage).(structs.NodeInfoUsage)
|
|
|
|
if !cached {
|
|
usersTotal := int(user_model.CountUsers(ctx, nil))
|
|
now := time.Now()
|
|
timeOneMonthAgo := now.AddDate(0, -1, 0).Unix()
|
|
timeHaveYearAgo := now.AddDate(0, -6, 0).Unix()
|
|
usersActiveMonth := int(user_model.CountUsers(ctx, &user_model.CountUserFilter{LastLoginSince: &timeOneMonthAgo}))
|
|
usersActiveHalfyear := int(user_model.CountUsers(ctx, &user_model.CountUserFilter{LastLoginSince: &timeHaveYearAgo}))
|
|
|
|
allIssues, _ := issues_model.CountIssues(ctx, &issues_model.IssuesOptions{})
|
|
allComments, _ := issues_model.CountComments(ctx, &issues_model.FindCommentsOptions{})
|
|
|
|
nodeInfoUsage = structs.NodeInfoUsage{
|
|
Users: structs.NodeInfoUsageUsers{
|
|
Total: usersTotal,
|
|
ActiveMonth: usersActiveMonth,
|
|
ActiveHalfyear: usersActiveHalfyear,
|
|
},
|
|
LocalPosts: int(allIssues),
|
|
LocalComments: int(allComments),
|
|
}
|
|
|
|
if err := ctx.Cache.Put(cacheKeyNodeInfoUsage, nodeInfoUsage, 180); err != nil {
|
|
ctx.InternalServerError(err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
nodeInfo := &structs.NodeInfo{
|
|
Version: "2.1",
|
|
Software: structs.NodeInfoSoftware{
|
|
Name: "gitea",
|
|
Version: setting.AppVer,
|
|
Repository: "https://github.com/go-gitea/gitea.git",
|
|
Homepage: "https://gitea.io/",
|
|
},
|
|
Protocols: []string{"activitypub"},
|
|
Services: structs.NodeInfoServices{
|
|
Inbound: []string{},
|
|
Outbound: []string{"rss2.0"},
|
|
},
|
|
OpenRegistrations: setting.Service.ShowRegistrationButton,
|
|
Usage: nodeInfoUsage,
|
|
}
|
|
ctx.JSON(http.StatusOK, nodeInfo)
|
|
}
|