Store Inspector
The Store Inspector (/raw) gives you direct read access to CritterWatch's live frontend state — every Pinia store the SPA holds, plus a rolling log of every SignalR message the page has received. It is a debugging surface, not a production dashboard.
Reach for it when something looks wrong on a regular page and you want to verify the underlying state, or when a SignalR message isn't producing the expected UI update and you need to see whether the message arrived at all.
When to use it
- A service shows stale metrics and you want to confirm whether the metrics store has the new bucket
- An alert isn't appearing in the dashboard and you want to check the alert store
- A SignalR message you expected isn't producing a UI update — the message log shows whether it arrived
- A specific filter selection looks wrong and you want to see what
filtersStore.selectedServiceIdactually holds
Page layout
The page is split into two sections.
Recent SignalR Messages
A bounded ring buffer of recent messages, both received from the BFF and sent back. Each row:
| Column | Meaning |
|---|---|
| Time | Wall-clock time the message hit the page |
| Direction | Received (green) or Sent (orange) |
| Type | The CloudEvents type discriminator (alert_raised, node_added, etc.) |
| Payload | "View" button — opens a popover with the formatted JSON envelope |
The Clear button empties the buffer. The buffer is in-memory only; reloading the page resets it.
Stores
Below the message log, an accordion lists every Pinia store the page registers. Each panel shows the formatted JSON of the store's exposed state:
| Store | What it holds |
|---|---|
| Services | All ServiceSummary documents pushed via AllServiceSummaries and incremental events |
| Metrics | Per-service per-message-type metric buckets |
| Dead Letters | DLQ summaries and total count |
| Alerts | Active alert list |
| Events | Stream events, stream state, and recent query results |
| Scheduled Messages | Scheduled message summaries and detail rows |
| Filters | Selected service id and other global filters |
| Durability | Filtered durability views |
| Projections | Filtered projection list |
| Connection | SignalR connection status |
Click a store name to expand its JSON. Expanded panels persist across renders so you can keep one open while clicking around in another tab.
Search
The top-right search box filters the stores list to those whose JSON contains the search text. Useful for "which store has my service id?" or "which store still references this stale tenant?"
The search is a substring match against the formatted JSON; case-insensitive. It does not filter individual rows within a store — the smallest unit of filtering is a whole store panel.
Important notes
- This is the frontend state, not the database. The stores reflect what the SPA has received. To inspect CritterWatch's persisted Marten documents, run a SQL query against the database directly or use the Marten dev tools.
- The state is read-only here. This page does not let you edit Pinia state. To change behaviour, use the dedicated control surface (the action buttons on a service detail page, the Alert Configuration page, the Settings page, etc.).
- The message log is per-page-load. Closing the page or reloading clears it.
- High-frequency stores are noisy. The Metrics store updates on every metric bucket; the Events store updates on every event-store query. Don't expect a stable JSON view while the system is busy — collapse those panels if they're flickering.
Tip
For deeper debugging, the Store Inspector pairs well with the browser devtools' Vue panel — the Pinia state is also exposed there with a richer time-travel UI. The Store Inspector is the right call when you want a quick read without leaving the SPA.
