mirror of https://github.com/OpenVidu/openvidu.git
60 lines
3.2 KiB
Markdown
60 lines
3.2 KiB
Markdown
## MODIFIED Requirements
|
|
|
|
### Requirement: Signal and data pseudo-tracks
|
|
Edition: CE and PRO. Stats whose track id starts with `TR_SG` or `TR_DT` SHALL NOT produce `track_stats`
|
|
documents; their bytes SHALL be added to the participant's `bytes` for their direction and `lastStatsAt`
|
|
SHALL be updated on the participant and on its room, without adding bytes or quality samples to the room.
|
|
|
|
#### Scenario: Signal-only participant
|
|
- **GIVEN** a participant whose flush contains only `TR_SG…` upstream and downstream stats
|
|
- **WHEN** it is stored
|
|
- **THEN** no `track_stats` document is written, the participant's `bytes.up` and `bytes.down` grow by the sample bytes, and the participant's and the room's `lastStatsAt` equal the flush time while the room's `bytes` and `quality` are unchanged
|
|
|
|
### Requirement: Node heartbeat
|
|
Edition: CE and PRO. On every batch tick, including empty batches, the writer SHALL upsert the node's
|
|
`nodes` document with `lastSeenAt`, `serverVersion`, `region`, `batchIntervalMs` (the configured
|
|
`openvidu.analytics.interval` in milliseconds) and `mediaStats`, setting `firstSeenAt` on insert.
|
|
|
|
#### Scenario: Idle node
|
|
- **GIVEN** a node with no traffic for ten minutes
|
|
- **WHEN** `nodes` is read
|
|
- **THEN** its document has `lastSeenAt` within the last batch interval and `firstSeenAt` unchanged
|
|
|
|
#### Scenario: Configured interval published
|
|
- **GIVEN** `openvidu.analytics.interval: 30s`
|
|
- **WHEN** a batch tick runs
|
|
- **THEN** the node's document has `batchIntervalMs: 30000`
|
|
|
|
#### Scenario: Interval changed on restart
|
|
- **GIVEN** a node document with `batchIntervalMs: 10000`
|
|
- **WHEN** the node restarts with `openvidu.analytics.interval: 60s` and runs a batch tick
|
|
- **THEN** its document has `batchIntervalMs: 60000` and `firstSeenAt` unchanged
|
|
|
|
#### Scenario: Node reporting media statistics
|
|
- **GIVEN** a server that reports media statistics
|
|
- **WHEN** a batch tick runs
|
|
- **THEN** the node's document has `mediaStats: true`
|
|
|
|
## ADDED Requirements
|
|
|
|
### Requirement: Nodes without media statistics
|
|
Edition: CE and PRO. A server whose media engine does not report media statistics SHALL tell the writer so, and the
|
|
writer SHALL then publish `mediaStats: false` on its node document and stamp `mediaStats: false` on the rooms and
|
|
participant sessions it creates, following their `nodeId`; the rooms and sessions of a node that reports them carry no
|
|
`mediaStats` field.
|
|
|
|
#### Scenario: Room created on such a node
|
|
- **GIVEN** a node whose server does not report media statistics
|
|
- **WHEN** it writes `ROOM_CREATED` and `PARTICIPANT_JOINED` of a new room
|
|
- **THEN** its `nodes` document has `mediaStats: false`, and the room and the participant session both have `nodeId` of that node and `mediaStats: false`
|
|
|
|
#### Scenario: Room created on a node reporting media statistics
|
|
- **GIVEN** a node whose server reports media statistics
|
|
- **WHEN** it writes `ROOM_CREATED` and `PARTICIPANT_JOINED`
|
|
- **THEN** neither the room nor the participant session has a `mediaStats` field
|
|
|
|
#### Scenario: Room touched first by another node
|
|
- **GIVEN** a room document created by an egress event written by a node reporting media statistics, without `mediaStats`
|
|
- **WHEN** a node that does not report them writes its `ROOM_CREATED`
|
|
- **THEN** the room has that node's `nodeId` and `mediaStats: false`
|