Files
thrilltrack-explorer/docs/ERROR_LOGGING_FIX_COMPLETE.md
2025-11-03 21:49:21 +00:00

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:

  1. Missing timezone and referrer columns in request_metadata table
  2. Application code expected breadcrumbs to be pre-fetched but wasn't passing environment data
  3. 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 timezone and referrer to database function
  • Updated RequestMetadata interface 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_breadcrumbs table
  • No changes needed - working as expected

Architecture: Full Relational Structure

Following the project's "NO JSON OR JSONB" policy:

  • Breadcrumbs stored in separate request_breadcrumbs table
  • Environment data stored as direct columns (timezone, referrer, user_agent, etc.)
  • No JSONB in active data structures
  • Legacy p_environment_context parameter 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_metadata table
  • log_request_metadata function 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

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)
  • src/lib/requestTracking.ts - Request/error tracking service
  • src/lib/errorHandler.ts - Error handling utilities
  • src/lib/errorBreadcrumbs.ts - Breadcrumb capture system
  • src/lib/environmentContext.ts - Environment data capture
  • src/pages/admin/ErrorMonitoring.tsx - Error monitoring dashboard
  • src/components/admin/ErrorDetailsModal.tsx - Error details modal
  • docs/ERROR_TRACKING.md - Full system documentation
  • docs/LOGGING_POLICY.md - Logging policy and best practices

Next Steps (Optional Enhancements)

  1. Add error trending graphs (error count over time)
  2. Add error grouping by stack trace similarity
  3. Add user notification when their error is resolved
  4. Add automatic error assignment to developers
  5. Add integration with external monitoring (Sentry, etc.)