Skip to main content

Dashboards of reference

Pointers for an operator (or a contributor diagnosing whether their newly-added event is flowing) to find a recent product event in the running system. Each section names a destination, the access path, and which fields the destination carries.

The page is forward-compatible: the SaaS analytics section is a reserved placeholder so a future task can fill it in without restructuring.

Default forward adapter

  • Adapter: LoggingEventsForwardAdapter, source of record at logging_events_forward_adapter.py.
  • Logger name: product_events.forward (one structured JSON line per delivered event).
  • Status: Production — the adapter is wired as the default destination in deployed environments. The exact Cloud Logging filter for finding a specific event in the Cloud console is operator-managed per environment; confirm the live filter with the on-call operator for your target environment before relying on it for verification runs.
  • Fields available per log line:
FieldDescription
event_idServer-assigned id (unique per persisted row).
client_event_idClient-generated id used for dedup.
actor_user_idAuthenticated user id at ingest. null after the user is anonymized.
actor_org_idOrg id, when present.
event_nameCanonical event name (matches an entry on the registry).
propertiesThe event's properties object — PII paths already hashed.
occurred_atClient-side timestamp (ISO-8601), clamped to received_at when missing/malformed.
received_atServer-side timestamp at ingest (ISO-8601).

When the backend's right-to-delete cascade runs against the logging destination, the adapter additionally emits a structured marker (product_event_forward.deletion = "unsupported") so operators can correlate the cascade with the destination's lack of a per-event deletion API (see PII policy — Deletion).

Backend events table

The persisted store behind the channel is the frontend_events table in the canonical backend database.

  • Table: frontend_events.
  • Status: Production — the table is provisioned in deployed environments. The recommended operator access path (read-replica query console, read-only role, or equivalent) is environment-specific; confirm with the on-call operator for your target environment.
  • Indexed for: event_name, actor_user_id, actor_org_id, received_at, plus a partial index for forward-pending rows and a unique constraint on (COALESCE(actor_user_id, 0), client_event_id) for dedup. See the backend data-model for the exhaustive index list.

SaaS analytics destination

  • Status: Not configured yet.

No SaaS analytics destination (PostHog, Mixpanel, Amplitude, or equivalent) has been wired to the channel at the time of publish. The forward adapter contract supports plug-replacement (FR-021 of the backend spec); ops will choose a destination separately and wire it without changing the ingest surface.

This section is reserved at a stable URL so a future dx- task can fill in the destination name, board/dashboard link, and field mapping without restructuring the rest of the page.

See also