mirror of https://github.com/writeas/writefreely
Includes new instance stats and the new option to show user stats, as well.pull/24/head
parent
39477cfcab
commit
1a6f61690e
@ -0,0 +1,87 @@ |
||||
package writefreely |
||||
|
||||
import ( |
||||
"fmt" |
||||
"github.com/writeas/go-nodeinfo" |
||||
"github.com/writeas/web-core/log" |
||||
"github.com/writeas/writefreely/config" |
||||
) |
||||
|
||||
type nodeInfoResolver struct { |
||||
cfg *config.Config |
||||
db *datastore |
||||
} |
||||
|
||||
func nodeInfoConfig(cfg *config.Config) *nodeinfo.Config { |
||||
name := cfg.App.SiteName |
||||
return &nodeinfo.Config{ |
||||
BaseURL: cfg.Server.Host, |
||||
InfoURL: "/api/nodeinfo", |
||||
|
||||
Metadata: nodeinfo.Metadata{ |
||||
NodeName: name, |
||||
NodeDescription: "Minimal, federated blogging platform.", |
||||
Private: cfg.App.Private, |
||||
Software: nodeinfo.SoftwareMeta{ |
||||
HomePage: softwareURL, |
||||
GitHub: "https://github.com/writeas/writefreely", |
||||
Follow: "https://writing.exchange/@write_as", |
||||
}, |
||||
}, |
||||
Protocols: []nodeinfo.NodeProtocol{ |
||||
nodeinfo.ProtocolActivityPub, |
||||
}, |
||||
Services: nodeinfo.Services{ |
||||
Inbound: []nodeinfo.NodeService{}, |
||||
Outbound: []nodeinfo.NodeService{}, |
||||
}, |
||||
Software: nodeinfo.SoftwareInfo{ |
||||
Name: serverSoftware, |
||||
Version: softwareVer, |
||||
}, |
||||
} |
||||
} |
||||
|
||||
func (r nodeInfoResolver) IsOpenRegistration() (bool, error) { |
||||
return !r.cfg.App.Private, nil |
||||
} |
||||
|
||||
func (r nodeInfoResolver) Usage() (nodeinfo.Usage, error) { |
||||
var collCount, postCount, activeHalfYear, activeMonth int |
||||
err := r.db.QueryRow(`SELECT COUNT(*) FROM collections`).Scan(&collCount) |
||||
if err != nil { |
||||
collCount = 0 |
||||
} |
||||
err = r.db.QueryRow(`SELECT COUNT(*) FROM posts`).Scan(&postCount) |
||||
if err != nil { |
||||
log.Error("Unable to fetch post counts: %v", err) |
||||
} |
||||
|
||||
if r.cfg.App.PublicStats { |
||||
// Display bi-yearly / monthly stats
|
||||
err = r.db.QueryRow(fmt.Sprintf(`SELECT COUNT(*) FROM ( |
||||
SELECT DISTINCT collection_id |
||||
FROM posts |
||||
INNER JOIN collections c |
||||
ON collection_id = c.id |
||||
WHERE collection_id IS NOT NULL |
||||
AND updated > DATE_SUB(NOW(), INTERVAL 6 MONTH)) co`, CollPublic)).Scan(&activeHalfYear) |
||||
|
||||
err = r.db.QueryRow(fmt.Sprintf(`SELECT COUNT(*) FROM ( |
||||
SELECT DISTINCT collection_id |
||||
FROM posts |
||||
INNER JOIN FROM collections c |
||||
ON collection_id = c.id |
||||
WHERE collection_id IS NOT NULL |
||||
AND updated > DATE_SUB(NOW(), INTERVAL 1 MONTH)) co`, CollPublic)).Scan(&activeMonth) |
||||
} |
||||
|
||||
return nodeinfo.Usage{ |
||||
Users: nodeinfo.UsageUsers{ |
||||
Total: collCount, |
||||
ActiveHalfYear: activeHalfYear, |
||||
ActiveMonth: activeMonth, |
||||
}, |
||||
LocalPosts: postCount, |
||||
}, nil |
||||
} |
Loading…
Reference in new issue