Compare commits
5
Commits
cad4ae65f7
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c297d84ec4 | ||
|
|
4eba40832b | ||
|
|
708b9a87cf | ||
|
|
5f8ac4ffc4 | ||
|
|
ae603d440c |
No files matched your search
@@ -24,7 +24,7 @@ func SSEHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
clientGone := r.Context().Done() // Channel to signal client disconnection
|
clientGone := r.Context().Done() // Channel to signal client disconnection
|
||||||
|
|
||||||
rc := http.NewResponseController(w)
|
rc := http.NewResponseController(w)
|
||||||
t := time.NewTicker(time.Second * 5)
|
t := time.NewTicker(time.Millisecond * 1000)
|
||||||
defer t.Stop()
|
defer t.Stop()
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
|||||||
@@ -4,8 +4,14 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Document</title>
|
<title>Document</title>
|
||||||
|
<script src="js/script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Hello world!</h1>
|
<h1>Hello world!</h1>
|
||||||
|
<p id="cpu-load">Waiting for load data...</p>
|
||||||
|
<p id="cpu-usage">Waiting for usage data...</p>
|
||||||
|
<p id="memory">Waiting for memory data...</p>
|
||||||
|
<p id="temperature">Waiting for temperature data...</p>
|
||||||
|
<p id="uptime">Waiting for uptime data...</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
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 = "Load:" + data.load_average.Load1.toFixed(2) + " " + data.load_average.Load5.toFixed(2) + " " + data.load_average.Load15.toFixed(2)
|
||||||
|
document.getElementById("cpu-usage").innerText = "CPU Usage:" + calculateCPUUsage(currentCPUIdle, currentCPUKernel, currentCPUUser).toFixed(2) + "%"
|
||||||
|
document.getElementById("memory").innerText = "Memory:" + ((data.memory_info.SystemMemory - data.memory_info.AvailableMemory) / GB).toFixed(2) + "GB/" + (data.memory_info.SystemMemory / GB).toFixed(2)+"GB"
|
||||||
|
document.getElementById("temperature").innerText ="CPU Temperature:" + checkTemperatureAvailability(data.temperature_info)
|
||||||
|
document.getElementById("uptime").innerText ="Uptime:" + 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')
|
||||||
|
}
|
||||||
Reference in new issue
Block a user