35 lines
1.1 KiB
Go
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
|
|
}
|