Skip to content

okmeter/gopsutil

 
 

Repository files navigation

gopsutil: psutil for golang

image

image

image

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

Package (a.k.a. directory) structure has been changed!! see issue 24

Since syscall package becomes frozen, we should use golang/x/sys of golang 1.4 as soon as possible.

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

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.

Documentation

see http://godoc.org/github.com/shirou/gopsutil

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 work but something broken
name Linux FreeBSD MacOSX Windows
cpu_times

x

x

x

x

cpu_count

x

x

x

x

cpu_percent

x

x

x

x

cpu_times_percent

x

x

x

x

virtual_memory swap_memory

x x

x x

x x

x

disk_partitions disk_io_counters

x x

x x

x

x

disk_usage

x

x

x

x

net_io_counters

x

x

b

x

boot_time

x

x

x

x

users

x

x

x

x

pids

x

x

x

x

pid_exists net_connections net_protocols net_if_addrs net_if_stats netfilter_conntrac

x x x

k x

x

x x

x

Process class

name Linux FreeBSD MacOSX Windows
pid

x

x

x

x

ppid

x

x

x

x

name cmdline create_time status cwd exe uids gids terminal io_counters nice num_fds num_ctx_switches

x x x x x x x x x x x x x

x

x

x x x x

x x

x

x x x

x

x x

x

x

num_threads cpu_times memory_info memory_info_ex memory_maps open_files send_signal suspend resume terminate kill username ionice rlimit num_handlres threads cpu_percent cpu_affinity memory_percent parent children connections is_running

x x x x x x x x x x x x

x

x x x

x

x

x x x x x

x

x

x

x x x x x

x

x x x

x

Original Metrics

item HostInfo

Linux

FreeBSD

MacOSX

Windows

hostname

uptime proces

x x x

x x x

x x

x

os platform platformfamiliy virtualization

CPU

x x x x

x x x

x x x

x

VendorID

x

x

x

x

Family

x

x

x

x

Model

x

x

x

x

Stepping PhysicalID CoreID Cores

x x x x

x

x

x

x

ModelName

LoadAvg

Load1 Load5 Load15

GetDockerID

x

x x x

x

x x x

x

x x x

x

container id

CgroupsCPU

x

no

no

no

user

x

no

no

no

system

CgroupsMem

x

no

no

no

various

x

no

no

no

  • future work
    • process_iter
    • wait_procs
    • Process class
      • as_dict
      • wait

License

New BSD License (same as psutil)

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.

Packages

No packages published

Languages

  • Go 99.5%
  • Shell 0.5%