Where a hub keeps what it saw: plain files in its data folder, nothing to install.
class MMO\admin\monitoring\MonitorStore
Namespace
MMO\admin\monitoring
```
{data}/latest.json subject => probe => the latest reading, details included
{data}/series/{subject}/{YYYY-MM-DD}.jsonl one line per reading: time, probe, status, metrics (@see Reading::toPoint)
{data}/incidents.json what went wrong, when, and when it stopped (@see Incidents)
{data}/collect.lock held while a collection runs, so two never overlap
```
A series is split per subject and per day so that drawing one server's week reads seven small files, and forgetting
what is older than [`$retention`](https://mmoframework.fr/en/documentation/mmo.admin/php/monitoring/MonitorStore.md#monitorstore-retention) is deleting folders. Every write goes to a temporary file renamed over the old
one: a page reading `latest.json` while a collection writes it reads the old one or the new one, never half.
What it keeps may include log lines -- which may name people -- so the folder is its owner's (0750, 0640).
The values of some metrics of a subject over time, averaged into at most $points buckets: a week of readings every five minutes is two thousand points, which no chart needs.
The values of some metrics of a subject over time, averaged into at most $points buckets: a week of readings every five minutes is two thousand points, which no chart needs.
function series(
string $subject,
array $metrics,
int $since,
?int $until = null,
int $points = 120
): array
int, to: int, step: int, times: list<int>, series: array<string, list<float|null>>, status: list<string|null>} status is the worst status of each bucket, every probe of the subject together