diff --git a/public/app.js b/public/app.js index e3e2f49..25d53d7 100644 --- a/public/app.js +++ b/public/app.js @@ -189,7 +189,6 @@ document.addEventListener('DOMContentLoaded', () => { function initializeCharts() { if (memoryMeter || cpuMeter) { - //console.log('Charts already initialized, skipping'); return; } @@ -239,7 +238,7 @@ document.addEventListener('DOMContentLoaded', () => { type: 'doughnut', data: { datasets: [{ - data: [0, 600], // Initialize with max 600 for 6 cores + data: [0, 600], backgroundColor: ['#3B82F6', '#4B5563'], borderWidth: 0, circumference: 180, @@ -286,14 +285,12 @@ document.addEventListener('DOMContentLoaded', () => { function connectWebSocket() { if (ws && ws.readyState === WebSocket.OPEN) { - //console.log('WebSocket already connected, skipping'); return; } ws = new WebSocket(`wss://${window.location.host}/ws?apiKey=${encodeURIComponent(apiKey)}`); ws.onopen = () => { - //console.log('WebSocket connected'); showMainContent(); ws.send(JSON.stringify({ type: 'subscribe', @@ -309,7 +306,6 @@ document.addEventListener('DOMContentLoaded', () => { try { clearTimeout(responseTimeout); const message = JSON.parse(event.data); - //console.log('WebSocket message received:', message); if (message.requestId && pendingRequests.has(message.requestId)) { const { resolve, reject, notification } = pendingRequests.get(message.requestId); pendingRequests.delete(message.requestId); @@ -336,7 +332,6 @@ document.addEventListener('DOMContentLoaded', () => { }; ws.onclose = () => { - //console.log('WebSocket disconnected'); showLoginPage(); clearTimeout(responseTimeout); if (terminal) { @@ -382,7 +377,6 @@ document.addEventListener('DOMContentLoaded', () => { } function updateDockerUI(message) { - //console.log('Updating Docker UI:', message); if (message.error) { if (elements.serverStatus) elements.serverStatus.textContent = 'Not Running'; toggleSections('error'); @@ -391,7 +385,6 @@ document.addEventListener('DOMContentLoaded', () => { const memoryPercent = parseFloat(message.data?.memory?.percent) || 0; if (state.memoryPercent !== memoryPercent && elements.memoryPercent && memoryMeter) { - //console.log(`Updating memory meter: ${memoryPercent}%`); memoryMeter.data.datasets[0].data = [memoryPercent, 100 - memoryPercent]; memoryMeter.update(); elements.memoryPercent.textContent = `${memoryPercent.toFixed(1)}%`; @@ -400,19 +393,15 @@ document.addEventListener('DOMContentLoaded', () => { const cpuPercent = parseFloat(message.data?.cpu) || 0; if (state.cpuPercent !== cpuPercent && elements.cpuPercent && cpuMeter) { - //console.log(`Updating CPU meter: ${cpuPercent}%`); - // Scale CPU percent to 0-100 for the chart (600% max becomes 100% on chart) const scaledCpuPercent = Math.min((cpuPercent / 600) * 100, 100); cpuMeter.data.datasets[0].data = [scaledCpuPercent, 100 - scaledCpuPercent]; cpuMeter.update(); - // Display actual CPU percent (up to 600%) elements.cpuPercent.textContent = `${cpuPercent.toFixed(1)}%`; state.cpuPercent = cpuPercent; } const status = message.data?.status || 'Unknown'; if (state.serverStatus !== status && elements.serverStatus) { - //console.log(`Updating status: ${status}`); elements.serverStatus.textContent = status; state.serverStatus = status; toggleSections(status); @@ -478,7 +467,6 @@ document.addEventListener('DOMContentLoaded', () => { } function updateDockerLogsUI(message) { - //console.log('Updating Docker Logs UI:', message); if (message.error) { return; } @@ -503,7 +491,6 @@ document.addEventListener('DOMContentLoaded', () => { } function updateConnectionStatusUI(message) { - //console.log('Updating Connection Status UI:', message); if (message.data?.isOnline !== undefined && elements.connectionStatus) { const statusIcon = message.data.isOnline ? '✅' : '❌'; if (state.connectionStatus !== statusIcon) { @@ -514,7 +501,6 @@ document.addEventListener('DOMContentLoaded', () => { } function updateGeyserStatusUI(message) { - //console.log('Updating Geyser Status UI:', message); if (message.data?.isOnline !== undefined && elements.geyserStatus) { const statusIcon = message.data.isOnline ? '✅' : '❌'; if (state.geyserStatus !== statusIcon) { @@ -525,7 +511,6 @@ document.addEventListener('DOMContentLoaded', () => { } function updateSftpStatusUI(message) { - //console.log('Updating SFTP Status UI:', message); if (message.data?.isOnline !== undefined && elements.sftpStatus) { const statusIcon = message.data.isOnline ? '✅' : '❌'; if (state.sftpStatus !== statusIcon) { @@ -536,7 +521,6 @@ document.addEventListener('DOMContentLoaded', () => { } function updateNonDockerUI(message) { - //console.log('Updating Non-Docker UI:', message); if (message.error) { if (message.error.includes('Missing token') || message.error.includes('HTTP 403')) { showNotification('Invalid or missing API key. Please log in again.', 'error'); @@ -550,7 +534,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'hello' && message.data?.message) { const user = message.data.message.split(', ')[1]?.replace('!', '').trim() || 'Unknown'; if (state.user !== user && elements.user) { - //console.log(`Updating user: ${user}`); elements.user.textContent = user; state.user = user; if (ws && ws.readyState === WebSocket.OPEN) { @@ -561,7 +544,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'time' && message.data?.keyexpireString) { if (state.keyExpiry !== message.data.keyexpireString && elements.keyExpiry) { - //console.log(`Updating key expiry: ${message.data.keyexpireString}`); const expiryDate = new Date(message.data.keyexpireString); const formattedDate = expiryDate.toLocaleString('en-US', { month: 'long', @@ -595,7 +577,6 @@ document.addEventListener('DOMContentLoaded', () => { `).join('') : 'None'; if (state.playerList !== playerListHtml && elements.playerList) { - //console.log(`Updating player list: ${playerListHtml}`); elements.playerList.innerHTML = playerListHtml; state.playerList = playerListHtml; document.querySelectorAll('.kick-player').forEach(button => { @@ -757,7 +738,6 @@ document.addEventListener('DOMContentLoaded', () => { `).join(''); if (state.modListHtml !== modListHtml && elements.modList) { - //console.log('Updating mod list'); elements.modList.innerHTML = modListHtml; state.modListHtml = modListHtml; document.querySelectorAll('.uninstall-mod').forEach(button => { @@ -777,7 +757,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'log' && message.data?.message) { if (state.logUrl !== message.data.message && elements.logUrl) { - //console.log(`Updating log URL: ${message.data.message}`); elements.logUrl.href = message.data.message; elements.logUrl.textContent = message.data.message; state.logUrl = message.data.message; @@ -786,7 +765,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'website' && message.data?.message) { if (state.websiteUrl !== message.data.message && elements.websiteUrl) { - //console.log(`Updating website URL: ${message.data.message}`); elements.websiteUrl.href = message.data.message; elements.websiteUrl.textContent = message.data.message; state.websiteUrl = message.data.message; @@ -795,7 +773,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'map' && message.data?.message) { if (state.mapUrl !== message.data.message && elements.mapUrl) { - //console.log(`Updating map URL: ${message.data.message}`); elements.mapUrl.href = message.data.message; elements.mapUrl.textContent = message.data.message; state.mapUrl = message.data.message; @@ -805,7 +782,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'my-link-cache' && message.data?.hostname && message.data?.port) { const myLinkText = `${message.data.hostname}:${message.data.port}`; if (state.myLink !== myLinkText && elements.myLink) { - //console.log(`Updating my link: ${myLinkText}`); elements.myLink.textContent = myLinkText; state.myLink = myLinkText; } @@ -814,7 +790,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'my-geyser-cache' && message.data?.hostname && message.data?.port) { const geyserLinkText = `${message.data.hostname}:${message.data.port}`; if (state.geyserLink !== geyserLinkText && elements.geyserLink) { - //console.log(`Updating geyser link: ${geyserLinkText}`); elements.geyserLink.textContent = geyserLinkText; state.geyserLink = geyserLinkText; } @@ -823,7 +798,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'my-sftp-cache' && message.data?.hostname && message.data?.port && message.data?.user && message.data?.password) { const sftpLinkText = `${message.data.hostname}:${message.data.port} (Auth: User: ${message.data.user} | Pass: ${message.data.password})`; if (state.sftpLink !== sftpLinkText && elements.sftpLink) { - //console.log(`Updating SFTP link: ${sftpLinkText}`); elements.sftpLink.textContent = sftpLinkText; state.sftpLink = sftpLinkText; } @@ -832,7 +806,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'my-link' && message.data?.hostname && message.data?.port) { const myLinkText = `${message.data.hostname}:${message.data.port}`; if (state.myLink !== myLinkText && elements.myLink) { - //console.log(`Updating my link from generate: ${myLinkText}`); elements.myLink.textContent = myLinkText; state.myLink = myLinkText; } @@ -841,7 +814,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'my-geyser-link' && message.data?.hostname && message.data?.port) { const geyserLinkText = `${message.data.hostname}:${message.data.port}`; if (state.geyserLink !== geyserLinkText && elements.geyserLink) { - //console.log(`Updating geyser link from generate: ${geyserLinkText}`); elements.geyserLink.textContent = geyserLinkText; state.geyserLink = geyserLinkText; } @@ -850,7 +822,6 @@ document.addEventListener('DOMContentLoaded', () => { if (message.type === 'my-sftp' && message.data?.hostname && message.data?.port && message.data?.user) { const sftpLinkText = `${message.data.hostname}:${message.data.port} (User: ${message.data.user})`; if (state.sftpLink !== sftpLinkText && elements.sftpLink) { - //console.log(`Updating SFTP link from generate: ${sftpLinkText}`); elements.sftpLink.textContent = sftpLinkText; state.sftpLink = sftpLinkText; } @@ -926,7 +897,6 @@ document.addEventListener('DOMContentLoaded', () => { } function updatePagination() { - //console.log(`Updating pagination: totalResults=${totalResults}, currentPage=${currentPage}`); const totalPages = Math.max(1, Math.ceil(totalResults / resultsPerPage)); elements.pagination.innerHTML = ''; @@ -939,7 +909,6 @@ document.addEventListener('DOMContentLoaded', () => { }`; if (!disabled && page !== currentPage) { button.addEventListener('click', () => { - //console.log(`Navigating to page ${page}`); currentPage = page; searchMods(); }); @@ -957,11 +926,9 @@ document.addEventListener('DOMContentLoaded', () => { } createPageButton(currentPage + 1, 'Next', currentPage === totalPages); } - //console.log(`Pagination updated: ${totalPages} pages`); } function closeSearch() { - //console.log('Closing search results'); elements.modSearch.value = ''; elements.modResults.innerHTML = ''; elements.pagination.innerHTML = ''; @@ -976,12 +943,9 @@ document.addEventListener('DOMContentLoaded', () => { if (mod) { try { const offset = (currentPage - 1) * resultsPerPage; - //console.log(`Searching mods: mod=${mod}, offset=${offset}, page=${currentPage}`); const response = await wsRequest('/search', 'POST', { mod, offset }); - //console.log('Search response:', response); if (elements.modResults) { totalResults = response.totalHits || response.results?.length || 0; - //console.log(`Total results set to: ${totalResults}`); elements.modResults.innerHTML = response.results?.length > 0 ? response.results.map(result => `

${result.title}

@@ -1306,39 +1270,32 @@ document.addEventListener('DOMContentLoaded', () => { initializeTerminal(); if (ws && ws.readyState === WebSocket.OPEN) { ws.send(JSON.stringify({ type: 'subscribe', endpoints: ['docker', 'docker-logs'] })); + // Set up a one-time message listener for the docker status + const messageHandler = (event) => { + try { + const message = JSON.parse(event.data); + if (message.type === 'docker' && message.data?.status === 'running') { + updateNotification(notification, 'Server started successfully', 'success'); + toggleSections('running'); + ws.removeEventListener('message', messageHandler); // Remove listener after success + } + } catch (error) { + console.error('Error parsing WebSocket message:', error); + } + }; + ws.addEventListener('message', messageHandler); + // Timeout to handle case where running status isn't received + setTimeout(() => { + if (ws && ws.readyState === WebSocket.OPEN) { + ws.removeEventListener('message', messageHandler); + if (state.serverStatus !== 'running') { + updateNotification(notification, 'Server failed to start', 'error'); + } + } + }, 30000); // 30 seconds timeout } else { - console.warn('WebSocket not connected, cannot subscribe to docker events'); updateNotification(notification, 'WebSocket not connected', 'error'); - return; } - // Poll server status until it becomes 'Running' or timeout - let attempts = 0; - const maxAttempts = 30; // 30 seconds (1 second per attempt) - const checkStatus = async () => { - try { - const response = await wsRequest('/status', 'GET'); - const status = response?.data?.status || 'Unknown'; - if (status.toLowerCase() === 'running') { - updateNotification(notification, 'Server started successfully', 'success'); - state.serverStatus = status; - elements.serverStatus.textContent = status; - toggleSections(status); - } else if (attempts < maxAttempts) { - attempts++; - setTimeout(checkStatus, 1000); - } else { - updateNotification(notification, 'Server start timed out', 'error'); - } - } catch (error) { - if (attempts < maxAttempts) { - attempts++; - setTimeout(checkStatus, 1000); - } else { - updateNotification(notification, `Failed to verify server status: ${error.message}`, 'error'); - } - } - }; - setTimeout(checkStatus, 1000); } catch (error) { console.error('Start server error:', error); showNotification(`Failed to start server: ${error.message}`, 'error');