diff --git a/vendor/github.com/shirou/gopsutil/Makefile b/vendor/github.com/shirou/gopsutil/Makefile new file mode 100644 index 000000000..2c1bac80b --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/Makefile @@ -0,0 +1,26 @@ +.PHONY: help check +.DEFAULT_GOAL := help + +SUBPKGS=cpu disk docker host internal load mem net process + +help: ## Show help + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + +check: ## Check + errcheck -ignore="Close|Run|Write" ./... + golint ./... | egrep -v 'underscores|HttpOnly|should have comment|comment on exported|CamelCase|VM|UID' && exit 1 || exit 0 + +BUILD_FAIL_PATTERN=grep -v "exec format error" | grep "build failed" && exit 1 || exit 0 +build_test: ## test only buildable + # Supported operating systems + GOOS=linux go test ./... | $(BUILD_FAIL_PATTERN) + GOOS=freebsd go test ./... | $(BUILD_FAIL_PATTERN) + GOOS=openbsd go test ./... | $(BUILD_FAIL_PATTERN) + CGO_ENABLED=0 GOOS=darwin go test ./... | $(BUILD_FAIL_PATTERN) + CGO_ENABLED=1 GOOS=darwin go test ./... | $(BUILD_FAIL_PATTERN) + GOOS=windows go test ./... | $(BUILD_FAIL_PATTERN) + # Operating systems supported for building only (not implemented error if used) + GOOS=dragonfly go test ./... | $(BUILD_FAIL_PATTERN) + GOOS=netbsd go test ./... | $(BUILD_FAIL_PATTERN) + GOOS=solaris go test ./... | $(BUILD_FAIL_PATTERN) + @echo 'Successfully built on all known operating systems' diff --git a/vendor/github.com/shirou/gopsutil/README.rst b/vendor/github.com/shirou/gopsutil/README.rst new file mode 100644 index 000000000..a4f57b1bb --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/README.rst @@ -0,0 +1,320 @@ +gopsutil: psutil for golang +============================== + +.. image:: https://circleci.com/gh/shirou/gopsutil.svg?&style=shield + :target: https://circleci.com/gh/shirou/gopsutil + +.. image:: https://coveralls.io/repos/shirou/gopsutil/badge.svg?branch=master + :target: https://coveralls.io/r/shirou/gopsutil?branch=master + +.. image:: https://godoc.org/github.com/shirou/gopsutil?status.svg + :target: http://godoc.org/github.com/shirou/gopsutil + +This is a port of psutil (http://pythonhosted.org/psutil/). The challenge is porting all +psutil functions on some architectures. + + +.. highlights:: Breaking Changes! + + Breaking changes is introduced at v2. See `issue 174 `_ . + + +Migrating to v2 +------------------------- + +On gopsutil itself, `v2migration.sh `_ is used for migration. It can not be commonly used, but it may help you with migration. + + +Tag semantics +^^^^^^^^^^^^^^^ + +gopsutil tag policy is almost same as Semantic Versioning, but automatically increase like Ubuntu versioning. + +for example, `v2.16.10` means + +- v2: major version +- 16: release year, 2016 +- 10: release month + +gopsutil aims to keep backwards-compatiblity until major version change. + +Taged at every end of month, but there are only a few commits, it can be skipped. + + +Available Architectures +------------------------------------ + +- FreeBSD i386/amd64/arm +- Linux i386/amd64/arm(raspberry pi) +- Windows/amd64 +- Darwin i386/amd64 +- OpenBDS amd64 (Thank you @mpfz0r!) + +All works are implemented without cgo by porting c struct to golang struct. + + +Usage +--------- + +Note: gopsutil v2 breaks compatibility. If you want to stay with compatibility, please use v1 branch and vendoring. + +.. code:: go + + package main + + import ( + "fmt" + + "github.com/shirou/gopsutil/mem" + ) + + func main() { + v, _ := mem.VirtualMemory() + + // almost every return value is a struct + fmt.Printf("Total: %v, Free:%v, UsedPercent:%f%%\n", v.Total, v.Free, v.UsedPercent) + + // convert to JSON. String() is also implemented + fmt.Println(v) + } + +The output is below. + +:: + + Total: 3179569152, Free:284233728, UsedPercent:84.508194% + {"total":3179569152,"available":492572672,"used":2895335424,"usedPercent":84.50819439828305, (snip...)} + +You can set an alternative location to :code:`/proc` by setting the :code:`HOST_PROC` environment variable. + +You can set an alternative location to :code:`/sys` by setting the :code:`HOST_SYS` environment variable. + +You can set an alternative location to :code:`/etc` by setting the :code:`HOST_ETC` environment variable. + +Documentation +------------------------ + +see http://godoc.org/github.com/shirou/gopsutil + +Requirements +----------------- + +- go1.5 or above is required. + + +More Info +-------------------- + +Several methods have been added which are not present in psutil, but will provide useful information. + +- host/HostInfo() (linux) + + - Hostname + - Uptime + - Procs + - OS (ex: "linux") + - Platform (ex: "ubuntu", "arch") + - PlatformFamily (ex: "debian") + - PlatformVersion (ex: "Ubuntu 13.10") + - VirtualizationSystem (ex: "LXC") + - VirtualizationRole (ex: "guest"/"host") + +- cpu/CPUInfo() (linux, freebsd) + + - CPU (ex: 0, 1, ...) + - VendorID (ex: "GenuineIntel") + - Family + - Model + - Stepping + - PhysicalID + - CoreID + - Cores (ex: 2) + - ModelName (ex: "Intel(R) Core(TM) i7-2640M CPU @ 2.80GHz") + - Mhz + - CacheSize + - Flags (ex: "fpu vme de pse tsc msr pae mce cx8 ...") + - Microcode + +- load/LoadAvg() (linux, freebsd) + + - Load1 + - Load5 + - Load15 + +- docker/GetDockerIDList() (linux only) + + - container id list ([]string) + +- docker/CgroupCPU() (linux only) + + - user + - system + +- docker/CgroupMem() (linux only) + + - various status + +- net_protocols (linux only) + + - system wide stats on network protocols (i.e IP, TCP, UDP, etc.) + - sourced from /proc/net/snmp + +- iptables nf_conntrack (linux only) + + - system wide stats on netfilter conntrack module + - sourced from /proc/sys/net/netfilter/nf_conntrack_count + +Some codes are ported from Ohai. many thanks. + + +Current Status +------------------ + +- x: work +- b: almost works, but something is broken + +=================== ====== ======= ======= ====== ======= +name Linux FreeBSD OpenBSD MacOSX Windows +cpu_times x x x x x +cpu_count x x x x x +cpu_percent x x x x x +cpu_times_percent x x x x x +virtual_memory x x x x x +swap_memory x x x x +disk_partitions x x x x x +disk_io_counters x x x +disk_usage x x x x x +net_io_counters x x x b x +boot_time x x x x x +users x x x x x +pids x x x x x +pid_exists x x x x x +net_connections x x +net_protocols x +net_if_addrs +net_if_stats +netfilter_conntrack x +=================== ====== ======= ======= ====== ======= + +Process class +^^^^^^^^^^^^^^^ + +================ ===== ======= ======= ====== ======= +name Linux FreeBSD OpenBSD MacOSX Windows +pid x x x x x +ppid x x x x x +name x x x x x +cmdline x x x +create_time x +status x x x x +cwd x +exe x x x x +uids x x x x +gids x x x x +terminal x x x x +io_counters x x x x +nice x x x x x +num_fds x +num_ctx_switches x +num_threads x x x x x +cpu_times x +memory_info x x x x x +memory_info_ex x +memory_maps x +open_files x +send_signal x x x x +suspend x x x x +resume x x x x +terminate x x x x x +kill x x x x +username x +ionice +rlimit +num_handlres +threads +cpu_percent x x x +cpu_affinity +memory_percent +parent x x x +children x x x x +connections x x x +is_running +================ ===== ======= ======= ====== ======= + +Original Metrics +^^^^^^^^^^^^^^^^^^^ + +================== ===== ======= ======= ====== ======= +item Linux FreeBSD OpenBSD MacOSX Windows +**HostInfo** +hostname x x x x x + uptime x x x x + proces x x x + os x x x x x + platform x x x x + platformfamily x x x x + virtualization x +**CPU** + VendorID x x x x x + Family x x x x x + Model x x x x x + Stepping x x x x x + PhysicalID x + CoreID x + Cores x x + ModelName x x x x x + Microcode x +**LoadAvg** + Load1 x x x x + Load5 x x x x + Load15 x x x x +**GetDockerID** + container id x no no no no +**CgroupsCPU** + user x no no no no + system x no no no no +**CgroupsMem** + various x no no no no +================== ===== ======= ======= ====== ======= + +- future work + + - process_iter + - wait_procs + - Process class + + - as_dict + - wait + + +License +------------ + +New BSD License (same as psutil) + + +Related Works +----------------------- + +I have been influenced by the following great works: + +- psutil: http://pythonhosted.org/psutil/ +- dstat: https://github.com/dagwieers/dstat +- gosigar: https://github.com/cloudfoundry/gosigar/ +- goprocinfo: https://github.com/c9s/goprocinfo +- go-ps: https://github.com/mitchellh/go-ps +- ohai: https://github.com/opscode/ohai/ +- bosun: https://github.com/bosun-monitor/bosun/tree/master/cmd/scollector/collectors +- mackerel: https://github.com/mackerelio/mackerel-agent/tree/master/metrics + +How to Contribute +--------------------------- + +1. Fork it +2. Create your feature branch (git checkout -b my-new-feature) +3. Commit your changes (git commit -am 'Add some feature') +4. Push to the branch (git push origin my-new-feature) +5. Create new Pull Request + +My English is terrible, so documentation or correcting comments are also +welcome. diff --git a/vendor/github.com/shirou/gopsutil/circle.yml b/vendor/github.com/shirou/gopsutil/circle.yml new file mode 100644 index 000000000..ad8c43d55 --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/circle.yml @@ -0,0 +1,11 @@ +machine: + timezone: + Asia/Tokyo +test: + override: + - GOOS=linux GOARCH=amd64 go test -v ./... + - GOOS=linux GOARCH=386 go get -v ./... + - GOOS=linux GOARCH=arm GOARM=7 go get -v ./... + - GOOS=freebsd GOARCH=amd64 go get -v ./... + - GOOS=windows GOARCH=amd64 go get -v ./... + - GOOS=darwin GOARCH=amd64 go get -v ./... diff --git a/vendor/github.com/shirou/gopsutil/coverall.sh b/vendor/github.com/shirou/gopsutil/coverall.sh new file mode 100644 index 000000000..35aa298ba --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/coverall.sh @@ -0,0 +1,26 @@ +#/bin/sh + +# see http://www.songmu.jp/riji/entry/2015-01-15-goveralls-multi-package.html + +set -e +# cleanup +cleanup() { + if [ $tmpprof != "" ] && [ -f $tmpprof ]; then + rm -f $tmpprof + fi + exit +} +trap cleanup INT QUIT TERM EXIT + +# メインの処理 +prof=${1:-".profile.cov"} +echo "mode: count" > $prof +gopath1=$(echo $GOPATH | cut -d: -f1) +for pkg in $(go list ./...); do + tmpprof=$gopath1/src/$pkg/profile.tmp + go test -covermode=count -coverprofile=$tmpprof $pkg + if [ -f $tmpprof ]; then + cat $tmpprof | tail -n +2 >> $prof + rm $tmpprof + fi +done diff --git a/vendor/github.com/shirou/gopsutil/cpu/cpu.go b/vendor/github.com/shirou/gopsutil/cpu/cpu.go index b51e27ff6..fc2e8d8d5 100644 --- a/vendor/github.com/shirou/gopsutil/cpu/cpu.go +++ b/vendor/github.com/shirou/gopsutil/cpu/cpu.go @@ -40,6 +40,7 @@ type InfoStat struct { Mhz float64 `json:"mhz"` CacheSize int32 `json:"cacheSize"` Flags []string `json:"flags"` + Microcode string `json:"microcode"` } type lastPercent struct { diff --git a/vendor/github.com/shirou/gopsutil/cpu/cpu_fallback.go b/vendor/github.com/shirou/gopsutil/cpu/cpu_fallback.go index ffed727be..8f72b7843 100644 --- a/vendor/github.com/shirou/gopsutil/cpu/cpu_fallback.go +++ b/vendor/github.com/shirou/gopsutil/cpu/cpu_fallback.go @@ -1,4 +1,4 @@ -// +build !darwin,!linux,!freebsd,!openbsd,!windows +// +build !darwin,!linux,!freebsd,!openbsd,!solaris,!windows package cpu @@ -15,7 +15,3 @@ func Times(percpu bool) ([]TimesStat, error) { func Info() ([]InfoStat, error) { return []InfoStat{}, common.ErrNotImplementedError } - -func Percent(interval time.Duration, percpu bool) ([]float64, error) { - return []float64{}, common.ErrNotImplementedError -} diff --git a/vendor/github.com/shirou/gopsutil/cpu/cpu_linux.go b/vendor/github.com/shirou/gopsutil/cpu/cpu_linux.go index 1e3f6f515..6bd36cdf8 100644 --- a/vendor/github.com/shirou/gopsutil/cpu/cpu_linux.go +++ b/vendor/github.com/shirou/gopsutil/cpu/cpu_linux.go @@ -186,6 +186,8 @@ func Info() ([]InfoStat, error) { c.Flags = strings.FieldsFunc(value, func(r rune) bool { return r == ',' || r == ' ' }) + case "microcode": + c.Microcode = value } } if c.CPU >= 0 { @@ -201,6 +203,10 @@ func Info() ([]InfoStat, error) { func parseStatLine(line string) (*TimesStat, error) { fields := strings.Fields(line) + if len(fields) == 0 { + return nil, errors.New("stat does not contain cpu info") + } + if strings.HasPrefix(fields[0], "cpu") == false { // return CPUTimesStat{}, e return nil, errors.New("not contain cpu") diff --git a/vendor/github.com/shirou/gopsutil/cpu/cpu_solaris.go b/vendor/github.com/shirou/gopsutil/cpu/cpu_solaris.go new file mode 100644 index 000000000..7117a0fbb --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/cpu/cpu_solaris.go @@ -0,0 +1,189 @@ +package cpu + +import ( + "errors" + "fmt" + "os/exec" + "regexp" + "sort" + "strconv" + "strings" + + "github.com/shirou/gopsutil/internal/common" +) + +var ClocksPerSec = float64(128) + +func init() { + getconf, err := exec.LookPath("/usr/bin/getconf") + if err != nil { + return + } + out, err := invoke.Command(getconf, "CLK_TCK") + // ignore errors + if err == nil { + i, err := strconv.ParseFloat(strings.TrimSpace(string(out)), 64) + if err == nil { + ClocksPerSec = float64(i) + } + } +} + +func Times(percpu bool) ([]TimesStat, error) { + return []TimesStat{}, common.ErrNotImplementedError +} + +func Info() ([]InfoStat, error) { + psrInfo, err := exec.LookPath("/usr/sbin/psrinfo") + if err != nil { + return nil, fmt.Errorf("Cannot find psrinfo: %s", err) + } + psrInfoOut, err := invoke.Command(psrInfo, "-p", "-v") + if err != nil { + return nil, fmt.Errorf("Cannot execute psrinfo: %s", err) + } + + isaInfo, err := exec.LookPath("/usr/bin/isainfo") + if err != nil { + return nil, fmt.Errorf("Cannot find isainfo: %s", err) + } + isaInfoOut, err := invoke.Command(isaInfo, "-b", "-v") + if err != nil { + return nil, fmt.Errorf("Cannot execute isainfo: %s", err) + } + + procs, err := parseProcessorInfo(string(psrInfoOut)) + if err != nil { + return nil, fmt.Errorf("Error parsing psrinfo output: %s", err) + } + + flags, err := parseISAInfo(string(isaInfoOut)) + if err != nil { + return nil, fmt.Errorf("Error parsing isainfo output: %s", err) + } + + result := make([]InfoStat, 0, len(flags)) + for _, proc := range procs { + procWithFlags := proc + procWithFlags.Flags = flags + result = append(result, procWithFlags) + } + + return result, nil +} + +var flagsMatch = regexp.MustCompile(`[\w\.]+`) + +func parseISAInfo(cmdOutput string) ([]string, error) { + words := flagsMatch.FindAllString(cmdOutput, -1) + + // Sanity check the output + if len(words) < 4 || words[1] != "bit" || words[3] != "applications" { + return nil, errors.New("Attempted to parse invalid isainfo output") + } + + flags := make([]string, len(words)-4) + for i, val := range words[4:] { + flags[i] = val + } + sort.Strings(flags) + + return flags, nil +} + +var psrInfoMatch = regexp.MustCompile(`The physical processor has (?:([\d]+) virtual processor \(([\d]+)\)|([\d]+) cores and ([\d]+) virtual processors[^\n]+)\n(?:\s+ The core has.+\n)*\s+.+ \((\w+) ([\S]+) family (.+) model (.+) step (.+) clock (.+) MHz\)\n[\s]*(.*)`) + +const ( + psrNumCoresOffset = 1 + psrNumCoresHTOffset = 3 + psrNumHTOffset = 4 + psrVendorIDOffset = 5 + psrFamilyOffset = 7 + psrModelOffset = 8 + psrStepOffset = 9 + psrClockOffset = 10 + psrModelNameOffset = 11 +) + +func parseProcessorInfo(cmdOutput string) ([]InfoStat, error) { + matches := psrInfoMatch.FindAllStringSubmatch(cmdOutput, -1) + + var infoStatCount int32 + result := make([]InfoStat, 0, len(matches)) + for physicalIndex, physicalCPU := range matches { + var step int32 + var clock float64 + + if physicalCPU[psrStepOffset] != "" { + stepParsed, err := strconv.ParseInt(physicalCPU[psrStepOffset], 10, 32) + if err != nil { + return nil, fmt.Errorf("Cannot parse value %q for step as 32-bit integer: %s", physicalCPU[9], err) + } + step = int32(stepParsed) + } + + if physicalCPU[psrClockOffset] != "" { + clockParsed, err := strconv.ParseInt(physicalCPU[psrClockOffset], 10, 64) + if err != nil { + return nil, fmt.Errorf("Cannot parse value %q for clock as 32-bit integer: %s", physicalCPU[10], err) + } + clock = float64(clockParsed) + } + + var err error + var numCores int64 + var numHT int64 + switch { + case physicalCPU[psrNumCoresOffset] != "": + numCores, err = strconv.ParseInt(physicalCPU[psrNumCoresOffset], 10, 32) + if err != nil { + return nil, fmt.Errorf("Cannot parse value %q for core count as 32-bit integer: %s", physicalCPU[1], err) + } + + for i := 0; i < int(numCores); i++ { + result = append(result, InfoStat{ + CPU: infoStatCount, + PhysicalID: strconv.Itoa(physicalIndex), + CoreID: strconv.Itoa(i), + Cores: 1, + VendorID: physicalCPU[psrVendorIDOffset], + ModelName: physicalCPU[psrModelNameOffset], + Family: physicalCPU[psrFamilyOffset], + Model: physicalCPU[psrModelOffset], + Stepping: step, + Mhz: clock, + }) + infoStatCount++ + } + case physicalCPU[psrNumCoresHTOffset] != "": + numCores, err = strconv.ParseInt(physicalCPU[psrNumCoresHTOffset], 10, 32) + if err != nil { + return nil, fmt.Errorf("Cannot parse value %q for core count as 32-bit integer: %s", physicalCPU[3], err) + } + + numHT, err = strconv.ParseInt(physicalCPU[psrNumHTOffset], 10, 32) + if err != nil { + return nil, fmt.Errorf("Cannot parse value %q for hyperthread count as 32-bit integer: %s", physicalCPU[4], err) + } + + for i := 0; i < int(numCores); i++ { + result = append(result, InfoStat{ + CPU: infoStatCount, + PhysicalID: strconv.Itoa(physicalIndex), + CoreID: strconv.Itoa(i), + Cores: int32(numHT) / int32(numCores), + VendorID: physicalCPU[psrVendorIDOffset], + ModelName: physicalCPU[psrModelNameOffset], + Family: physicalCPU[psrFamilyOffset], + Model: physicalCPU[psrModelOffset], + Stepping: step, + Mhz: clock, + }) + infoStatCount++ + } + default: + return nil, errors.New("Values for cores with and without hyperthreading are both set") + } + } + return result, nil +} diff --git a/vendor/github.com/shirou/gopsutil/doc.go b/vendor/github.com/shirou/gopsutil/doc.go new file mode 100644 index 000000000..6a65fe268 --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/doc.go @@ -0,0 +1 @@ +package gopsutil diff --git a/vendor/github.com/shirou/gopsutil/host/host_darwin.go b/vendor/github.com/shirou/gopsutil/host/host_darwin.go index bbd134f9d..7b68d74d2 100644 --- a/vendor/github.com/shirou/gopsutil/host/host_darwin.go +++ b/vendor/github.com/shirou/gopsutil/host/host_darwin.go @@ -104,6 +104,7 @@ func Users() ([]UserStat, error) { if err != nil { return ret, err } + defer file.Close() buf, err := ioutil.ReadAll(file) if err != nil { diff --git a/vendor/github.com/shirou/gopsutil/host/host_freebsd.go b/vendor/github.com/shirou/gopsutil/host/host_freebsd.go index 74137cbf7..d8bd6fcc2 100644 --- a/vendor/github.com/shirou/gopsutil/host/host_freebsd.go +++ b/vendor/github.com/shirou/gopsutil/host/host_freebsd.go @@ -112,6 +112,7 @@ func Users() ([]UserStat, error) { if err != nil { return ret, err } + defer file.Close() buf, err := ioutil.ReadAll(file) if err != nil { @@ -180,6 +181,8 @@ func getUsersFromUtmp(utmpfile string) ([]UserStat, error) { if err != nil { return ret, err } + defer file.Close() + buf, err := ioutil.ReadAll(file) if err != nil { return ret, err diff --git a/vendor/github.com/shirou/gopsutil/host/host_linux.go b/vendor/github.com/shirou/gopsutil/host/host_linux.go index a34c67d33..70d8ca2ca 100644 --- a/vendor/github.com/shirou/gopsutil/host/host_linux.go +++ b/vendor/github.com/shirou/gopsutil/host/host_linux.go @@ -131,6 +131,7 @@ func Users() ([]UserStat, error) { if err != nil { return nil, err } + defer file.Close() buf, err := ioutil.ReadAll(file) if err != nil { diff --git a/vendor/github.com/shirou/gopsutil/host/host_openbsd.go b/vendor/github.com/shirou/gopsutil/host/host_openbsd.go index e533d8697..60d46e0ec 100644 --- a/vendor/github.com/shirou/gopsutil/host/host_openbsd.go +++ b/vendor/github.com/shirou/gopsutil/host/host_openbsd.go @@ -123,6 +123,8 @@ func Users() ([]UserStat, error) { if err != nil { return ret, err } + defer file.Close() + buf, err := ioutil.ReadAll(file) if err != nil { return ret, err diff --git a/vendor/github.com/shirou/gopsutil/host/host_windows.go b/vendor/github.com/shirou/gopsutil/host/host_windows.go index b5fb32220..983f38cc6 100644 --- a/vendor/github.com/shirou/gopsutil/host/host_windows.go +++ b/vendor/github.com/shirou/gopsutil/host/host_windows.go @@ -80,7 +80,7 @@ func Info() (*InfoStat, error) { func getMachineGuid() (string, error) { var h syscall.Handle - err := syscall.RegOpenKeyEx(syscall.HKEY_LOCAL_MACHINE, syscall.StringToUTF16Ptr(`SOFTWARE\Microsoft\Cryptography`), 0, syscall.KEY_READ, &h) + err := syscall.RegOpenKeyEx(syscall.HKEY_LOCAL_MACHINE, syscall.StringToUTF16Ptr(`SOFTWARE\Microsoft\Cryptography`), 0, syscall.KEY_READ|syscall.KEY_WOW64_64KEY, &h) if err != nil { return "", err } diff --git a/vendor/github.com/shirou/gopsutil/internal/common/common_linux.go b/vendor/github.com/shirou/gopsutil/internal/common/common_linux.go index 9568106fb..3d0fc50d6 100644 --- a/vendor/github.com/shirou/gopsutil/internal/common/common_linux.go +++ b/vendor/github.com/shirou/gopsutil/internal/common/common_linux.go @@ -33,9 +33,9 @@ func NumProcs() (uint64, error) { if err != nil { return 0, err } + defer f.Close() list, err := f.Readdir(-1) - defer f.Close() if err != nil { return 0, err } diff --git a/vendor/github.com/shirou/gopsutil/mktypes.sh b/vendor/github.com/shirou/gopsutil/mktypes.sh new file mode 100644 index 000000000..7bf2e2412 --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/mktypes.sh @@ -0,0 +1,37 @@ + +DIRS="cpu disk docker host load mem net process" + +GOOS=`uname | tr '[:upper:]' '[:lower:]'` +ARCH=`uname -m` + +case $ARCH in + amd64) + GOARCH="amd64" + ;; + x86_64) + GOARCH="amd64" + ;; + i386) + GOARCH="386" + ;; + i686) + GOARCH="386" + ;; + arm) + GOARCH="arm" + ;; + *) + echo "unknown arch: $ARCH" + exit 1 +esac + +for DIR in $DIRS +do + if [ -e ${DIR}/types_${GOOS}.go ]; then + echo "// +build $GOOS" > ${DIR}/${DIR}_${GOOS}_${GOARCH}.go + echo "// +build $GOARCH" >> ${DIR}/${DIR}_${GOOS}_${GOARCH}.go + go tool cgo -godefs ${DIR}/types_${GOOS}.go >> ${DIR}/${DIR}_${GOOS}_${GOARCH}.go + fi +done + + diff --git a/vendor/github.com/shirou/gopsutil/net/net_linux.go b/vendor/github.com/shirou/gopsutil/net/net_linux.go index 8905b13a9..58c07290c 100644 --- a/vendor/github.com/shirou/gopsutil/net/net_linux.go +++ b/vendor/github.com/shirou/gopsutil/net/net_linux.go @@ -37,7 +37,7 @@ func IOCountersByFile(pernic bool, filename string) ([]IOCountersStat, error) { ret := make([]IOCountersStat, 0, statlen) for _, line := range lines[2:] { - parts := strings.SplitN(line, ":", 2) + parts := strings.SplitN(line, ": ", 2) if len(parts) != 2 { continue } @@ -407,6 +407,7 @@ func getProcInodes(root string, pid int32, max int) (map[string][]inodeMap, erro if err != nil { return ret, nil } + defer f.Close() files, err := f.Readdir(max) if err != nil { return ret, nil diff --git a/vendor/github.com/shirou/gopsutil/process/process_darwin.go b/vendor/github.com/shirou/gopsutil/process/process_darwin.go index b3a6a2e11..883c88bb7 100644 --- a/vendor/github.com/shirou/gopsutil/process/process_darwin.go +++ b/vendor/github.com/shirou/gopsutil/process/process_darwin.go @@ -64,6 +64,10 @@ func Pids() ([]int32, error) { func (p *Process) Ppid() (int32, error) { r, err := callPs("ppid", p.Pid, false) + if err != nil { + return 0, err + } + v, err := strconv.Atoi(r[0][0]) if err != nil { return 0, err diff --git a/vendor/github.com/shirou/gopsutil/process/process_posix.go b/vendor/github.com/shirou/gopsutil/process/process_posix.go index ef4b676dd..b22a72d8a 100644 --- a/vendor/github.com/shirou/gopsutil/process/process_posix.go +++ b/vendor/github.com/shirou/gopsutil/process/process_posix.go @@ -40,6 +40,8 @@ func getTerminalMap() (map[uint64]string, error) { return nil, err } } + defer ptsd.Close() + if ptsnames == nil { defer ptsd.Close() ptsnames, err = ptsd.Readdirnames(-1) diff --git a/vendor/github.com/shirou/gopsutil/v2migration.sh b/vendor/github.com/shirou/gopsutil/v2migration.sh new file mode 100644 index 000000000..978cc44ee --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/v2migration.sh @@ -0,0 +1,134 @@ +# This script is a helper of migration to gopsutil v2 using gorename +# +# go get golang.org/x/tools/cmd/gorename + +IFS=$'\n' + +## Part 1. rename Functions to pass golint. ex) cpu.CPUTimesStat -> cpu.TimesStat + +# +# Note: +# process has IOCounters() for file IO, and also NetIOCounters() for Net IO. +# This scripts replace process.NetIOCounters() to IOCounters(). +# So you need hand-fixing process. + +TARGETS=`cat < TimesStat +CPUInfoStat -> InfoStat +CPUTimes -> Times +CPUInfo -> Info +CPUCounts -> Counts +CPUPercent -> Percent +DiskUsageStat -> UsageStat +DiskPartitionStat -> PartitionStat +DiskIOCountersStat -> IOCountersStat +DiskPartitions -> Partitions +DiskIOCounters -> IOCounters +DiskUsage -> Usage +HostInfoStat -> InfoStat +HostInfo -> Info +GetVirtualization -> Virtualization +GetPlatformInformation -> PlatformInformation +LoadAvgStat -> AvgStat +LoadAvg -> Avg +NetIOCountersStat -> IOCountersStat +NetConnectionStat -> ConnectionStat +NetProtoCountersStat -> ProtoCountersStat +NetInterfaceAddr -> InterfaceAddr +NetInterfaceStat -> InterfaceStat +NetFilterStat -> FilterStat +NetInterfaces -> Interfaces +getNetIOCountersAll -> getIOCountersAll +NetIOCounters -> IOCounters +NetIOCountersByFile -> IOCountersByFile +NetProtoCounters -> ProtoCounters +NetFilterCounters -> FilterCounters +NetConnections -> Connections +NetConnectionsPid -> ConnectionsPid +Uid -> UID +Id -> ID +convertCpuTimes -> convertCPUTimes +EOF` + +for T in $TARGETS +do + echo $T + gofmt -w -r "$T" ./*.go +done + + +###### Part 2 rename JSON key name +## Google JSOn style +## https://google.github.io/styleguide/jsoncstyleguide.xml + +sed -i "" 's/guest_nice/guestNice/g' cpu/*.go +sed -i "" 's/vendor_id/vendorId/g' cpu/*.go +sed -i "" 's/physical_id/physicalId/g' cpu/*.go +sed -i "" 's/model_name/modelName/g' cpu/*.go +sed -i "" 's/cache_size/cacheSize/g' cpu/*.go +sed -i "" 's/core_id/coreId/g' cpu/*.go + +sed -i "" 's/inodes_total/inodesTotal/g' disk/*.go +sed -i "" 's/inodes_used/inodesUsed/g' disk/*.go +sed -i "" 's/inodes_free/inodesFree/g' disk/*.go +sed -i "" 's/inodes_used_percent/inodesUsedPercent/g' disk/*.go +sed -i "" 's/read_count/readCount/g' disk/*.go +sed -i "" 's/write_count/writeCount/g' disk/*.go +sed -i "" 's/read_bytes/readBytes/g' disk/*.go +sed -i "" 's/write_bytes/writeBytes/g' disk/*.go +sed -i "" 's/read_time/readTime/g' disk/*.go +sed -i "" 's/write_time/writeTime/g' disk/*.go +sed -i "" 's/io_time/ioTime/g' disk/*.go +sed -i "" 's/serial_number/serialNumber/g' disk/*.go +sed -i "" 's/used_percent/usedPercent/g' disk/*.go +sed -i "" 's/inodesUsed_percent/inodesUsedPercent/g' disk/*.go + +sed -i "" 's/total_cache/totalCache/g' docker/*.go +sed -i "" 's/total_rss_huge/totalRssHuge/g' docker/*.go +sed -i "" 's/total_rss/totalRss/g' docker/*.go +sed -i "" 's/total_mapped_file/totalMappedFile/g' docker/*.go +sed -i "" 's/total_pgpgin/totalPgpgin/g' docker/*.go +sed -i "" 's/total_pgpgout/totalPgpgout/g' docker/*.go +sed -i "" 's/total_pgfault/totalPgfault/g' docker/*.go +sed -i "" 's/total_pgmajfault/totalPgmajfault/g' docker/*.go +sed -i "" 's/total_inactive_anon/totalInactiveAnon/g' docker/*.go +sed -i "" 's/total_active_anon/totalActiveAnon/g' docker/*.go +sed -i "" 's/total_inactive_file/totalInactiveFile/g' docker/*.go +sed -i "" 's/total_active_file/totalActiveFile/g' docker/*.go +sed -i "" 's/total_unevictable/totalUnevictable/g' docker/*.go +sed -i "" 's/mem_usage_in_bytes/memUsageInBytes/g' docker/*.go +sed -i "" 's/mem_max_usage_in_bytes/memMaxUsageInBytes/g' docker/*.go +sed -i "" 's/memory.limit_in_bytes/memoryLimitInBbytes/g' docker/*.go +sed -i "" 's/memory.failcnt/memoryFailcnt/g' docker/*.go +sed -i "" 's/mapped_file/mappedFile/g' docker/*.go +sed -i "" 's/container_id/containerID/g' docker/*.go +sed -i "" 's/rss_huge/rssHuge/g' docker/*.go +sed -i "" 's/inactive_anon/inactiveAnon/g' docker/*.go +sed -i "" 's/active_anon/activeAnon/g' docker/*.go +sed -i "" 's/inactive_file/inactiveFile/g' docker/*.go +sed -i "" 's/active_file/activeFile/g' docker/*.go +sed -i "" 's/hierarchical_memory_limit/hierarchicalMemoryLimit/g' docker/*.go + +sed -i "" 's/boot_time/bootTime/g' host/*.go +sed -i "" 's/platform_family/platformFamily/g' host/*.go +sed -i "" 's/platform_version/platformVersion/g' host/*.go +sed -i "" 's/virtualization_system/virtualizationSystem/g' host/*.go +sed -i "" 's/virtualization_role/virtualizationRole/g' host/*.go + +sed -i "" 's/used_percent/usedPercent/g' mem/*.go + +sed -i "" 's/bytes_sent/bytesSent/g' net/*.go +sed -i "" 's/bytes_recv/bytesRecv/g' net/*.go +sed -i "" 's/packets_sent/packetsSent/g' net/*.go +sed -i "" 's/packets_recv/packetsRecv/g' net/*.go +sed -i "" 's/conntrack_count/conntrackCount/g' net/*.go +sed -i "" 's/conntrack_max/conntrackMax/g' net/*.go + +sed -i "" 's/read_count/readCount/g' process/*.go +sed -i "" 's/write_count/writeCount/g' process/*.go +sed -i "" 's/read_bytes/readBytes/g' process/*.go +sed -i "" 's/write_bytes/writeBytes/g' process/*.go +sed -i "" 's/shared_clean/sharedClean/g' process/*.go +sed -i "" 's/shared_dirty/sharedDirty/g' process/*.go +sed -i "" 's/private_clean/privateClean/g' process/*.go +sed -i "" 's/private_dirty/privateDirty/g' process/*.go diff --git a/vendor/github.com/shirou/gopsutil/windows_memo.rst b/vendor/github.com/shirou/gopsutil/windows_memo.rst new file mode 100644 index 000000000..38abed819 --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/windows_memo.rst @@ -0,0 +1,36 @@ +Windows memo +===================== + +Size +---------- + +DWORD + 32-bit unsigned integer +DWORDLONG + 64-bit unsigned integer +DWORD_PTR + unsigned long type for pointer precision +DWORD32 + 32-bit unsigned integer +DWORD64 + 64-bit unsigned integer +HALF_PTR + _WIN64 = int, else short +INT + 32-bit signed integer +INT_PTR + _WIN64 = __int64 else int +LONG + 32-bit signed integer +LONGLONG + 64-bit signed integer +LONG_PTR + _WIN64 = __int64 else long +SHORT + 16-bit integer +SIZE_T + maximum number of bytes to which a pointer can point. typedef ULONG_PTR SIZE_T; +SSIZE_T + signed version of SIZE_T. typedef LONG_PTR SSIZE_T; +WORD + 16-bit unsigned integer \ No newline at end of file diff --git a/vendor/vendor.json b/vendor/vendor.json index 88c458103..dd8de919b 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1051,46 +1051,52 @@ "revisionTime": "2016-04-29T17:20:22Z" }, { - "checksumSHA1": "zW2k8E1gkuySzTz2eXuSEDhpffY=", + "checksumSHA1": "cDsY1Bw9zumq+u6RTpp3ubJPTMk=", + "path": "github.com/shirou/gopsutil", + "revision": "d4c8874c1901eea436d4b8df4f67a32a56a1b950", + "revisionTime": "2017-03-13T16:51:04Z" + }, + { + "checksumSHA1": "9LIkEB03iL8LhQNZ0ydyLxXY32A=", "path": "github.com/shirou/gopsutil/cpu", - "revision": "32b6636de04b303274daac3ca2b10d3b0e4afc35", - "revisionTime": "2017-02-04T05:36:48Z" + "revision": "d4c8874c1901eea436d4b8df4f67a32a56a1b950", + "revisionTime": "2017-03-13T16:51:04Z" }, { "checksumSHA1": "EHW4AH6SCfTJGTrnqZ56PiOrJ7o=", "path": "github.com/shirou/gopsutil/disk", - "revision": "32b6636de04b303274daac3ca2b10d3b0e4afc35", - "revisionTime": "2017-02-04T05:36:48Z" + "revision": "d4c8874c1901eea436d4b8df4f67a32a56a1b950", + "revisionTime": "2017-03-13T16:51:04Z" }, { - "checksumSHA1": "GsqEEmGv6sj8DreS2SYXRkoZ9NI=", + "checksumSHA1": "fe9lD1jnx0DF2ByG3/FeIbJRI4w=", "path": "github.com/shirou/gopsutil/host", - "revision": "b62e301a8b9958eebb7299683eb57fab229a9501", - "revisionTime": "2017-02-08T02:55:55Z" + "revision": "d4c8874c1901eea436d4b8df4f67a32a56a1b950", + "revisionTime": "2017-03-13T16:51:04Z" }, { - "checksumSHA1": "hz9RxkaV3Tnju2eiHBWO/Yv7n5c=", + "checksumSHA1": "S8QxcgsIi8ckcQRKNGCn4Z5Lymw=", "path": "github.com/shirou/gopsutil/internal/common", - "revision": "32b6636de04b303274daac3ca2b10d3b0e4afc35", - "revisionTime": "2017-02-04T05:36:48Z" + "revision": "d4c8874c1901eea436d4b8df4f67a32a56a1b950", + "revisionTime": "2017-03-13T16:51:04Z" }, { "checksumSHA1": "XQwjGKI51Y3aQ3/jNyRh9Gnprgg=", "path": "github.com/shirou/gopsutil/mem", - "revision": "32b6636de04b303274daac3ca2b10d3b0e4afc35", - "revisionTime": "2017-02-04T05:36:48Z" + "revision": "d4c8874c1901eea436d4b8df4f67a32a56a1b950", + "revisionTime": "2017-03-13T16:51:04Z" }, { - "checksumSHA1": "OSvOZs5uK5iolCOeS46nB2InVy8=", + "checksumSHA1": "zqdJo70e2vfUaNAs8hs3CA7ZmfQ=", "path": "github.com/shirou/gopsutil/net", - "revision": "32b6636de04b303274daac3ca2b10d3b0e4afc35", - "revisionTime": "2017-02-04T05:36:48Z" + "revision": "d4c8874c1901eea436d4b8df4f67a32a56a1b950", + "revisionTime": "2017-03-13T16:51:04Z" }, { - "checksumSHA1": "JX0bRK/BdKVfbm4XOxMducVdY58=", + "checksumSHA1": "g/TH+QY+CH4rJTg0BJ1vdLWIFaA=", "path": "github.com/shirou/gopsutil/process", - "revision": "32b6636de04b303274daac3ca2b10d3b0e4afc35", - "revisionTime": "2017-02-04T05:36:48Z" + "revision": "d4c8874c1901eea436d4b8df4f67a32a56a1b950", + "revisionTime": "2017-03-13T16:51:04Z" }, { "checksumSHA1": "Nve7SpDmjsv6+rhkXAkfg/UQx94=",