elephantsaunter / gopsutil

psutil for golang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

gopsutil: psutil for golang

https://circleci.com/gh/shirou/gopsutil.svg?&style=shield https://coveralls.io/repos/shirou/gopsutil/badge.svg?branch=master

This is a port of psutil (http://pythonhosted.org/psutil/). The challenge is porting all psutil functions on some architectures.

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.

Available Architectures

  • FreeBSD i386/amd64
  • Linux i386/amd64/arm(raspberry pi)
  • Windows/amd64
  • Darwin/amd64

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.

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 /proc by setting the HOST_PROC environment variable.

You can set an alternative location to /sys by setting the HOST_SYS environment variable.

You can set an alternative location to /etc by setting the 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 ...")
  • 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

Process class

name Linux FreeBSD MacOSX Windows
pid x x x x
ppid x x x x
name x x x x
cmdline x   x x
create_time x      
status x x x  
cwd x      
exe x x   x
uids x x x  
gids x x x  
terminal x x x  
io_counters x x   x
nice x x x x
num_fds x      
num_ctx_switches x      
num_threads x x x x
cpu_times x      
memory_info x x x x
memory_info_ex x      
memory_maps x      
open_files x      
send_signal x x x  
suspend x x x  
resume x x x  
terminate x x x  
kill x x x  
username x      
ionice        
rlimit        
num_handlres        
threads        
cpu_percent x   x  
cpu_affinity        
memory_percent        
parent x   x  
children x x x  
connections x   x  
is_running        

Original Metrics

item Linux FreeBSD MacOSX Windows
HostInfo        
hostname x x x x
uptime x x x  
proces x x    
os x x x x
platform x x x  
platformfamiliy x x x  
virtualization x      
CPU        
VendorID x x x x
Family x x x x
Model x x x x
Stepping x x x x
PhysicalID x      
CoreID x      
Cores x     x
ModelName x x x x
LoadAvg        
Load1 x x x  
Load5 x x x  
Load15 x x x  
GetDockerID        
container id x no no no
CgroupsCPU        
user x no no no
system x no no no
CgroupsMem        
various x 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:

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.

About

psutil for golang

License:Other


Languages

Language:Go 97.5%Language:Shell 2.2%Language:Makefile 0.3%