Zum Inhalt springen

Stats Manager + API

In diesem Beitrag erkläre ich wie unser neuer StatsManager im Hintergrund funktioniert und wie dieser per API angesteuert und benutzt werden kann.

Begriffe

Zuerst ein paar Begriffe klären:

Namespace

Für Riddle selbst gibt es drei Namespaces:

  • rid (für Riddles)
  • team
  • user

Diese sind wie „Schubladen“. Das heißt, dass in jeder dieser Schubladen Stats für alle diese Teilbereiche liegen. So kannst du zum Beispiel auch abfragen, wie viele Stats ein Team am Tag bekommen hat indem du im Namespace „team“ den Tag (z.B. „2021-15-01“) queriest.
Wenn du den selben Tag im Namespace „rid“ queriest, bekommst du zurück wie viele Stats an diesem Tag für die spezifierte RiddleID reinkamen.

Die Magie dahinter ist, dass wir uns dadurch viel sparen können, da alles schon vorkalkuliert ist. Es ist zum Beispiel nicht nötig über alle Riddles eines Teams/Users zu iterieren um dessen Gesamtstats zu bekommen – das regelt alles bereits der Namespace und summiert diese Stats bereits auf.
So wäre es z.B. auch möglich schlau zu kombinieren: Wenn alle Riddle eines Teams bis auf eins summiert werden sollen, könnte man die Team Stats nehmen und die Stats von dem ausgeschlossenen Riddle abziehen.

EntityID(s)

In der API gibt es das Param „entityId“ oder bei mehreren Entities auch „entityIds“. Das sind einfach die unique EntityIDs aus der Datenbank. Natürlich muss man dann aufpassen, dass man Namespace und die EntityID richtig matcht. Wenn man Namespace=’team‘ und die EntityID eines Riddles wählt, kann es natürlich nicht funktionieren.

From & to

Bei jedem Zugriff auf den StatsManager muss man spezifizieren welchen Zeitraum man auswählt. Z.B. from => „2021-15-01“ und to => „2021-18-01“. Das ist dann 15. bis 18. Januar 2021.

Fetch, Bulk-Fetch & Overview-Fetch

Fetch liefert ein Dokument mit vielen Details, d.h. z.B. alle individuellen Answers. Diese Art von Fetch sollte genutzt werden wenn man für eine individuelle Entity ALLE Infos returnt haben möchte.

URL: /creator/stats-v2/fetch/{namespace}/{entityId}/{from}/{to}

Beispiel: Alle Stats für Team mit der ID 800 vom 01.01.21 bis zum 31.12.21
– namespace: team
– entityId: 800
– from: 2021-01-01
– to: 2021-12-31

Bulk-Fetch droppt die Stats die das Stats-Array überladen. Wenn mehrere Riddles/Teams aufsummiert werden, sammeln sich sehr viele individuelle Answers an und der Speicher wird überschritten => diese werden nicht beachtet.
Bulk-Fetch summiert mehrere EntityIDs auf, liefert jedoch nur ein Stats-Array zurück (=> aufsummiert).

URL: /creator/stats-v2/bulk-fetch/{namespace}/{from}/{to}
Param namespace: Hier bedeutet namespace so viel wie: Wenn ‚team‘, dann zeig dem User all die Stats, die für Team-User relevant sind (keine individuellen Riddles); das Gleiche dann mit User

Beispiel: Alle Stats für einen User in der Statistics Team-Übersicht
– namespace: team
– from: 2021-01-01
– to: 2021-12-31

Folgende Kategorien + Stats werden aggregiert:

public function getCategoriesAndLabels(): array
    {
        return [
            'core_metrics' => [
                'view',
                'start',
                'finish',
                'lead',
                'time',
            ],
            'device' => [
                'desktop',
                'mobile',
                'tablet',
            ],
            'social' => [
                'fbMessenger',
                'whatsapp',
                'facebook',
                'twitter',
                'linkedin',
            ],
            'form' => [
                'skip',
                'view',
            ],
            'region' => $this->getAllRegions(),
        ];
    }

Die dritte Art von Fetch ist „Overview-Fetch“. Dieses gliedert den Zeitraum zwischen from & to in Tage auf und gibt je ein Stats-Array pro Tag zurück.
Das ist zum Beispiel sehr hilfreich bei einer Historie oder wenn man die Stats-Werte von jeglichen Entities über einen gewissen Zeitraum vergleichen will.

URL: /creator/stats-v2/overview-fetch/{namespace}/{entityId}/{from}/{to}