Refine IDAA Jitsi reports UX
Add Novi UUID exclusion and known-meeting filtering, default the report date range to the last 60 days, and hide Room Name unless global edit mode is enabled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -183,11 +183,16 @@ fetch(`${api_root_url}/customers/${uuid}`, {
|
||||
|
||||
- **`novi_bb_base_url`**: (optional) Base URL used to build links for Bulletin Board notification emails.
|
||||
|
||||
- **`jitsi_exclude_names`**: (optional) Array of display name strings to exclude from Jitsi Reports.
|
||||
Used to hide known staff and test accounts from the activity report so participant counts and lists
|
||||
reflect real member activity only. Names are matched case-insensitively against `final_participants[].displayName`.
|
||||
Example: `["Scott I.", "Michelle V.", "Brie K."]`. The filter is applied before the "Real meetings only"
|
||||
threshold check — a session with only excluded participants is treated as having 0 real participants.
|
||||
- **`jitsi_exclude_uuids`**: (optional) Array of Novi UUIDs to exclude from Jitsi Reports.
|
||||
This is the canonical staff/test filter. UUIDs are matched case-insensitively against
|
||||
`final_participants[].novi_uuid` when present. Example: `["uuid-1", "uuid-2"]`.
|
||||
|
||||
- **`jitsi_known_meetings`**: (optional) Array of meeting names / room names to keep in the report.
|
||||
When this list is non-empty, only matching `room_name` values are shown. Matching is
|
||||
case-insensitive.
|
||||
|
||||
- **Legacy fallback:** `jitsi_exclude_names` is still honored for older configs, but it should be
|
||||
migrated to UUIDs.
|
||||
|
||||
- **Email config values** (`noreply_email`, `noreply_name`, `admin_email`, `admin_name`): used by functions that send notification emails (BB posts, comments, recovery meetings).
|
||||
|
||||
@@ -461,7 +466,7 @@ Moderation permissions are controlled by `novi_jitsi_mod_li` in the IDAA store.
|
||||
|
||||
An admin/staff reporting tool that aggregates raw Jitsi activity logs into human-readable meeting sessions. It is **not** a member-facing page — IDAA members do not see it.
|
||||
|
||||
**Reminder:** this page is still incomplete. We still need the Novi UUID filter to work and we still need meeting-name whitelist filtering.
|
||||
**Reminder:** this page now filters staff by Novi UUID and can whitelist known meeting names from site config.
|
||||
|
||||
### View Modes
|
||||
|
||||
@@ -480,30 +485,33 @@ Both modes use the same filtered data set — switching views does not reset fil
|
||||
| --- | --- | --- |
|
||||
| **Real meetings only** | off | Show only sessions where `real_participant_count >= 2` OR `duration > 5 min`. Applied **after** staff exclusion (see below). |
|
||||
| **Min. Participants** | 0 | Minimum `real_participant_count` to display a session. |
|
||||
| **Room Name** | (empty) | Case-insensitive substring match against `room_name`. |
|
||||
| **From / To** | (empty) | Date range applied to `start_time`. "To" date includes the full end of day. |
|
||||
| **Room Name** | edit mode only | Case-insensitive substring match against `room_name`. Hidden unless AE global edit mode is on. |
|
||||
| **From / To** | last 60 days / today | Date range applied to `start_time`. "To" date includes the full end of day. |
|
||||
|
||||
A "Reset Filters" button appears whenever any filter is non-default.
|
||||
|
||||
### Staff / Test Exclusion
|
||||
### Staff / Meeting Filtering
|
||||
|
||||
**Problem:** Staff and test accounts (Scott, Michelle, Brie) join real member meetings for setup, testing, and tech support. Their presence inflates participant counts and pollutes the participant list.
|
||||
**Problem:** Staff/test accounts and one-off test rooms distort the reports.
|
||||
|
||||
**Solution:** A configurable exclusion list in `site_cfg_json`:
|
||||
**Site config keys:**
|
||||
```json
|
||||
{ "jitsi_exclude_names": ["Scott I.", "Michelle V.", "Brie K."] }
|
||||
{
|
||||
"jitsi_exclude_uuids": ["uuid-1", "uuid-2"],
|
||||
"jitsi_known_meetings": ["IDAA-BIPOC-Meeting", "IDAA-Sunday-Meeting"]
|
||||
}
|
||||
```
|
||||
|
||||
**How it works (client-side only, no backend change needed):**
|
||||
**How it works:**
|
||||
|
||||
1. On load, the page reads `$ae_loc.site_cfg_json?.jitsi_exclude_names` (string array, defaults to `[]`).
|
||||
2. For every session, a `real_participants` derived list is computed by filtering `final_participants` against the exclusion list (case-insensitive display name match).
|
||||
3. `real_participant_count = real_participants.length` — this count drives all filters, stats, and the participant list column in grouped view.
|
||||
4. The raw `final_participant_count` from the API is never shown to the user once an exclusion list is configured.
|
||||
1. The page reads `$ae_loc.site_cfg_json?.jitsi_exclude_uuids` and excludes matching participants by Novi UUID.
|
||||
2. If a participant record does not include a UUID in the activity log, it is left visible; UUIDs are used whenever available.
|
||||
3. `real_participant_count = real_participants.length` drives filters, exports, and the per-meeting attendee count.
|
||||
4. Room-level unique participant counts are computed from Novi UUIDs when present, with display-name fallback only for UUID-less records.
|
||||
5. If `$ae_loc.site_cfg_json?.jitsi_known_meetings` is non-empty, only meetings whose `room_name` matches one of the listed names are shown.
|
||||
6. The Room Name filter is only shown when global edit mode is enabled.
|
||||
|
||||
**Why display-name matching (not Novi UUID):** Jitsi participant data (`meta_json.participants`) only contains `displayName` and `role` — the Novi UUID is not passed through to the activity log. UUID-based exclusion would require a Jitsi config change plus a backend schema update and is deferred. Display names for OSIT staff are stable and controlled.
|
||||
|
||||
**Still pending:** the new Jitsi Reports page still needs a real Novi UUID filter and a whitelist of meeting names so staff can narrow the report set without relying only on display names.
|
||||
**Note:** matching is case-insensitive on the stored `room_name` / meeting name.
|
||||
|
||||
### Summary Stats
|
||||
|
||||
@@ -514,7 +522,7 @@ Shown above the meeting list when data is loaded. Stats reflect the **filtered +
|
||||
- **Avg Duration** — mean session duration (HH:MM:SS)
|
||||
- **Total Duration** — sum of all session durations (HH:MM:SS)
|
||||
|
||||
In grouped view, each room header also shows its own subtotals (meeting count, unique participants).
|
||||
In grouped view, each room header also shows its own subtotals (meeting count, unique participants by Novi UUID when available).
|
||||
|
||||
### Jitsi URL Builder
|
||||
|
||||
@@ -733,4 +741,4 @@ ae_loc.idaa_loc = { novi_uuid: 'test-uuid-value', ... };
|
||||
---
|
||||
|
||||
**Document Status:** ✅ Current
|
||||
**Last Verified:** 2026-05-05 — added Module 5: Jitsi Reports (grouped view, real-meetings filter, staff exclusion via `jitsi_exclude_names`); fixed route tree (`jitsi_reports/` is inside `(idaa)/`)
|
||||
**Last Verified:** 2026-05-06 — added Module 5: Jitsi Reports (grouped view, UUID exclusion, known-meeting whitelist, UUID-based unique counts); fixed route tree (`jitsi_reports/` is inside `(idaa)/`)
|
||||
|
||||
@@ -185,9 +185,8 @@ suddenly jumps to 0 errors, verify it's not because a bad `.d.ts` replaced a pac
|
||||
effect without re-login.
|
||||
|
||||
### [IDAA] Jitsi Reports still incomplete
|
||||
- [ ] **Finish Jitsi Reports filters** — the new Jitsi Reports page still needs a working Novi UUID
|
||||
filter and meeting-name whitelist filtering so staff can narrow the report set without relying on
|
||||
display-name matching alone.
|
||||
- [x] **Finish Jitsi Reports filters** — added Novi UUID exclusion plus meeting-name whitelist
|
||||
filtering, with room-level unique counts based on Novi UUID when present. (2026-05-06)
|
||||
|
||||
### [PWA] Service worker ignoring `chrome-extension://` requests
|
||||
Browser console shows repeated errors:
|
||||
|
||||
Reference in New Issue
Block a user