# Workflow 01: Capture Browser Logs **Purpose**: Capture and retrieve all browser-side logs from DSS dashboard for debugging **When to Use**: - User reports dashboard not loading - JavaScript errors in browser - Network request failures - Performance issues - Configuration problems **Estimated Time**: 2-5 minutes --- ## Prerequisites - Dashboard accessible (https://dss.overbits.luz.uy/ or http://localhost:3456/admin-ui/index.html) - Browser DevTools available (Chrome, Firefox, Edge, Safari) - Browser logger module loaded (browser-logger.js) --- ## Step-by-Step Procedure ### Step 1: Open DSS Dashboard **Action**: ``` Navigate to: https://dss.overbits.luz.uy/ Or local: http://localhost:3456/admin-ui/index.html ``` **Expected Result**: Dashboard loads (may require credentials) **Troubleshooting**: - If 401 Unauthorized: Provide htpasswd credentials - If connection refused: Check API server running on port 3456 - If 500 error: Check server logs with `journalctl -u dss-api -f` --- ### Step 2: Open Browser DevTools **Action**: ``` Chrome/Edge: F12 or Cmd+Option+I (Mac) or Ctrl+Shift+I (Windows) Firefox: F12 or Cmd+Option+K (Mac) or Ctrl+Shift+K (Windows) Safari: Cmd+Option+C (Mac, requires enabling in Preferences) ``` **Expected Result**: DevTools panel opens at bottom or side of browser **Go to Console Tab**: Click "Console" in the top menu of DevTools --- ### Step 3: Verify Browser Logger is Loaded **Action**: ```javascript // In console, type: window.__DSS_BROWSER_LOGS ``` **Expected Result**: ```javascript { all: ƒ (), errors: ƒ (), network: ƒ (), diagnostic: ƒ (), export: ƒ (), print: ƒ (), clear: ƒ () } ``` **Troubleshooting**: - If `undefined`: Browser logger not loaded. Check Network tab for `/admin-ui/js/core/browser-logger.js` (should be 200 OK) - If 404 on browser-logger.js: File not imported in index.html - Manually load: `import('/admin-ui/js/core/browser-logger.js').then(() => console.log('Loaded'))` --- ### Step 4: Get Diagnostic Summary **Action**: ```javascript window.__DSS_BROWSER_LOGS.diagnostic() ``` **Expected Result**: ```javascript { sessionId: "session-1733456789-xyz123", uptime: 45230, // ms since page load totalLogs: 127, errorCount: 3, warnCount: 5, networkRequests: 12, memory: { usedJSHeapSize: 15728640, jsHeapSizeLimit: 2172649472, usagePercent: "0.72" }, url: "https://dss.overbits.luz.uy/", userAgent: "Mozilla/5.0...", recentErrors: [...], // Last 5 errors recentNetworkRequests: [...] // Last 5 requests } ``` **Analysis**: - `errorCount > 0`: Check recentErrors for critical issues - `networkRequests == 0`: No API calls made (possible config issue) - `usagePercent > 80`: Memory leak or performance issue --- ### Step 5: Retrieve Specific Log Types **Get All Errors**: ```javascript window.__DSS_BROWSER_LOGS.errors() ``` **Get Network Activity**: ```javascript window.__DSS_BROWSER_LOGS.network() ``` **Get All Logs**: ```javascript window.__DSS_BROWSER_LOGS.all() ``` **Expected Result**: Array of log entries with timestamps, levels, categories, messages, and data **Analysis Tips**: - Look for `level: 'error'` entries first - Check `category: 'fetchError'` for failed API calls - Check `status: 404` or `status: 500` in network logs - Check `category: 'uncaughtError'` for JavaScript exceptions --- ### Step 6: Search for Specific Issues **Search by Keyword**: ```javascript window.__DSS_BROWSER_LOGGER.getLogs({ search: 'config', // Search term level: 'error', // Filter by level limit: 50 // Max results }) ``` **Search by Time Range**: ```javascript const oneHourAgo = Date.now() - (60 * 60 * 1000); window.__DSS_BROWSER_LOGGER.getLogs({ minTime: oneHourAgo, limit: 100 }) ``` **Expected Result**: Filtered log entries matching criteria --- ### Step 7: Export Logs for Analysis **Export as JSON**: ```javascript const data = window.__DSS_BROWSER_LOGS.export(); console.log(JSON.stringify(data, null, 2)); ``` **Download to File**: ```javascript const data = window.__DSS_BROWSER_LOGS.export(); const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'dss-browser-logs-' + Date.now() + '.json'; a.click(); ``` **Expected Result**: - JSON export displays in console - File downloads with name like `dss-browser-logs-1733456789000.json` --- ### Step 8: Send Logs to Server (Optional) **Manual Upload**: ```javascript const logs = window.__DSS_BROWSER_LOGS.export(); fetch('/api/browser-logs', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(logs) }).then(r => r.json()).then(console.log); ``` **Expected Result**: ```json { "status": "stored", "sessionId": "session-1733456789-xyz123" } ``` **Retrieve from Server**: ```bash curl http://localhost:3456/api/browser-logs/session-1733456789-xyz123 ``` --- ## Common Issues and Solutions ### Issue 1: No Logs Captured **Symptoms**: `totalLogs: 0` or empty arrays **Causes**: - Browser logger loaded after app initialized - Logger not intercepting console calls - Storage disabled (private browsing) **Solution**: 1. Reload page with DevTools open 2. Check browser-logger.js import order (should be first) 3. Check console for storage errors --- ### Issue 2: Logs Not Persisting Across Reloads **Symptoms**: Logs disappear on page refresh **Causes**: - sessionStorage disabled - Private/Incognito mode - Storage quota exceeded **Solution**: 1. Check browser privacy settings 2. Use regular browsing mode 3. Clear old logs: `window.__DSS_BROWSER_LOGS.clear()` --- ### Issue 3: Network Logs Missing **Symptoms**: `networkRequests: 0` but API calls visible in Network tab **Causes**: - Browser logger loaded after fetch calls - Using XMLHttpRequest instead of fetch - API calls made before logger init **Solution**: 1. Ensure browser-logger.js is first script loaded 2. Reload page to capture from start 3. Check if app uses XMLHttpRequest (not currently intercepted) --- ## Success Criteria - ✅ Diagnostic shows session info and uptime - ✅ Logs captured for errors, warnings, network requests - ✅ Can export logs as JSON - ✅ Can search and filter logs - ✅ Memory usage tracked --- ## Next Steps After capturing browser logs: 1. **If errors found**: Use Workflow 02 (Diagnose Errors) 2. **If performance issues**: Use Workflow 03 (Debug Performance) 3. **If API failures**: Check server logs with `journalctl -u dss-api -f` 4. **If configuration issues**: Check `/api/config` endpoint response --- ## Related Documentation - `.dss/BROWSER_LOG_CAPTURE_PROCEDURE.md` - Detailed browser logger documentation - `.dss/GET_BROWSER_LOGS.sh` - Quick reference hook script - `admin-ui/js/core/browser-logger.js` - Logger source code - `.dss/MCP_DEBUG_TOOLS_ARCHITECTURE.md` - Overall debug architecture --- ## MCP Tool Access **From Claude Code**: ``` Use tool: dss_get_browser_diagnostic Or: dss_get_browser_errors Or: dss_get_browser_network ``` These MCP tools automatically retrieve browser logs via the API layer.