27 lines
640 B
Go
27 lines
640 B
Go
//go:build dev && !windows
|
|
|
|
package handlers
|
|
|
|
import (
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
// getCPUSample gets the current CPU time sample using syscall
|
|
func getCPUSample() cpuSample {
|
|
var rusage syscall.Rusage
|
|
if err := syscall.Getrusage(syscall.RUSAGE_SELF, &rusage); err != nil {
|
|
return cpuSample{timestamp: time.Now()}
|
|
}
|
|
|
|
userTime := time.Duration(rusage.Utime.Sec)*time.Second + time.Duration(rusage.Utime.Usec)*time.Microsecond
|
|
systemTime := time.Duration(rusage.Stime.Sec)*time.Second + time.Duration(rusage.Stime.Usec)*time.Microsecond
|
|
|
|
return cpuSample{
|
|
timestamp: time.Now(),
|
|
userTime: userTime,
|
|
systemTime: systemTime,
|
|
}
|
|
}
|
|
|