gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 3512325e4647fc76e6ce82ea44e2a321a0809451
parent d6487933c758be647bff7a568d6a33e6155e6599
Author: Sleep <don@kuntz.co>
Date:   Wed, 11 Jan 2023 04:36:36 -0600

[feature] Add local user and post count to nodeinfo responses (#1325)

* Add local user and post count to nodeinfo responses

This fixes #1307 (at least partially). The nodeinfo endpoint should now
return the total users on an instance, along with their post count.

* Update NodeInfoUsers docstring and swagger yaml file
Diffstat:
Mdocs/api/swagger.yaml | 11++++++++++-
Minternal/api/model/well-known.go | 9++++++---
Minternal/processing/federation/getnodeinfo.go | 16+++++++++++++++-
3 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml @@ -100,13 +100,22 @@ definitions: x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model NodeInfoUsage: properties: + localPosts: + format: int64 + type: integer + x-go-name: LocalPosts users: $ref: '#/definitions/NodeInfoUsers' title: NodeInfoUsage represents usage information about this server, such as number of users. type: object x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model NodeInfoUsers: - title: NodeInfoUsers is a stub for usage information, currently empty. + properties: + total: + format: int64 + type: integer + x-go-name: Total + title: NodeInfoUsers represents aggregate information about the users on the server. type: object x-go-package: github.com/superseriousbusiness/gotosocial/internal/api/model Source: diff --git a/internal/api/model/well-known.go b/internal/api/model/well-known.go @@ -79,8 +79,11 @@ type NodeInfoServices struct { // NodeInfoUsage represents usage information about this server, such as number of users. type NodeInfoUsage struct { - Users NodeInfoUsers `json:"users"` + Users NodeInfoUsers `json:"users"` + LocalPosts int `json:"localPosts"` } -// NodeInfoUsers is a stub for usage information, currently empty. -type NodeInfoUsers struct{} +// NodeInfoUsers represents aggregate information about the users on the server. +type NodeInfoUsers struct { + Total int `json:"total"` +} diff --git a/internal/processing/federation/getnodeinfo.go b/internal/processing/federation/getnodeinfo.go @@ -55,6 +55,17 @@ func (p *processor) GetNodeInfo(ctx context.Context) (*apimodel.Nodeinfo, gtserr openRegistration := config.GetAccountsRegistrationOpen() softwareVersion := config.GetSoftwareVersion() + host := config.GetHost() + userCount, err := p.db.CountInstanceUsers(ctx, host) + if err != nil { + return nil, gtserror.NewErrorInternalError(err, "Unable to query instance user count") + } + + postCount, err := p.db.CountInstanceStatuses(ctx, host) + if err != nil { + return nil, gtserror.NewErrorInternalError(err, "Unable to query instance status count") + } + return &apimodel.Nodeinfo{ Version: nodeInfoVersion, Software: apimodel.NodeInfoSoftware{ @@ -68,7 +79,10 @@ func (p *processor) GetNodeInfo(ctx context.Context) (*apimodel.Nodeinfo, gtserr }, OpenRegistrations: openRegistration, Usage: apimodel.NodeInfoUsage{ - Users: apimodel.NodeInfoUsers{}, + Users: apimodel.NodeInfoUsers{ + Total: userCount, + }, + LocalPosts: postCount, }, Metadata: make(map[string]interface{}), }, nil