mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Fix nodeinfo caching and prevent NPE if cache non-existent (#19721)
Extract from #19703 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		@@ -30,8 +30,11 @@ func NodeInfo(ctx *context.APIContext) {
 | 
			
		||||
 | 
			
		||||
	nodeInfoUsage := structs.NodeInfoUsage{}
 | 
			
		||||
	if setting.Federation.ShareUserStatistics {
 | 
			
		||||
		info, ok := ctx.Cache.Get(cacheKeyNodeInfoUsage).(structs.NodeInfoUsage)
 | 
			
		||||
		if !ok {
 | 
			
		||||
		cached := false
 | 
			
		||||
		if setting.CacheService.Enabled {
 | 
			
		||||
			nodeInfoUsage, cached = ctx.Cache.Get(cacheKeyNodeInfoUsage).(structs.NodeInfoUsage)
 | 
			
		||||
		}
 | 
			
		||||
		if !cached {
 | 
			
		||||
			usersTotal := int(user_model.CountUsers(nil))
 | 
			
		||||
			now := time.Now()
 | 
			
		||||
			timeOneMonthAgo := now.AddDate(0, -1, 0).Unix()
 | 
			
		||||
@@ -42,7 +45,7 @@ func NodeInfo(ctx *context.APIContext) {
 | 
			
		||||
			allIssues, _ := models.CountIssues(&models.IssuesOptions{})
 | 
			
		||||
			allComments, _ := models.CountComments(&models.FindCommentsOptions{})
 | 
			
		||||
 | 
			
		||||
			info = structs.NodeInfoUsage{
 | 
			
		||||
			nodeInfoUsage = structs.NodeInfoUsage{
 | 
			
		||||
				Users: structs.NodeInfoUsageUsers{
 | 
			
		||||
					Total:          usersTotal,
 | 
			
		||||
					ActiveMonth:    usersActiveMonth,
 | 
			
		||||
@@ -51,12 +54,13 @@ func NodeInfo(ctx *context.APIContext) {
 | 
			
		||||
				LocalPosts:    int(allIssues),
 | 
			
		||||
				LocalComments: int(allComments),
 | 
			
		||||
			}
 | 
			
		||||
			if err := ctx.Cache.Put(cacheKeyNodeInfoUsage, nodeInfoUsage, 180); err != nil {
 | 
			
		||||
				ctx.InternalServerError(err)
 | 
			
		||||
				return
 | 
			
		||||
			if setting.CacheService.Enabled {
 | 
			
		||||
				if err := ctx.Cache.Put(cacheKeyNodeInfoUsage, nodeInfoUsage, 180); err != nil {
 | 
			
		||||
					ctx.InternalServerError(err)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		nodeInfoUsage = info
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	nodeInfo := &structs.NodeInfo{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user