From 50deaeae963e4c46e6438db08ee292473dd68226 Mon Sep 17 00:00:00 2001 From: Josh Knapp Date: Fri, 26 Dec 2025 13:57:28 -0800 Subject: [PATCH] Add comprehensive console debugging to SSE diagnostic test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enhanced JavaScript debugging with: - Detailed connection state logging (CONNECTING/OPEN/CLOSED) - EventSource object inspection - Real-time readyState monitoring - Verbose error information (type, target, readyState) - URL and location details for troubleshooting - Console grouping for organized output This will help diagnose SSE connection issues by providing detailed information in the browser console. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- server/php/diagnostic.php | 58 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/server/php/diagnostic.php b/server/php/diagnostic.php index 6971153..85df8bd 100644 --- a/server/php/diagnostic.php +++ b/server/php/diagnostic.php @@ -162,43 +162,95 @@ const time = new Date().toLocaleTimeString(); sseLog.innerHTML += `[${time}] ${message}
`; sseLog.scrollTop = sseLog.scrollHeight; + console.log(`[SSE Test] ${message}`); } // Create test room const testRoom = 'diagnostic-test-' + Date.now(); const url = `server.php?action=stream&room=${encodeURIComponent(testRoom)}`; + console.group('SSE Connection Test'); + console.log('Test Room:', testRoom); + console.log('Full URL:', url); + console.log('Current Location:', window.location.href); + console.log('Base URL:', window.location.origin + window.location.pathname.replace(/\/[^\/]*$/, '/')); + log(`Attempting to connect to: ${url}`); try { const eventSource = new EventSource(url); - eventSource.onopen = () => { + console.log('EventSource object created:', eventSource); + console.log('EventSource readyState:', eventSource.readyState, '(0=CONNECTING, 1=OPEN, 2=CLOSED)'); + console.log('EventSource url:', eventSource.url); + + eventSource.onopen = (event) => { + console.log('EventSource.onopen fired:', event); + console.log('ReadyState after open:', eventSource.readyState); sseStatus.innerHTML = '✓ SSE Connected'; log('✓ Connection established'); log('✓ Server-Sent Events are working'); // Close after successful connection setTimeout(() => { + console.log('Closing EventSource after successful test'); eventSource.close(); log('Connection test complete - closing'); + console.groupEnd(); }, 2000); }; eventSource.onmessage = (event) => { + console.log('EventSource.onmessage:', event); + console.log('Message data:', event.data); + console.log('Event ID:', event.lastEventId); log('Received message: ' + event.data); }; eventSource.onerror = (error) => { + console.error('EventSource.onerror fired:', error); + console.error('ReadyState on error:', eventSource.readyState); + console.error('EventSource URL:', eventSource.url); + + // Try to get more info from the error + console.error('Error type:', error.type); + console.error('Error target:', error.target); + console.error('Error currentTarget:', error.currentTarget); + + // Check if it's a network error + if (eventSource.readyState === EventSource.CLOSED) { + console.error('Connection is CLOSED - this usually indicates a network error or server rejection'); + } else if (eventSource.readyState === EventSource.CONNECTING) { + console.warn('Still CONNECTING - may be retrying'); + } + sseStatus.innerHTML = '✗ SSE Failed'; log('✗ Connection error occurred'); - log('Error: ' + JSON.stringify(error)); - log('Check browser console for more details'); + log('ReadyState: ' + eventSource.readyState + ' (0=CONNECTING, 1=OPEN, 2=CLOSED)'); + log('Check browser console for detailed error information'); + eventSource.close(); + console.groupEnd(); }; + + // Monitor readyState changes + let lastReadyState = eventSource.readyState; + const stateMonitor = setInterval(() => { + if (eventSource.readyState !== lastReadyState) { + console.log('ReadyState changed:', lastReadyState, '→', eventSource.readyState); + lastReadyState = eventSource.readyState; + } + if (eventSource.readyState === EventSource.CLOSED) { + clearInterval(stateMonitor); + } + }, 100); + } catch (error) { + console.error('Exception creating EventSource:', error); + console.error('Error stack:', error.stack); sseStatus.innerHTML = '✗ SSE Error'; log('✗ Exception: ' + error.message); + console.groupEnd(); }