From d7a16084b55ee99583a698186fb8b60d1c5ac735 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 18 May 2026 23:25:41 -0400 Subject: [PATCH] docs(notification-outbox): add Notification Outbox page to Central UI --- docs/requirements/Component-CentralUI.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/requirements/Component-CentralUI.md b/docs/requirements/Component-CentralUI.md index 6a6d872..cdf55cd 100644 --- a/docs/requirements/Component-CentralUI.md +++ b/docs/requirements/Component-CentralUI.md @@ -65,7 +65,8 @@ Central cluster only. Sites have no user interface. ### Notification List Management (Design Role) - Create, edit, and delete notification lists. -- Manage recipients (name + email) within each list. +- Each notification list has a **`Type`** — `Email` now, with `Teams` and other types planned. The type determines the type-specific targets a list carries. +- Manage recipients (name + email) within each `Email` list. - Configure SMTP settings. ### Site & Data Connection Management (Admin Role) @@ -118,9 +119,18 @@ Central cluster only. Sites have no user interface. - View message details (target, payload, retry count, timestamps). - Retry or discard individual parked messages. +### Notification Outbox (Deployment Role) +- Monitor and manage centrally-delivered notifications. The Notification Outbox dispatches every notification store-and-forwarded from sites and logs each one to the central `Notifications` table. +- **KPI tiles** at the top of the page: queue depth (`Pending` + `Retrying`), stuck count, parked count, delivered in the last interval, and oldest pending age. The KPIs are central-computed on demand from the `Notifications` table. +- A **queryable notification list** filterable by status, type, source site, notification list, and time range, with a **stuck-only toggle** and keyword search on subject. Each row shows the notification's status, retry count, last error, and key timestamps. +- **Retry** and **Discard** actions are available on parked notifications: Retry returns the notification to `Pending` and resets `RetryCount` / `NextAttemptAt`; Discard moves it to `Discarded`. The row is retained either way so the table stays a complete audit record. +- **Stuck rows are visually badged** — a notification is stuck if it is `Pending` or `Retrying` and older than the configurable stuck-age threshold. Stuck detection is display-only; there is no automated escalation or alerting. +- All queries are served from the central `Notifications` table — no remote per-site queries are needed, unlike the Parked Message Management page. + ### Health Monitoring Dashboard (All Roles) - Overview of all sites with online/offline status. - Per-site detail: active/standby node status, data connection health, script error rates, alarm evaluation error rates, store-and-forward buffer depths. +- Headline **Notification Outbox KPI tiles** — queue depth, stuck count, and parked count. These are central-computed by the Notification Outbox from the central `Notifications` table (not part of any site health report). The full outbox view is on the dedicated Notification Outbox page. ### Site Event Log Viewer (Deployment Role) - Query site event logs remotely. @@ -144,3 +154,4 @@ Central cluster only. Sites have no user interface. - **Security & Auth**: Authenticates users and enforces role-based access. - **Configuration Database**: All central data, including audit log data for the audit log viewer. Accessed via `ICentralUiRepository`. - **Health Monitoring**: Provides site health data for the dashboard. +- **Notification Outbox**: Provides notification delivery KPIs and serves the `Notifications` table queries and Retry/Discard actions for the Notification Outbox page.