Dashboard / Telemetry — Tổng quan
Dashboard / Telemetry là domain thống kê vận hành (bảng thống kê vận hành): bảng Analytics Dashboard cho Staff/Admin, Customer Dashboard cho khách hàng, và gán username vào telemetry Application Insights cho việc truy vết.
Dashboard là một read-only query aggregate — không có state, không có domain events, không có state transition. Mọi con số đều được tính từ dữ liệu của các domain khác (Booking, Attendance, Master Data) qua aggregate query + cache TTL.
Hình dung nhanh
Dashboard bao phủ những gì?
| Mảng | Một câu |
|---|---|
| Analytics Dashboard | Bảng thống kê Staff/Admin, scope theo BusinessUnit: attendance, booking, revenue, account/attendee. |
| Customer Dashboard | Trang của khách hàng: thông tin account, booking active, invoice còn nợ, booking calendar. |
| Cache TTL/refresh | Mọi endpoint trả qua cache với TTL riêng; có refresh/invalidate/status API, vẫn eventual consistency và không event invalidation. |
| Validation | BU phải active, fromDate ≤ toDate, site thuộc BU, groupBy whitelist, JWT bắt buộc. |
| User telemetry | Gán AuthenticatedUserId + custom property userName cho request trong Application Insights. |
Implementation hiện tại
/api/Statistics/*và Dashboard dùngIStatisticsServicelàm nguồn thống kê chung; Booking Manager không tự tính lại booking stats từ page rows.- Operator có thể refresh một loại statistic, invalidate theo pattern và xem cache status qua
/api/Statistics/refresh,/invalidate,/cache/status. TTL và stale-data semantics vẫn giữ nguyên; background proactive refresh chưa phải behavior đã chạy.
Đọc theo thứ tự
- Góc nhìn end-user — Staff/Admin và khách hàng thấy gì.
- Khái niệm cốt lõi — sub-aggregate, công thức metric, invariants.
- Kiến trúc & dữ liệu — chuỗi Topi → Tuke → Tux, cache, timezone, telemetry.
- Dữ liệu & bảng đọc/ghi — bảng dashboard đọc từ domain khác.
- Case thường gặp — số liệu lag, timezone, site filter, telemetry.
Liên quan
- Booking — nguồn của
TermBooking/TermBookingOrder(StatusId) và attendance. - Nền tảng dùng chung → Timezone — giờ địa phương BU và DST.
- Master Data — BusinessUnit, Org/Site, Account, Attendee, Program/Category để scope.
Ví dụ thực tế: Sau import booking, operator gọi
POST /api/Statistics/refreshcho đúng type/context. → Read model tính lại; Booking/Invoice không bị mutate.