Files
rpi5-health/internal/processor/cpu.go
T
2026-10-05 18:19:36 +02:00

35 lines
1.1 KiB
Go

package processor
import "time"
type ProcessorInformation struct {
IdleTimeSinceBoot uint64
KernelTimeSinceBoot uint64
UserTimeSinceBoot uint64
}
func (procInfo ProcessorInformation) Usage() (
TotalCPUUsage float64,
KernelCPUUsage float64,
UserCPUUsage float64,
IdleCPUUsage float64,
) {
first := GetCPUInformation()
time.Sleep(time.Second)
second := GetCPUInformation()
deltaIdleTime := second.IdleTimeSinceBoot - first.IdleTimeSinceBoot
deltaKernelTime := second.KernelTimeSinceBoot - first.KernelTimeSinceBoot
deltaUserTime := second.UserTimeSinceBoot - first.UserTimeSinceBoot
deltaTotalTime := deltaIdleTime + deltaKernelTime + deltaUserTime
if deltaTotalTime > 0 {
TotalCPUUsage = ((float64(deltaKernelTime) + float64(deltaUserTime)) / float64(deltaTotalTime)) * 100
UserCPUUsage = (float64(deltaUserTime) / float64(deltaTotalTime)) * 100
KernelCPUUsage = (float64(deltaKernelTime) / float64(deltaTotalTime)) * 100
IdleCPUUsage = (float64(deltaIdleTime) / float64(deltaTotalTime)) * 100
}
return TotalCPUUsage, KernelCPUUsage, UserCPUUsage, IdleCPUUsage
}