openvidu-dashboard: the 3.10 changelog lists the changes against 3.9

Pages and features 3.9 already had move to Improved, and lines that compared with intermediate builds are gone (a smaller image, the shutdown deadline, the locked node filter).
pull/924/head
juancarmore 2026-10-26 14:15:01 +01:00
parent 5d41b7a45f
commit 603e21089f
1 changed files with 61 additions and 80 deletions

View File

@ -1,9 +1,9 @@
# Changelog # Changelog
Newest release first. Sections appear in this order, omitting the empty ones: `Upgrade notes`, Newest release first; each release lists its changes against the previous one. Sections appear in this order,
`Breaking changes`, `Deprecated`, `Added`, `Improved`, `Fixed`. `Added`, `Improved` and `Fixed` group their omitting the empty ones: `Upgrade notes`, `Breaking changes`, `Deprecated`, `Added`, `Improved`, `Fixed`. `Added`,
entries under `UI` (what an administrator sees), `Data` (what is stored and how it is queried) and `Improved` and `Fixed` group their entries under `UI` (what an administrator sees), `Data` (what is stored and how it is
`Deployment` (running the service). One line per observable change, present tense. queried) and `Deployment` (running the service). One line per observable change, present tense.
## 3.10.0 (unreleased) ## 3.10.0 (unreleased)
@ -15,7 +15,6 @@ entries under `UI` (what an administrator sees), `Data` (what is stored and how
- `ADMIN_USERNAME` and `ADMIN_PASSWORD` are required: the dashboard no longer starts with built-in credentials. - `ADMIN_USERNAME` and `ADMIN_PASSWORD` are required: the dashboard no longer starts with built-in credentials.
- `LOG_LEVEL` defaults to `info` instead of `debug`, and `SERVER_PORT` to `5000` (the port every installer sets) - `LOG_LEVEL` defaults to `info` instead of `debug`, and `SERVER_PORT` to `5000` (the port every installer sets)
instead of `3000`. instead of `3000`.
- The CE image builds from `dashboard-ce/docker/Dockerfile` with `openvidu-dashboard/` as context.
- The image runs as uid 1000: mounted configuration and certificate authority files must be readable by that user. - The image runs as uid 1000: mounted configuration and certificate authority files must be readable by that user.
- Client IP addresses are no longer stored by default; set `openvidu.analytics.anonymize_ip: false` to store them. - Client IP addresses are no longer stored by default; set `openvidu.analytics.anonymize_ip: false` to store them.
@ -34,89 +33,53 @@ entries under `UI` (what an administrator sees), `Data` (what is stored and how
#### UI #### UI
- Sessions survive page reloads and expire after 7 days without use; access tokens are never stored in the browser. - Overview page with live counters of rooms, participants, publishers, egress, ingress and agents linked to their
- Responsive shell with sidenav, global search, global time range, auto-refresh at every screen size and theme toggle; lists, today's figures, recent rooms, the data pipeline health (writer and nodes reporting) and stale-data notices.
the OpenVidu version, edition badge and documentation links sit at the bottom of the sidenav. - Participants page with live refresh: active participants, sessions in range and active services; search participant
sessions by identity or SID, filter by kind (standard participants by default), status, room and publishers, sort by
join, leave and duration, and see the sources each session published.
- Agents page listing agent sessions with a live counter and the agent sessions of the range, searchable by identity
and sortable by join, leave and duration.
- One time range for every page, with presets, custom ranges and any time zone; the range picker warns while the start
of the range predates the retention of the page's data.
- Every list, chart and detail view is reproducible from its URL; Back restores filters, sort and page, and the time
zone picked in the range picker or the header zone chip applies to every page of the session.
- Global search, and one search box with hints on every list: an exact ID shows its entity whatever the range and
filters, and Enter opens it. Empty lists offer Clear filters and Widen range, and an unknown ID says so.
- Server status banners on every page: no analytics data received, schema and migration progress; they follow the - Server status banners on every page: no analytics data received, schema and migration progress; they follow the
server even with auto-refresh off, and the connectivity and no-data banners appear only after two bad results in a server even with auto-refresh off, and the connectivity and no-data banners appear only after two bad results in a
row. row.
- The LIVE label reads paused while auto-refresh is off and stale when data stops arriving, judged with the writer's - A LIVE label that reads paused while auto-refresh is off and stale when data stops arriving, judged with the writer's
batch interval, and keeps its width in every state. batch interval.
- Auto-refresh offers one interval for every live view; a page that cannot refresh now, such as an ended room, shows
why on the disabled interval control, and Analytics refreshes only on demand.
- Every list, chart and detail view is reproducible from its URL; Back restores filters, sort and page. The time zone
picked in the range picker or the header zone chip applies to every page of the session.
- The range picker warns while the start of the range predates the retention of the page's data: entities on the
lists, daily rollups on Analytics.
- Lists share one search box with hints; an exact ID shows its entity whatever the range and filters, and Enter opens
it. Empty lists offer Clear filters and Widen range, and an unknown ID says so.
- Tables show every selected column and scroll sideways when they do not fit, turn into cards only on phones, keep
their rows while they refresh and show skeletons only before their first data.
- Enum values read as friendly labels, durations count up live and charts update in place without replaying their
animation; every time-series chart names its bucket and time zone.
- Info icons next to tiles, cards, charts and columns explain the terms they show, such as participant sessions and - Info icons next to tiles, cards, charts and columns explain the terms they show, such as participant sessions and
unique identities; they open on hover, keyboard focus or a tap. unique identities; they open on hover, keyboard focus or a tap.
- PRO features appear locked in CE with a short explanation and a link.
- Settings page with viewer preferences (any time zone as the default) and an About tab with the OpenVidu version, the - Settings page with viewer preferences (any time zone as the default) and an About tab with the OpenVidu version, the
migration progress while it runs, the retention per data class and the storage. migration progress while it runs, the retention per data class and the storage.
- KPI tiles spread evenly over the fewest rows that fit, on every page. - PRO features appear locked in CE with a short explanation and a link.
- Light and dark themes meeting WCAG AA, self-hosted fonts and icons.
- Rooms list with status, name or SID and feature filters, sorts by start, end, duration, unique identities and
active participants, summary tiles and live refresh.
- Participants page with live refresh: active participants, sessions in range and active services; search participant
sessions by identity or SID, filter by kind (standard participants by default), status, room and publishers, sort
by join, leave and duration, and see the sources each session published.
- Agents page listing agent sessions with a live counter and the agent sessions of the range, searchable by identity
and sortable by join, leave and duration.
- Egress list searchable by room name or egress ID, with type, status and room filters, sorts by start, end and
duration, summary tiles and live refresh.
- Ingress list of the ingresses created, used or publishing in the range, searchable by name or ID, with input type and
status filters, sorts by creation, total duration, sessions and last session, summary tiles and live refresh.
- Analytics page with rooms, participants, client, data transferred, egress and ingress (with the input type)
sections over the global range, loaded on demand, with CSV export; every series of a chart has its own colour, and
a section without data shrinks to its "No data in this range" message.
- Overview page with live counters of rooms, participants, publishers, egress, ingress and agents linked to their
lists, today's figures, recent rooms, the data pipeline health (writer and nodes reporting) and stale-data notices.
#### Data #### Data
- New analytics data model: one document per room session, participant session, published track, subscription, - New analytics data model: one document per room session, participant session, published track, subscription,
egress, ingress and ingress session, plus raw events, statistics time series and 5-minute, hourly and daily egress, ingress and ingress session, plus raw events, statistics time series and 5-minute, hourly and daily rollups
rollups, with a schema version that the server and the dashboard check at startup. (API calls by method, ingress sessions by input type), with a schema version that the server and the dashboard check
- The server writes the new analytics model in idempotent per-node batches, with a retention per data class. at startup.
- The server writes the analytics model in idempotent per-node batches, with a retention per data class.
- `openvidu.analytics` options `retention` (per data class, in days: `events`, `stats`, `tracks` and `rollups_5min` - `openvidu.analytics` options `retention` (per data class, in days: `events`, `stats`, `tracks` and `rollups_5min`
7 days, `entities` 90 days, `rollups_hourly` 400 days and `rollups_daily`, unlimited unless set), `stats_detail`, 7 days, `entities` 90 days, `rollups_hourly` 400 days and `rollups_daily`, unlimited unless set), `stats_detail`,
`anonymize_ip`, `store_metadata`, `events.store_types`, `queue` and `validation_action`. `anonymize_ip`, `store_metadata`, `events.store_types`, `queue` and `validation_action`.
- API calls to the server are counted per method in the hourly and daily rollups. - Legacy analytics data is migrated to the new model automatically.
- Hourly and daily rollups count ingress sessions by input type. - Versioned API under `/api/v1`: rooms, participants and agents, egress and ingress lists with their summaries, sorted
- Each server node records its analytics batch interval with every heartbeat. by metrics (durations, end times, counters) within a range limit reported by `GET /api/v1/info`; an exact ID always
- Egress documents carry their room name in lower case, indexed for the room name search; ingress definitions are finds its entity whatever the range and filters, and active rooms and participants carry a `stale` flag.
indexed by the start of their last session.
- Participant counts, sessions, minutes, unique identities and client breakdowns count standard participants only;
egress, ingress, agent and SIP sessions are counted apart, by kind.
- Participants, tracks and subscriptions left by a crashed or stopped server node are closed by the server within 2
minutes, and their rooms with the last of their sessions once LiveKit's dead node cleanup released them, with an end
time accurate to 30 s (`openvidu.analytics.reconciler` options `enabled`, `interval` and `max_closures_per_run`).
- A recording lost with its node is reported as failed, never as complete.
- Legacy analytics data is migrated to the v2 model automatically.
- Lists sort by metrics (durations, end times, counters) within a range limit reported by `GET /api/v1/info`, an exact
ID always finds its entity whatever the range and filters, and active rooms and participants carry a `stale` flag.
- Rooms API: `/api/v1/rooms` and `/rooms/summary`, with rooms sorted by start, end, duration, unique identities and
active participants.
- Participants API: `/api/v1/participants`, `/participants/summary` and `/api/v1/agents` with search, with sessions
sorted by join, leave and duration, filtered by publishers and listing their published sources.
- Egress API: `/api/v1/egresses` and `/egresses/summary`, with egresses sorted by start, end and duration and searched
by their own room name.
- Ingress API: `/api/v1/ingresses` and `/ingresses/summary`, where the range selects the ingresses created, used or
publishing in it, sorted by creation, total duration, sessions or last session.
- Analytics API: `/api/v1/analytics/series`, `/breakdowns`, `/summary` and `/export.csv`, read from the rollup - Analytics API: `/api/v1/analytics/series`, `/breakdowns`, `/summary` and `/export.csv`, read from the rollup
collections, ingress sessions, their durations and their input types included. collections.
- Overview API: `GET /api/v1/overview` with live counters, today's totals and recent rooms. - Overview API: `GET /api/v1/overview` with live counters, today's totals and recent rooms.
- Status API: `GET /api/v1/status` with the schema status, migration progress, writer health and the writer's batch - Status API: `GET /api/v1/status` with the schema status, migration progress, writer health and the writer's batch
interval, from which the writer, node and stale-data windows widen for slow batches. interval, from which the writer, node and stale-data windows widen for slow batches.
#### Deployment #### Deployment
- The CE dashboard is open source, in `openvidu-dashboard/` of the OpenVidu repository, with its image build and tests.
- `openvidu.analytics.migration.*` settings control the migration. - `openvidu.analytics.migration.*` settings control the migration.
- Analytics durations accept days (`7d`, `1d12h`), and the server refuses to start on a retention above the MongoDB TTL - Analytics durations accept days (`7d`, `1d12h`), and the server refuses to start on a retention above the MongoDB TTL
limit, an entity retention under 2 days or a daily rollup retention shorter than the hourly one, naming the key. limit, an entity retention under 2 days or a daily rollup retention shorter than the hourly one, naming the key.
@ -125,8 +88,7 @@ entries under `UI` (what an administrator sees), `Data` (what is stored and how
DocumentDB. DocumentDB.
- The dashboard refuses to start (exit code 3) against an OpenVidu server whose analytics schema is older than it - The dashboard refuses to start (exit code 3) against an OpenVidu server whose analytics schema is older than it
supports, and reports a newer or uninitialized schema in `GET /api/v1/info`. supports, and reports a newer or uninitialized schema in `GET /api/v1/info`.
- The backend entry accepts a `healthcheck` argument for container health checks, and the image declares a Docker - The image declares a Docker `HEALTHCHECK`, through the `healthcheck` argument of the backend entry.
`HEALTHCHECK` with it.
- `GET /api/v1/health` and `GET /api/v1/ready` probes. - `GET /api/v1/health` and `GET /api/v1/ready` probes.
- Login is rate limited per IP (10 failed attempts per 15 minutes). - Login is rate limited per IP (10 failed attempts per 15 minutes).
- Settings `DASHBOARD_JWT_SECRET`, `DASHBOARD_REFRESH_TOKEN_TTL`, `DASHBOARD_COOKIE_SECURE`, `DASHBOARD_TRUST_PROXY`, - Settings `DASHBOARD_JWT_SECRET`, `DASHBOARD_REFRESH_TOKEN_TTL`, `DASHBOARD_COOKIE_SECURE`, `DASHBOARD_TRUST_PROXY`,
@ -134,19 +96,38 @@ entries under `UI` (what an administrator sees), `Data` (what is stored and how
### Improved ### Improved
#### UI
- Sign-in sessions survive page reloads and expire after 7 days without use, with no credential or access token
stored in the browser.
- The shell works at every screen size, with the OpenVidu version, the edition badge and documentation links at the
bottom of the sidenav.
- The Rooms list covers any range instead of the active rooms and those closed in the last 28 days, with status, name
or SID and feature filters, sorts by start, end, duration, unique identities and active participants, summary tiles
and live refresh.
- Egress and ingress get a list each instead of one shared page. Egress: searchable by room name or egress ID, with
type, status and room filters and sorts by start, end and duration. Ingress: the ingresses created, used or
publishing in the range, searchable by name or ID, with input type and status filters and sorts by creation, total
duration, sessions and last session. Both with summary tiles and live refresh.
- Analytics covers any range instead of four fixed periods, loads on demand and exports CSV, with rooms, participants,
client, data transferred, egress and ingress (with the input type) sections; every series of a chart has its own
colour, and a section without data shrinks to its "No data in this range" message.
- Auto-refresh offers one interval for every live view; a page that cannot refresh now, such as an ended room, shows
why on the disabled interval control.
- Tables show every selected column and scroll sideways when they do not fit, turn into cards only on phones, keep
their rows while they refresh and show skeletons only before their first data.
- Enum values read as friendly labels, durations count up live and charts update in place; every time-series chart
names its bucket and time zone.
- Light and dark themes meet WCAG AA, with self-hosted fonts and icons.
#### Data #### Data
- Participant counts, sessions, minutes, unique identities and client breakdowns count standard participants only;
egress, ingress, agent and SIP sessions are counted apart, by kind.
- Participants, tracks and subscriptions left by a crashed or stopped server node are closed within 2 minutes, and
their rooms with the last of their sessions once LiveKit's dead node cleanup released them, with an end time accurate
to 30 s (`openvidu.analytics.reconciler` options `enabled`, `interval` and `max_closures_per_run`); a recording lost
with its node is reported as failed.
- Analytics events and statistics queued in a node are written before it stops on a graceful shutdown. - Analytics events and statistics queued in a node are written before it stops on a graceful shutdown.
- Credentials are never stored in the analytics database; metadata is stored only with `store_metadata`, and client - Credentials are never stored in the analytics database; metadata is stored only with `store_metadata`, and client
IP addresses are left out unless `anonymize_ip: false`. IP addresses are left out unless `anonymize_ip: false`.
#### Deployment
- On `SIGTERM` the dashboard closes its connections and exits within 5 seconds, also while it is still starting.
- Smaller image without time zone data, on `node:24-trixie-slim`.
### Fixed
#### UI
- The node filter of the Rooms list is shown locked in CE instead of hidden.