From 3cceed11b28b5f42a653d85ed779d652fd8c26ad Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:10:13 +0200 Subject: [feature/performance] Store account stats in separate table (#2831) * [feature/performance] Store account stats in separate table, get stats from remote * test account stats * add some missing increment / decrement calls * change stats function signatures * rejig logging a bit * use lock when updating stats --- internal/ap/collections.go | 36 ++++++++++++++++++++++++++++++++++++ internal/ap/interfaces.go | 12 ++++++++++++ 2 files changed, 48 insertions(+) (limited to 'internal/ap') diff --git a/internal/ap/collections.go b/internal/ap/collections.go index c55bbe70b..62c81fd57 100644 --- a/internal/ap/collections.go +++ b/internal/ap/collections.go @@ -105,6 +105,15 @@ func (iter *regularCollectionIterator) PrevItem() TypeOrIRI { return cur } +func (iter *regularCollectionIterator) TotalItems() int { + totalItems := iter.GetActivityStreamsTotalItems() + if totalItems == nil || !totalItems.IsXMLSchemaNonNegativeInteger() { + return -1 + } + + return totalItems.Get() +} + func (iter *regularCollectionIterator) initItems() bool { if iter.once { return (iter.items != nil) @@ -147,6 +156,15 @@ func (iter *orderedCollectionIterator) PrevItem() TypeOrIRI { return cur } +func (iter *orderedCollectionIterator) TotalItems() int { + totalItems := iter.GetActivityStreamsTotalItems() + if totalItems == nil || !totalItems.IsXMLSchemaNonNegativeInteger() { + return -1 + } + + return totalItems.Get() +} + func (iter *orderedCollectionIterator) initItems() bool { if iter.once { return (iter.items != nil) @@ -203,6 +221,15 @@ func (iter *regularCollectionPageIterator) PrevItem() TypeOrIRI { return cur } +func (iter *regularCollectionPageIterator) TotalItems() int { + totalItems := iter.GetActivityStreamsTotalItems() + if totalItems == nil || !totalItems.IsXMLSchemaNonNegativeInteger() { + return -1 + } + + return totalItems.Get() +} + func (iter *regularCollectionPageIterator) initItems() bool { if iter.once { return (iter.items != nil) @@ -259,6 +286,15 @@ func (iter *orderedCollectionPageIterator) PrevItem() TypeOrIRI { return cur } +func (iter *orderedCollectionPageIterator) TotalItems() int { + totalItems := iter.GetActivityStreamsTotalItems() + if totalItems == nil || !totalItems.IsXMLSchemaNonNegativeInteger() { + return -1 + } + + return totalItems.Get() +} + func (iter *orderedCollectionPageIterator) initItems() bool { if iter.once { return (iter.items != nil) diff --git a/internal/ap/interfaces.go b/internal/ap/interfaces.go index 05f6742cc..8f2e17c09 100644 --- a/internal/ap/interfaces.go +++ b/internal/ap/interfaces.go @@ -307,6 +307,12 @@ type CollectionIterator interface { NextItem() TypeOrIRI PrevItem() TypeOrIRI + + // TotalItems returns the total items + // present in the collection, derived + // from the totalItems property, or -1 + // if totalItems not present / readable. + TotalItems() int } // CollectionPageIterator represents the minimum interface for interacting with a wrapped @@ -319,6 +325,12 @@ type CollectionPageIterator interface { NextItem() TypeOrIRI PrevItem() TypeOrIRI + + // TotalItems returns the total items + // present in the collection, derived + // from the totalItems property, or -1 + // if totalItems not present / readable. + TotalItems() int } // Flaggable represents the minimum interface for an activitystreams 'Flag' activity. -- cgit v1.2.3