// Initialization const UPDATE_INTERVALS = { deviceStatus: 30000, diagnostics: 60000 }; // Core update functions function updateDeviceStatus() { console.log('Fetching device status...'); fetch('/api/status') .then(response => response.json()) .then(data => { console.log('Received status data:', data); Object.entries(data).forEach(([deviceName, status]) => { const deviceElement = document.querySelector(`.device-status[data-device-name="${deviceName}"]`); if (deviceElement) { const indicator = deviceElement.querySelector('.status-indicator'); indicator.className = `status-indicator status-${status ? 'up' : 'down'}`; } }); }); } function toggleInterfaces(header) { const list = header.nextElementSibling; const icon = header.querySelector('.expand-icon'); list.classList.toggle('collapsed'); icon.style.transform = list.classList.contains('collapsed') ? 'rotate(-90deg)' : 'rotate(0deg)'; } function updateInterfaceStatus(deviceName, interfaces) { const interfaceList = document.querySelector(`.interface-group[data-device-name="${deviceName}"] .interface-list`); if (interfaceList && interfaces) { interfaceList.innerHTML = ''; Object.entries(interfaces.ports || {}).forEach(([portName, port]) => { interfaceList.innerHTML += `
${portName} ${port.speed.current}/${port.speed.max} Mbps ${port.state}
`; }); } } function updateSystemHealth(deviceName, diagnostics) { const metricsContainer = document.querySelector(`.health-metrics[data-device-name="${deviceName}"] .metrics-list`); if (metricsContainer && diagnostics) { const cpu = metricsContainer.querySelector('.cpu'); const memory = metricsContainer.querySelector('.memory'); const temperature = metricsContainer.querySelector('.temperature'); cpu.innerHTML = `CPU: ${diagnostics.system?.cpu || 'N/A'}%`; memory.innerHTML = `Memory: ${diagnostics.system?.memory || 'N/A'}%`; temperature.innerHTML = `Temp: ${diagnostics.system?.temperature || 'N/A'}°C`; } } function updateSystemMetrics() { fetch('/api/metrics') .then(response => response.json()) .then(data => { updateInterfaceStatus(data.interfaces); updatePowerMetrics(data.power); updateSystemHealth(data.health); }); } //Metric updates like interfaces, power, and health function updateDiagnostics() { fetch('/api/diagnostics') .then(response => response.json()) .then(data => { Object.entries(data).forEach(([deviceName, diagnostics]) => { updateInterfaceStatus(deviceName, diagnostics.interfaces); updateSystemHealth(deviceName, diagnostics); }); }); } // Element creation functions function createDiagnosticElement(device, diagnostics) { const element = document.createElement('div'); element.className = `diagnostic-item ${diagnostics.connection_type}-diagnostic`; const content = `

${device}

Status: ${diagnostics.state}
Firmware: ${diagnostics.firmware.version}
${createInterfaceHTML(diagnostics.interfaces)}
`; element.innerHTML = content; return element; } function createInterfaceHTML(interfaces) { let html = '
'; // Add port information Object.entries(interfaces.ports || {}).forEach(([portName, port]) => { html += `
${portName}: ${port.speed.current}/${port.speed.max} Mbps ${port.state}
`; }); // Add radio information Object.entries(interfaces.radios || {}).forEach(([radioName, radio]) => { html += `
${radioName}: ${radio.standard} - Ch${radio.channel} (${radio.width})
`; }); html += '
'; return html; } // Initialize updates function initializeUpdates() { // Set update intervals setInterval(updateDeviceStatus, UPDATE_INTERVALS.deviceStatus); setInterval(updateDiagnostics, UPDATE_INTERVALS.diagnostics); // Initial updates updateDeviceStatus(); updateDiagnostics(); } // Start the application initializeUpdates();