Analytics Dashboard
Admin-only usage telemetry. Monitor who uses the app, from where, which endpoints they hit, and what happened recently.
Open Dashboard ↗Access
- Route:
/dashboard— admin users only. Non-admin sessions receive403 Forbidden. - From the app: Settings → Account & tools → Dashboard.
- Data source: reads from
/api/dashboard/analytics/summary, which queries the local SQLite analytics DB.
Top Controls
- Hide local IPs: removes RFC-1918 / loopback traffic from all charts and tables — useful when testing locally.
- Show last N: limits how many recent events are loaded into the page (default 500). Raise it to inspect older activity.
- Refresh: fetches a fresh snapshot from the server. All widgets update together.
What Each Panel Shows
- KPI row: three headline numbers — unique users, unique IPs, and users active in the last 10 minutes.
- World map: choropleth of request volume by country. Click a country to filter the entire page.
- Country table: ranked list of countries with request counts. Synced with the map filter.
- Recent scatter: recency-vs-concentration view showing where activity clusters in time.
- Users chart: stacked or grouped bar chart of traffic by user account across the selected time window.
- API groups: breakdown of endpoint families (chat, audio, admin, etc.) with a drill-down into individual paths.
- Detail table: full event log — timestamp, username, method, path, IP, country, group/subgroup, and user agent.
Filtering Workflow
- Select a country on the map or country table → geography filter applied.
- Click an API group chip → narrows to that endpoint family.
- Click a username in the users chart or detail table → isolates one account.
- Use the "Clear" action next to any active filter to remove it.
Filters compose: all active filters are ANDed together. The KPI row, charts, and detail table always reflect the current filtered subset.
Troubleshooting
- 403 page: your account is not in the admin allowlist in
config.py. - No data: confirm the analytics DB has events logged (check
log/server.out.log) and click Refresh. - Map does not render: ECharts assets are missing from
/js/— re-runscripts/init.sh. - Counts look low: check if "Hide local IPs" is on and filtering out most of your traffic.