Dashboard / Telemetry — Data & read/write tables
Database view and external concepts the Dashboard reads. Convention: 📖 READ, ✏️ WRITE (insert/update).
The Dashboard is a read-only aggregate: it writes to no domain table. All data sources come from other domains; the only write operation is telemetry (out-of-band, not domain data).
Data read
| Area | Data |
|---|---|
| Booking metrics | TermBooking (StatusId, BillingId), TermBookingOrder (StatusId=300) 📖 READ — source of revenue/booking stats. |
| Attendance | TermAttendance (RollCallStatusId, SignInKeyedOn, AttendeeId) 📖 READ — source of onsite/hourly flow. |
| Account/Attendee | BusinessUnitAccount, BusinessUnitAttendee, Org_Account, Org_Attendee 📖 READ — membership + site assignment. |
| Site/BU scope | BusinessUnit (active), Org (active site) 📖 READ — validate BU/site scope. |
| Program | Program (Capacity), ProgramCategory 📖 READ — booking grouping by category. |
| Unified statistics | IStatisticsService provider methods 📖 READ — shared source for Dashboard, Booking Manager and wired managers. |
| Cache | Cache key/TTL of DashboardCacheService (Redis/in-memory) — no event-driven invalidation. |
Writes outside domain tables
| Area | Data |
|---|---|
| Telemetry | Application Insights: AuthenticatedUserId + custom property userName ✏️ WRITE (only into telemetry, not into domain tables). |
| Cache operations | /api/Statistics/refresh, /invalidate, /cache/status ✏️/📖 — read-model refresh/invalidate/status; no domain writes. |
Data from other domains
| Domain | What the dashboard reads it for |
|---|---|
| Booking | TermBooking/TermBookingOrder StatusId + BillingId for revenue/booking stats. |
| Master Data | BusinessUnit, Org/Site, Account, Attendee, Program/Category for scoping and grouping. |
| Platform | The BU's IANA timezone for HourlyFlow/peak hour and DST. |
Related
- Architecture & data — cache TTL, validation, timezone, telemetry.
- Booking — booking states and data sources.
Real-world example: The booking cache has an old entry. → Use
/api/Statistics/invalidatefor the pattern or refresh the matching type; never edit page totals directly.