summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Sleep <don@kuntz.co>2023-01-11 04:36:36 -0600
committerLibravatar GitHub <noreply@github.com>2023-01-11 11:36:36 +0100
commit3512325e4647fc76e6ce82ea44e2a321a0809451 (patch)
tree155643e96f98e66fac369a879317bb7e0b1efd31
parent[feature] Implement Report database model and utility functions (#1310) (diff)
downloadgotosocial-3512325e4647fc76e6ce82ea44e2a321a0809451.tar.xz
[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
-rw-r--r--docs/api/swagger.yaml11
-rw-r--r--internal/api/model/well-known.go9
-rw-r--r--internal/processing/federation/getnodeinfo.go16
3 files changed, 31 insertions, 5 deletions
diff --git a/docs/api/swagger.yaml b/docs/api/swagger.yaml
index a900a31d5..b3a75d177 100644
--- 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
index 384361fd0..bf61a6085 100644
--- 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
index ff7aea649..a15c6fa10 100644
--- 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