Raven Docs

Observability

Real connection history, real diagnostics — never fabricated, never infrastructure internals.

Every error and connection Raven shows you is a Raven concept — never a raw SFU, TURN, or database error surfaced directly. That translation happens in one place server-side (see Error Codes), so a developer never has to learn a dependency's error vocabulary to understand their own application.

What's tracked

  • Connections — one row per RTC participant session: state, region, SDK version, platform, reconnect count, and — once a client reports them — real media-quality stats (RTT, jitter, packet loss, bitrate, codec). See Diagnostics.
  • Errors — classified into a Raven-facing category (TOKEN_ERROR, ICE_ERROR, TURN_ERROR, ...) with a plain-language likely cause and suggested action, always hedged rather than stated as certain.
  • Chat connections — WebSocket sessions, their gateway, and message throughput, without ever exposing message content in the dashboard's overview.
  • Audit log — administrative actions. See Audit Logs.

How connection data arrives

@corvidhq/rtc best-effort POSTs telemetry events to /v1/telemetry/events, authenticated with the same RTC token the client already holds. This is deliberately never able to affect the call it's describing:

  • Fire-and-forget — no caller ever awaits a telemetry send.
  • Every failure (network error, non-2xx, unreachable endpoint) is swallowed at the SDK level.
  • A malformed individual event fails that one ingest request; it never touches the connection it's describing.

Health checks

/health reports ok only when every real dependency — Postgres, Redis, the SFU, TURN — actually responds, each bounded by a timeout so a hung dependency degrades the health check rather than hanging it indefinitely. A health check that hangs is worse than one that honestly reports a fault.

Retention

Connection and error history isn't kept forever. Configure retention per your own compliance needs; the default favors debugging a recent incident over storing everything indefinitely.

Privacy

Message content is never included in the developer-facing observability surface. raven chat conversations and the dashboard's chat views show counts, participants, and timestamps — never text. The CLI states this explicitly in its own output rather than silently omitting the field.

What's not built yet

There's no alerting layer — Raven records the data; wiring it to PagerDuty or Slack is presently on you, via the REST API or webhooks. Stated plainly rather than implied, per this project's own standard for documenting what exists.