let servers = []; let currentTerminal = null; let currentWs = null; // i18n render function renderPage() { document.querySelectorAll('[data-i18n]').forEach(el => { const key = el.getAttribute('data-i18n'); el.textContent = t(key); }); document.getElementById('langBtn').textContent = currentLang.toUpperCase(); document.getElementById('addServerBtn').textContent = t('addServer'); renderServers(); } // Load servers async function loadServers() { try { const resp = await fetch('/api/servers', {credentials: 'include'}); if (resp.status === 401) { window.location.href = '/login'; return; } servers = await resp.json(); renderServers(); } catch (e) { console.error('Load error:', e); } } function renderServers() { const grid = document.getElementById('servers-grid'); const online = servers.filter(s => s.metrics?.online).length; const offline = servers.length - online; document.getElementById('total-count').textContent = servers.length; document.getElementById('online-count').textContent = online; document.getElementById('offline-count').textContent = offline; if (!servers.length) { grid.innerHTML = `
${t('instr_add_server_text').includes('Click') ? 'One command to install on any Ubuntu/Debian server:' : 'ΠΠ΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π° Ubuntu/Debian:'}
${t('instr_install_text')}
${t('instr_add_server_text')}
${t('instr_ssh_text')}
${t('instr_telegram_text')}
${t('instr_reboot_text')}
${t('instr_thresholds_text')}