mirror of
https://github.com/element-hq/synapse.git
synced 2024-12-22 20:50:23 +03:00
6e834e94fc
Previously the stats were not being correctly populated.
62 lines
2.2 KiB
Markdown
62 lines
2.2 KiB
Markdown
Room and User Statistics
|
||
========================
|
||
|
||
Synapse maintains room and user statistics (as well as a cache of room state),
|
||
in various tables. These can be used for administrative purposes but are also
|
||
used when generating the public room directory.
|
||
|
||
|
||
# Synapse Developer Documentation
|
||
|
||
## High-Level Concepts
|
||
|
||
### Definitions
|
||
|
||
* **subject**: Something we are tracking stats about – currently a room or user.
|
||
* **current row**: An entry for a subject in the appropriate current statistics
|
||
table. Each subject can have only one.
|
||
* **historical row**: An entry for a subject in the appropriate historical
|
||
statistics table. Each subject can have any number of these.
|
||
|
||
### Overview
|
||
|
||
Stats are maintained as time series. There are two kinds of column:
|
||
|
||
* absolute columns – where the value is correct for the time given by `end_ts`
|
||
in the stats row. (Imagine a line graph for these values)
|
||
* They can also be thought of as 'gauges' in Prometheus, if you are familiar.
|
||
* per-slice columns – where the value corresponds to how many of the occurrences
|
||
occurred within the time slice given by `(end_ts − bucket_size)…end_ts`
|
||
or `start_ts…end_ts`. (Imagine a histogram for these values)
|
||
|
||
Stats are maintained in two tables (for each type): current and historical.
|
||
|
||
Current stats correspond to the present values. Each subject can only have one
|
||
entry.
|
||
|
||
Historical stats correspond to values in the past. Subjects may have multiple
|
||
entries.
|
||
|
||
## Concepts around the management of stats
|
||
|
||
### Current rows
|
||
|
||
Current rows contain the most up-to-date statistics for a room.
|
||
They only contain absolute columns
|
||
|
||
### Historical rows
|
||
|
||
Historical rows can always be considered to be valid for the time slice and
|
||
end time specified.
|
||
|
||
* historical rows will not exist for every time slice – they will be omitted
|
||
if there were no changes. In this case, the following assumptions can be
|
||
made to interpolate/recreate missing rows:
|
||
- absolute fields have the same values as in the preceding row
|
||
- per-slice fields are zero (`0`)
|
||
* historical rows will not be retained forever – rows older than a configurable
|
||
time will be purged.
|
||
|
||
#### Purge
|
||
|
||
The purging of historical rows is not yet implemented.
|