@@ -11,14 +11,7 @@ import (
1111)
1212
1313const (
14- cgroupCpuacctStat = "cpuacct.stat"
15- cgroupCpuacctUsageAll = "cpuacct.usage_all"
16-
17- nanosecondsInSecond = 1000000000
18-
19- userModeColumn = 1
20- kernelModeColumn = 2
21- cuacctUsageAllColumnsNumber = 3
14+ nsInSec = 1000000000
2215
2316 // The value comes from `C.sysconf(C._SC_CLK_TCK)`, and
2417 // on Linux it's a constant which is safe to be hard coded,
@@ -80,7 +73,7 @@ func getCpuUsageBreakdown(path string) (uint64, uint64, error) {
8073 const (
8174 userField = "user"
8275 systemField = "system"
83- file = cgroupCpuacctStat
76+ file = "cpuacct.stat"
8477 )
8578
8679 // Expected format:
@@ -102,7 +95,7 @@ func getCpuUsageBreakdown(path string) (uint64, uint64, error) {
10295 return 0 , 0 , & parseError {Path : path , File : file , Err : err }
10396 }
10497
105- return (userModeUsage * nanosecondsInSecond ) / clockTicks , (kernelModeUsage * nanosecondsInSecond ) / clockTicks , nil
98+ return (userModeUsage * nsInSec ) / clockTicks , (kernelModeUsage * nsInSec ) / clockTicks , nil
10699}
107100
108101func getPercpuUsage (path string ) ([]uint64 , error ) {
@@ -125,7 +118,7 @@ func getPercpuUsage(path string) ([]uint64, error) {
125118func getPercpuUsageInModes (path string ) ([]uint64 , []uint64 , error ) {
126119 usageKernelMode := []uint64 {}
127120 usageUserMode := []uint64 {}
128- const file = cgroupCpuacctUsageAll
121+ const file = "cpuacct.usage_all"
129122
130123 fd , err := cgroups .OpenFile (path , file , os .O_RDONLY )
131124 if os .IsNotExist (err ) {
@@ -139,22 +132,23 @@ func getPercpuUsageInModes(path string) ([]uint64, []uint64, error) {
139132 scanner .Scan () // skipping header line
140133
141134 for scanner .Scan () {
142- lineFields := strings .SplitN (scanner .Text (), " " , cuacctUsageAllColumnsNumber + 1 )
143- if len (lineFields ) != cuacctUsageAllColumnsNumber {
135+ // Each line is: cpu user system
136+ fields := strings .SplitN (scanner .Text (), " " , 3 )
137+ if len (fields ) != 3 {
144138 continue
145139 }
146140
147- usageInKernelMode , err := strconv .ParseUint (lineFields [ kernelModeColumn ], 10 , 64 )
141+ user , err := strconv .ParseUint (fields [ 1 ], 10 , 64 )
148142 if err != nil {
149143 return nil , nil , & parseError {Path : path , File : file , Err : err }
150144 }
151- usageKernelMode = append (usageKernelMode , usageInKernelMode )
145+ usageUserMode = append (usageUserMode , user )
152146
153- usageInUserMode , err := strconv .ParseUint (lineFields [ userModeColumn ], 10 , 64 )
147+ kernel , err := strconv .ParseUint (fields [ 2 ], 10 , 64 )
154148 if err != nil {
155149 return nil , nil , & parseError {Path : path , File : file , Err : err }
156150 }
157- usageUserMode = append (usageUserMode , usageInUserMode )
151+ usageKernelMode = append (usageKernelMode , kernel )
158152 }
159153 if err := scanner .Err (); err != nil {
160154 return nil , nil , & parseError {Path : path , File : file , Err : err }
0 commit comments