// dashboard.js - OpenVPN Analytics Dashboard Logic // Access globals defined in PHP via window.AppConfig const { apiAnalytics, apiCerts } = window.AppConfig; let mainChart = null; let pieChart = null; let globalHistory = []; let vizMode = 'volume'; // 'volume' or 'speed' // --- Data Loading --- async function loadData() { const icon = document.getElementById('refreshIcon'); icon.classList.add('refresh-indicator'); // Get selected range const range = document.getElementById('globalRange').value; try { const [resA, resC] = await Promise.all([ fetch(apiAnalytics + '?range=' + range), fetch(apiCerts) ]); const jsonA = await resA.json(); const jsonC = await resC.json(); if (jsonA.success) updateDashboard(jsonA.data); if (jsonC.success) updateCerts(jsonC.data); } catch (e) { console.error("Dashboard Load Error:", e); } finally { icon.classList.remove('refresh-indicator'); } } function updateDashboard(data) { // 1. KPI document.getElementById('kpiMaxClients').textContent = data.max_concurrent_24h; const totalT = (data.traffic_distribution.rx + data.traffic_distribution.tx); document.getElementById('kpiTotalTraffic').textContent = formatBytes(totalT); // 2. Main Chart globalHistory = data.global_history_24h; renderMainChart(); // 3. Top Clients const tbody = document.getElementById('topClientsTable'); tbody.innerHTML = ''; if (data.top_clients_24h.length === 0) { tbody.innerHTML = '
No certificates expiring soon