const eventSource = new EventSource("/api/events") let prevCPUIdle = 0 let prevCPUKernel = 0 let prevCPUUser = 0 eventSource.onmessage = function (event) { const data = JSON.parse(event.data) const GB = 1024 * 1024 * 1024 let currentCPUIdle = data.processor_info.IdleTimeSinceBoot let currentCPUKernel = data.processor_info.KernelTimeSinceBoot let currentCPUUser = data.processor_info.UserTimeSinceBoot document.getElementById("cpu-load").innerText = data.load_average.Load1.toFixed(2) + " " + data.load_average.Load5.toFixed(2) + " " + data.load_average.Load15.toFixed(2) document.getElementById("cpu-usage").innerText = calculateCPUUsage(currentCPUIdle, currentCPUKernel, currentCPUUser).toFixed(2) + "%" document.getElementById("memory").innerText = ((data.memory_info.SystemMemory - data.memory_info.AvailableMemory) / GB).toFixed(2) + "/" + (data.memory_info.SystemMemory / GB).toFixed(2) document.getElementById("temperature").innerText = checkTemperatureAvailability(data.temperature_info) document.getElementById("uptime").innerText = formatUptime(data.uptime_info) } function calculateCPUUsage(currentIdle, currentKernel, currentUser) { if (prevCPUIdle === 0 || prevCPUKernel === 0 || prevCPUUser === 0) { prevCPUIdle = currentIdle prevCPUKernel = currentKernel prevCPUUser = currentUser return 0 } deltaIdle = currentIdle - prevCPUIdle deltaKernel = currentKernel - prevCPUKernel deltaUser = currentUser - prevCPUUser deltaTotal = deltaIdle + deltaKernel + deltaUser totalCPUUsage = ((deltaKernel + deltaUser) / deltaTotal) * 100 prevCPUIdle = currentIdle prevCPUKernel = currentKernel prevCPUUser = currentUser return totalCPUUsage } function checkTemperatureAvailability(temperatureStruct) { if (temperatureStruct.Supported) { return temperatureStruct.Celsius + "C°" } else { return "Unsupported" } } function formatUptime(uptimeStruct) { total = Math.round(uptimeStruct.Uptime) if (total < 60) { return Math.floor(total) } s = total % 60 m = (total / 60) % 60 if (total < 3000) { return Math.floor(m)+":"+String(Math.floor(s)).padStart(2, '0') } h = (total / 3600) % 24 if (total < 86400) { return Math.floor(h)+":"+String(Math.floor(m)).padStart(2, '0')+":"+String(Math.floor(s)).padStart(2, '0') } d = total / 86400 return Math.floor(d)+":"+String(Math.floor(h)).padStart(2, '0')+":"+String(Math.floor(m)).padStart(2, '0')+":"+String(Math.floor(s)).padStart(2, '0') }