Files
rpi5-health/web/js/script.js
T
2026-10-06 17:30:25 +02:00

77 lines
2.5 KiB
JavaScript

const baseUrl = window.location
const eventSource = new EventSource(baseUrl + "/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')
}