Turns the admin panel into a real monitoring tool so production bugs are visible instead of silent. - Error & crash tracking: error_events table (migration 0010) + logError() helper + /api/errors ingest; global-error.tsx and (app)/error.tsx report crashes automatically; /admin/errors viewer (recent + grouped, filters). - Full audit-log viewer at /admin/audit over the existing audit_log (all actions, not just auth) with action/resource/family/user/text filters. - AI observability at /admin/ai over ai_usage: per-intent latency (avg/p95), tokens, cost, daily trend, slowest calls, medical-redirect count. - System health at /admin/health: DB latency, migration status, recent error volume, and integration config presence. - Sidebar updated with Health / Errors / Audit Log / AI Usage. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
22 lines
1.1 KiB
SQL
22 lines
1.1 KiB
SQL
-- Error / crash tracking. Captures both client-side React errors (via the
|
|
-- error boundaries that POST to /api/errors) and server-side failures (via
|
|
-- logError() in src/lib/error-log.ts). Surfaced in the admin panel at
|
|
-- /admin/errors so production bugs are visible instead of silent.
|
|
CREATE TABLE IF NOT EXISTS error_events (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
level varchar(20) NOT NULL DEFAULT 'error', -- error | warn | fatal
|
|
source varchar(20) NOT NULL DEFAULT 'client', -- client | server
|
|
message text NOT NULL,
|
|
stack text,
|
|
url text, -- route / pathname where it happened
|
|
digest varchar(120), -- Next.js error digest (server)
|
|
user_id uuid,
|
|
family_id uuid,
|
|
user_agent text,
|
|
metadata jsonb DEFAULT '{}',
|
|
created_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_error_events_created ON error_events (created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_error_events_source ON error_events (source);
|
|
CREATE INDEX IF NOT EXISTS idx_error_events_message ON error_events (message);
|