feat(4windows): save data

This commit is contained in:
strucoder 2018-02-06 17:51:00 +08:00
parent 9927ebc77a
commit 25b2fd121a
1 changed files with 38 additions and 17 deletions

View File

@ -1,7 +1,6 @@
package pidusage
import (
"os"
"errors"
"io/ioutil"
"math"
@ -10,7 +9,7 @@ import (
"runtime"
"strconv"
"strings"
"fmt"
"time"
)
// SysInfo will record cpu and memory data
@ -21,15 +20,15 @@ type SysInfo struct {
// Stat will store CPU time struct
type Stat struct {
utime float64
stime float64
cutime float64
cstime float64
start float64
rss float64
uptime float64
utime float64
stime float64
cutime float64
cstime float64
start float64
rss float64
uptime float64
kernelmodetime float64
usermodetime float64
usermodetime float64
}
type fn func(int) (*SysInfo, error)
@ -148,20 +147,42 @@ func stat(pid int, statType string) (*SysInfo, error) {
sysInfo.CPU = (total / seconds) * 100
sysInfo.Memory = stat.rss * pageSize
} else if statType == "windows" {
uptime := float64(time.Now().Unix())
args := "wmic PROCESS " + strconv.Itoa(pid) + " get workingsetsize,usermodetime,kernelmodetime"
cmdArgs := strings.Fields(args)
output, _ := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...).Output()
outputStr := string(output)
strArr = strings.Fields(outputStr)[3:]
strArr := strings.Fields(outputStr)[3:]
kernelmodetime := strArr[0]
usermodetime := strArr[1]
workingsetsize := strArr[2]
kernelmodetime := parseFloat(strArr[0])
usermodetime := parseFloat(strArr[1])
workingsetsize := parseFloat(strArr[2])
total := kernelmodetime - (_history.kernelmodetime || 0) + usermodetime - (_history.usermodetime || 0)
_kernelmodetime := 0.0
_usermodetime := 0.0
_uptime := 0.0
if _history.kernelmodetime != 0 {
_kernelmodetime = _history.kernelmodetime
}
if _history.usermodetime != 0 {
_usermodetime = _history.usermodetime
}
if _history.uptime != 0 {
_uptime = _history.uptime
}
total := kernelmodetime - _kernelmodetime + usermodetime - _usermodetime
total = total / 10000000
// seconds :=
stat := &Stat{
kernelmodetime: kernelmodetime,
usermodetime: usermodetime,
uptime: uptime,
}
history[pid] = *stat
}
return sysInfo, nil