File: rusage.go

package info (click to toggle)
golang-github-containers-buildah 1.39.3%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 7,724 kB
  • sloc: sh: 2,398; makefile: 236; perl: 187; asm: 16; awk: 12; ansic: 1
file content (48 lines) | stat: -rw-r--r-- 1,607 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package rusage

import (
	"fmt"
	"time"

	units "github.com/docker/go-units"
)

// Rusage is a subset of a Unix-style resource usage counter for the current
// process and its children.  The counters are always 0 on platforms where the
// system call is not available (i.e., systems where getrusage() doesn't
// exist).
type Rusage struct {
	Date              time.Time
	Elapsed           time.Duration
	Utime, Stime      time.Duration
	Inblock, Outblock int64
}

// FormatDiff formats the result of rusage.Rusage.Subtract() for logging.
func FormatDiff(diff Rusage) string {
	return fmt.Sprintf("%s(system) %s(user) %s(elapsed) %s input %s output", diff.Stime.Round(time.Millisecond), diff.Utime.Round(time.Millisecond), diff.Elapsed.Round(time.Millisecond), units.HumanSize(float64(diff.Inblock*512)), units.HumanSize(float64(diff.Outblock*512)))
}

// Subtract subtracts the items in delta from r, and returns the difference.
// The Date field is zeroed for easier comparison with the zero value for the
// Rusage type.
func (r Rusage) Subtract(baseline Rusage) Rusage {
	return Rusage{
		Elapsed:  r.Date.Sub(baseline.Date),
		Utime:    r.Utime - baseline.Utime,
		Stime:    r.Stime - baseline.Stime,
		Inblock:  r.Inblock - baseline.Inblock,
		Outblock: r.Outblock - baseline.Outblock,
	}
}

// Get returns the counters for the current process and its children,
// subtracting any values in the passed in "since" value, or an error.
// The Elapsed field will always be set to zero.
func Get() (Rusage, error) {
	counters, err := get()
	if err != nil {
		return Rusage{}, err
	}
	return counters, nil
}