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 <https://github.com/shirou/gopsutil/issues/174>`_ .


Migrating to v2
-------------------------

On gopsutil itself, `v2migration.sh <https://github.com/shirou/gopsutil/blob/v2/v2migration.sh>`_ is used for migration. It can not be commly used, but it may help to your 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.

.. 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 /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

Requrement
-----------------

- 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 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       x      x      x       x
swap_memory          x      x      x
disk_partitions      x      x      x       x
disk_io_counters     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           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 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
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
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:

- 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.
