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 }