Files
dss/.dss/BROWSER_LOG_CAPTURE_PROCEDURE.md
Digital Production Factory 276ed71f31 Initial commit: Clean DSS implementation
Migrated from design-system-swarm with fresh git history.
Old project history preserved in /home/overbits/apps/design-system-swarm

Core components:
- MCP Server (Python FastAPI with mcp 1.23.1)
- Claude Plugin (agents, commands, skills, strategies, hooks, core)
- DSS Backend (dss-mvp1 - token translation, Figma sync)
- Admin UI (Node.js/React)
- Server (Node.js/Express)
- Storybook integration (dss-mvp1/.storybook)

Self-contained configuration:
- All paths relative or use DSS_BASE_PATH=/home/overbits/dss
- PYTHONPATH configured for dss-mvp1 and dss-claude-plugin
- .env file with all configuration
- Claude plugin uses ${CLAUDE_PLUGIN_ROOT} for portability

Migration completed: $(date)
🤖 Clean migration with full functionality preserved
2025-12-09 18:45:48 -03:00

329 lines
7.0 KiB
Markdown

# Browser Log Capture Procedure
**Purpose**: Hook to automatically capture and retrieve all browser-side logs from DSS dashboard
---
## Quick Access Commands
When the dashboard is loaded in a browser, open DevTools Console and run:
```javascript
// Get all logs
window.__DSS_BROWSER_LOGS.all()
// Get errors only
window.__DSS_BROWSER_LOGS.errors()
// Get network requests
window.__DSS_BROWSER_LOGS.network()
// Get system diagnostic
window.__DSS_BROWSER_LOGS.diagnostic()
// Export everything as JSON
window.__DSS_BROWSER_LOGS.export()
// Print formatted to console
window.__DSS_BROWSER_LOGS.print()
// Clear logs
window.__DSS_BROWSER_LOGS.clear()
```
---
## Automated Procedure (The Hook)
### Step 1: Browser Logger is Auto-Loaded
The `browser-logger.js` module is automatically initialized when the dashboard loads. It captures:
- ✅ All console.log/warn/error/info/debug calls
- ✅ Uncaught errors and promise rejections
- ✅ Network requests (fetch API)
- ✅ Performance metrics (page load, long tasks)
- ✅ Memory usage warnings
- ✅ Full stack traces
### Step 2: Access Logs Programmatically
**From Browser Console**:
```javascript
// Get diagnostic summary
const diagnostic = window.__DSS_BROWSER_LOGS.diagnostic();
console.table(diagnostic);
// Get last 50 errors
const errors = window.__DSS_BROWSER_LOGS.errors();
console.table(errors);
// Search logs
const rawLogger = window.__DSS_BROWSER_LOGGER;
const searchResults = rawLogger.getLogs({
search: 'config',
limit: 20
});
```
**Export to File**:
```javascript
// Export all logs as JSON
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();
```
### Step 3: API Endpoint for Remote Retrieval
**TODO**: Create `/api/browser-logs` endpoint that allows server to request logs from connected clients.
This would enable:
```bash
curl http://localhost:3456/api/browser-logs
```
---
## What Gets Captured
### Console Output
```javascript
{
timestamp: 1733456789000,
level: 'log|warn|error|info|debug',
category: 'console',
message: 'Application initialized successfully',
data: { args: [...] }
}
```
### Errors
```javascript
{
timestamp: 1733456789000,
level: 'error',
category: 'uncaughtError|unhandledRejection',
message: 'Cannot read property of undefined',
data: {
filename: '/admin-ui/js/core/app.js',
lineno: 42,
colno: 15,
stack: '...'
}
}
```
### Network Requests
```javascript
{
timestamp: 1733456789000,
level: 'network',
category: 'fetch',
message: 'GET /api/config',
data: {
method: 'GET',
url: '/api/config',
status: 200,
statusText: 'OK',
duration: 45,
headers: { 'content-type': 'application/json' }
}
}
```
### Performance Metrics
```javascript
{
timestamp: 1733456789000,
level: 'metric',
category: 'performance',
message: 'Page load completed',
data: {
domContentLoaded: 250,
loadComplete: 450,
totalTime: 1200,
dnsLookup: 5,
tcpConnection: 10,
requestTime: 20,
responseTime: 100,
renderTime: 800
}
}
```
---
## Integration Points
### 1. Add to HTML (Required)
**File**: `/admin-ui/index.html`
Add before other scripts:
```html
<script type="module">
import browserLogger from '/admin-ui/js/core/browser-logger.js';
console.log('[BrowserLogger] Initialized');
</script>
```
Or add to app.js imports:
```javascript
import browserLogger from './core/browser-logger.js';
```
### 2. API Endpoint (Optional)
**File**: `/tools/api/server.py`
Add endpoint to retrieve logs from sessionStorage:
```python
@app.get("/api/browser-logs")
async def get_browser_logs(session_id: str = None):
"""
Endpoint to request browser logs from clients.
The client must POST their logs here, as server
cannot directly access browser sessionStorage.
"""
# Implementation would store logs sent by client
pass
@app.post("/api/browser-logs")
async def receive_browser_logs(logs: dict):
"""Receive and store browser logs from client"""
# Store logs in database or file
pass
```
### 3. Auto-Upload on Error
**File**: `/admin-ui/js/core/browser-logger.js`
Add automatic upload when critical error occurs:
```javascript
captureErrors() {
window.addEventListener('error', (event) => {
this.log('error', 'uncaughtError', event.message, {...});
// Auto-upload on critical errors
if (this.isCriticalError(event)) {
this.uploadToServer();
}
});
}
async uploadToServer() {
const logs = this.exportJSON();
await fetch('/api/browser-logs', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(logs)
});
}
```
---
## Usage Scenarios
### Scenario 1: User Reports Dashboard Not Loading
```javascript
// In browser console
window.__DSS_BROWSER_LOGS.diagnostic()
// Check: errorCount, recent errors, network failures
```
### Scenario 2: Performance Issues
```javascript
window.__DSS_BROWSER_LOGS.network()
// Check: slow requests, failed requests
// Look for requests >1000ms duration
```
### Scenario 3: Debugging Configuration Issues
```javascript
const rawLogger = window.__DSS_BROWSER_LOGGER;
rawLogger.getLogs({
search: 'config',
level: 'error',
limit: 50
})
// Find config-related errors
```
### Scenario 4: Export for Offline Analysis
```javascript
// Export and download
const data = window.__DSS_BROWSER_LOGS.export();
// Save to file or send to developer
```
---
## Memory & Performance
### Storage Limits
- **Max entries**: 1000 (configurable)
- **Storage**: sessionStorage (survives page reload, cleared on tab close)
- **Memory**: ~1-5MB typical, auto-truncates oldest entries
### Performance Impact
- **Console overhead**: Minimal (<1ms per log)
- **Network overhead**: Minimal (intercepts, doesn't duplicate)
- **Memory overhead**: ~1-2MB average
### When to Clear
```javascript
// Clear logs to free memory
window.__DSS_BROWSER_LOGS.clear()
```
---
## Troubleshooting
### Logger Not Found
```javascript
// Check if loaded
if (window.__DSS_BROWSER_LOGGER) {
console.log('✅ Logger loaded');
} else {
console.log('❌ Logger not loaded - check browser-logger.js import');
}
```
### Logs Not Persisting
- sessionStorage might be disabled
- Private/Incognito mode may have restrictions
- Check browser console for storage errors
### No Network Logs
- Logger must be loaded BEFORE other modules
- Check import order in HTML/app.js
---
## Next Steps
1. ✅ Created browser-logger.js (done)
2. ⏳ Add import to index.html or app.js
3. ⏳ Test in browser DevTools
4. ⏳ Create API endpoint for remote retrieval
5. ⏳ Add auto-upload on critical errors
6. ⏳ Integrate with existing debug-inspector.js
---
## Related Documentation
- `.dss/DSS_SELF_DEBUG_METHODOLOGY.md` - Self-debugging procedures
- `.dss/DEBUG_QUICKSTART.md` - Quick debugging guide
- `admin-ui/js/core/debug-inspector.js` - Server-side debug tools
- `admin-ui/js/core/audit-logger.js` - Audit trail logging