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:
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