|
|
@ -3,6 +3,8 @@
|
|
|
|
package staros
|
|
|
|
package staros
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
import (
|
|
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"io/ioutil"
|
|
|
|
"os/user"
|
|
|
|
"os/user"
|
|
|
|
"strconv"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
"strings"
|
|
|
@ -64,3 +66,41 @@ func Whoami() (uid, gid int, uname, gname, home string, err error) {
|
|
|
|
gname = gup.Name
|
|
|
|
gname = gup.Name
|
|
|
|
return
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func getCPUSample() (idle, total uint64) {
|
|
|
|
|
|
|
|
contents, err := ioutil.ReadFile("/proc/stat")
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
lines := strings.Split(string(contents), "\n")
|
|
|
|
|
|
|
|
for _, line := range lines {
|
|
|
|
|
|
|
|
fields := strings.Fields(line)
|
|
|
|
|
|
|
|
if fields[0] == "cpu" {
|
|
|
|
|
|
|
|
numFields := len(fields)
|
|
|
|
|
|
|
|
for i := 1; i < numFields; i++ {
|
|
|
|
|
|
|
|
val, err := strconv.ParseUint(fields[i], 10, 64)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
fmt.Println("Error: ", i, fields[i], err)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
total += val // tally up all the numbers to get total ticks
|
|
|
|
|
|
|
|
if i == 4 { // idle is the 5th field in the cpu line
|
|
|
|
|
|
|
|
idle = val
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// CpuUsage 获取CPU使用量
|
|
|
|
|
|
|
|
func CpuUsage(sleep time.Time) float64 {
|
|
|
|
|
|
|
|
idle0, total0 := getCPUSample()
|
|
|
|
|
|
|
|
time.Sleep(sleep)
|
|
|
|
|
|
|
|
idle1, total1 := getCPUSample()
|
|
|
|
|
|
|
|
idleTicks := float64(idle1 - idle0)
|
|
|
|
|
|
|
|
totalTicks := float64(total1 - total0)
|
|
|
|
|
|
|
|
cpuUsage := 100 * (totalTicks - idleTicks) / totalTicks
|
|
|
|
|
|
|
|
return cpuUsage
|
|
|
|
|
|
|
|
//fmt.Printf("CPU usage is %f%% [busy: %f, total: %f]\n", cpuUsage, totalTicks-idleTicks, totalTicks)
|
|
|
|
|
|
|
|
}
|
|
|
|