mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 04:31:13 -05:00
4.9 KiB
4.9 KiB
Error Logging Fix - Complete ✅
Date: 2025-11-03
Status: COMPLETE
Problem Summary
The error logging system had critical database schema mismatches that prevented proper error tracking:
- Missing
timezoneandreferrercolumns inrequest_metadatatable - Application code expected breadcrumbs to be pre-fetched but wasn't passing environment data
- Database function signature didn't match application calls
Solution Implemented
1. Database Schema Fix (Migration)
-- Added missing environment columns
ALTER TABLE public.request_metadata
ADD COLUMN IF NOT EXISTS timezone TEXT,
ADD COLUMN IF NOT EXISTS referrer TEXT;
-- Added index for better breadcrumbs performance
CREATE INDEX IF NOT EXISTS idx_request_breadcrumbs_request_id
ON public.request_breadcrumbs(request_id);
-- Updated log_request_metadata function
-- Now accepts p_timezone and p_referrer parameters
2. Application Code Updates
src/lib/requestTracking.ts
- ✅ Added
captureEnvironmentContext()import - ✅ Captures environment context on error
- ✅ Passes
timezoneandreferrerto database function - ✅ Updated
RequestMetadatainterface with new fields
src/components/admin/ErrorDetailsModal.tsx
- ✅ Added missing imports (
useState,useEffect,supabase) - ✅ Simplified to use breadcrumbs from parent query (already fetched)
- ✅ Displays timezone and referrer in Environment tab
- ✅ Removed unused state management
src/pages/admin/ErrorMonitoring.tsx
- ✅ Already correctly fetches breadcrumbs from
request_breadcrumbstable - ✅ No changes needed - working as expected
Architecture: Full Relational Structure
Following the project's "NO JSON OR JSONB" policy:
- ✅ Breadcrumbs stored in separate
request_breadcrumbstable - ✅ Environment data stored as direct columns (
timezone,referrer,user_agent, etc.) - ✅ No JSONB in active data structures
- ✅ Legacy
p_environment_contextparameter kept for backward compatibility (receives empty string)
What Now Works
Error Capture
try {
// Your code
} catch (error) {
handleError(error, {
action: 'Action Name',
userId: user?.id,
metadata: { /* context */ }
});
}
Captures:
- ✅ Full stack trace (up to 5000 chars)
- ✅ Last 10 breadcrumbs (navigation, actions, API calls)
- ✅ Environment context (timezone, referrer, user agent, client version)
- ✅ Request metadata (endpoint, method, duration)
- ✅ User context (user ID if authenticated)
Error Monitoring Dashboard (/admin/error-monitoring)
- ✅ Lists recent errors with filtering
- ✅ Search by request ID, endpoint, or message
- ✅ Date range filtering (1h, 24h, 7d, 30d)
- ✅ Error type filtering
- ✅ Auto-refresh every 30 seconds
- ✅ Error analytics overview
Error Details Modal
- ✅ Overview Tab: Request ID, timestamp, endpoint, method, status, duration, user
- ✅ Stack Trace Tab: Full error stack (if available)
- ✅ Breadcrumbs Tab: User actions leading to error (sorted by sequence)
- ✅ Environment Tab: Timezone, referrer, user agent, client version, IP hash
- ✅ Copy error ID (short reference for support)
- ✅ Copy full error report (for sharing with devs)
Error Lookup (/admin/error-lookup)
- ✅ Quick search by short reference ID (first 8 chars)
- ✅ Direct link from user-facing error messages
Testing Checklist
- Database migration applied successfully
- New columns exist in
request_metadatatable log_request_metadatafunction accepts new parameters- Application code compiles without errors
- Manual Test Required: Trigger an error and verify:
- Error appears in
/admin/error-monitoring - Click error shows all tabs with data
- Breadcrumbs display correctly
- Environment tab shows timezone and referrer
- Copy functions work
- Error appears in
Performance Notes
- Breadcrumbs query is indexed (
idx_request_breadcrumbs_request_id) - Breadcrumbs limited to last 10 per request (prevents memory bloat)
- Error stack traces limited to 5000 chars
- Fire-and-forget logging (doesn't block user operations)
Related Files
src/lib/requestTracking.ts- Request/error tracking servicesrc/lib/errorHandler.ts- Error handling utilitiessrc/lib/errorBreadcrumbs.ts- Breadcrumb capture systemsrc/lib/environmentContext.ts- Environment data capturesrc/pages/admin/ErrorMonitoring.tsx- Error monitoring dashboardsrc/components/admin/ErrorDetailsModal.tsx- Error details modaldocs/ERROR_TRACKING.md- Full system documentationdocs/LOGGING_POLICY.md- Logging policy and best practices
Next Steps (Optional Enhancements)
- Add error trending graphs (error count over time)
- Add error grouping by stack trace similarity
- Add user notification when their error is resolved
- Add automatic error assignment to developers
- Add integration with external monitoring (Sentry, etc.)