MCPcopy
hub / github.com/CodisLabs/codis / GetUsage

Function GetUsage

pkg/utils/usage_linux.go:43–100  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

41}
42
43func GetUsage() (*Usage, error) {
44 f, err := os.Open("/proc/self/stat")
45 if err != nil {
46 return nil, errors.Trace(err)
47 }
48 defer f.Close()
49
50 var ignore struct {
51 s string
52 d int64
53 }
54
55 r := bufio.NewReader(f)
56 u := &Usage{}
57 if _, err := fmt.Fscanf(r, "%d %s %s %d %d %d",
58 &ignore.d, &ignore.s, &ignore.s, &ignore.d, &ignore.d, &ignore.d); err != nil {
59 return nil, errors.Trace(err)
60 }
61 if _, err := fmt.Fscanf(r, "%d %d %d",
62 &ignore.d, &ignore.d, &ignore.d); err != nil {
63 return nil, errors.Trace(err)
64 }
65 if _, err := fmt.Fscanf(r, "%d %d %d %d",
66 &ignore.d, &ignore.d, &ignore.d, &ignore.d); err != nil {
67 return nil, errors.Trace(err)
68 }
69
70 var ticks struct {
71 u int64
72 s int64
73 }
74 unit := time.Second / time.Duration(C.sysconf(C._SC_CLK_TCK))
75
76 if _, err := fmt.Fscanf(r, "%d %d",
77 &ticks.u, &ticks.s); err != nil {
78 return nil, errors.Trace(err)
79 }
80 u.Utime = time.Duration(ticks.u) * unit
81 u.Stime = time.Duration(ticks.s) * unit
82
83 if _, err := fmt.Fscanf(r, "%d %d",
84 &ticks.u, &ticks.s); err != nil {
85 return nil, errors.Trace(err)
86 }
87 u.Cutime = time.Duration(ticks.u) * unit
88 u.Cstime = time.Duration(ticks.s) * unit
89
90 if _, err := fmt.Fscanf(r, "%d %d %d %d %d",
91 &ignore.d, &ignore.d, &u.NumThreads, &ignore.d, &ignore.d); err != nil {
92 return nil, errors.Trace(err)
93 }
94 if _, err := fmt.Fscanf(r, "%d %d",
95 &u.VmSize, &u.VmRss); err != nil {
96 return nil, errors.Trace(err)
97 }
98 u.VmRss *= int64(syscall.Getpagesize())
99 return u, nil
100}

Callers 1

CPUUsageFunction · 0.70

Calls 2

DurationMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected