36 lines
799 B
Go
36 lines
799 B
Go
//go:build !windows
|
|
// +build !windows
|
|
|
|
package rusage
|
|
|
|
import (
|
|
"fmt"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
func mkduration(tv syscall.Timeval) time.Duration {
|
|
return time.Duration(tv.Sec)*time.Second + time.Duration(tv.Usec)*time.Microsecond
|
|
}
|
|
|
|
func get() (Rusage, error) {
|
|
var rusage syscall.Rusage
|
|
err := syscall.Getrusage(syscall.RUSAGE_CHILDREN, &rusage)
|
|
if err != nil {
|
|
return Rusage{}, fmt.Errorf("getting resource usage: %w", err)
|
|
}
|
|
r := Rusage{
|
|
Date: time.Now(),
|
|
Utime: mkduration(rusage.Utime),
|
|
Stime: mkduration(rusage.Stime),
|
|
Inblock: int64(rusage.Inblock), // nolint: unconvert
|
|
Outblock: int64(rusage.Oublock), // nolint: unconvert
|
|
}
|
|
return r, nil
|
|
}
|
|
|
|
// Supported returns true if resource usage counters are supported on this OS.
|
|
func Supported() bool {
|
|
return true
|
|
}
|