Skip to content

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.selectedServiceId actually 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:

ColumnMeaning
TimeWall-clock time the message hit the page
DirectionReceived (green) or Sent (orange)
TypeThe 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:

StoreWhat it holds
ServicesAll ServiceSummary documents pushed via AllServiceSummaries and incremental events
MetricsPer-service per-message-type metric buckets
Dead LettersDLQ summaries and total count
AlertsActive alert list
EventsStream events, stream state, and recent query results
Scheduled MessagesScheduled message summaries and detail rows
FiltersSelected service id and other global filters
DurabilityFiltered durability views
ProjectionsFiltered projection list
ConnectionSignalR 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.

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.

Released under the MIT License.