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.