Update docs

This commit is contained in:
Alessio Sergi 2014-06-08 20:44:49 +02:00
parent 8222630785
commit b1d8e7a260
63 changed files with 541 additions and 15231 deletions

3
.gitignore vendored
View File

@ -37,3 +37,6 @@ local.properties
# ctags
.tags*
# Sphinx
_build

View File

@ -18,7 +18,8 @@ Glances - An eye on your system
.. image:: https://raw.github.com/nicolargo/glances/master/docs/images/glances-white-256.png
:width: 128
**Glances** is a cross-platform curses-based system monitoring tool written in Python.
**Glances** is a cross-platform curses-based system monitoring tool
written in Python.
It uses the `psutil`_ library to get information from your system.
@ -33,10 +34,11 @@ Requirements
Optional dependencies:
- ``bottle`` (for Web Server mode)
- ``bottle`` (for Web server mode)
- ``py3sensors`` (for hardware monitoring support) [Linux-only]
- ``hddtemp`` (for HDD temperature monitoring support)
- ``hddtemp`` (for HDD temperature monitoring support) [Linux-only]
- ``batinfo`` (for battery monitoring support) [Linux-only]
- ``pysnmp`` (for SNMP support)
Installation
============
@ -44,7 +46,8 @@ Installation
PyPI: The simple way
--------------------
Glances is on `PyPI`_. By using Pypi, you are sure to have the latest stable version.
Glances is on `PyPI`_. By using PyPI, you are sure to have the latest
stable version.
To install, simply use `pip`_:
@ -52,7 +55,7 @@ To install, simply use `pip`_:
pip install Glances
*Note*: Python headers are required to install PSutil. For example,
*Note*: Python headers are required to install psutil. For example,
on Debian/Ubuntu you need to install first the *python-dev* package.
To upgrade Glances to the latest version:
@ -121,9 +124,10 @@ MacPorts
Windows
-------
Glances proposes a Windows client based on the `colorconsole`_ Python library.
Glances proposes a Windows client based on the `colorconsole`_ Python
library.
To install Glances on Windows OS, you have to follow these steps:
To install Glances on Windows, you have to follow these steps:
- Install Python for Windows: http://www.python.org/getit/
- Install the psutil library: https://pypi.python.org/pypi?:action=display&name=psutil#downloads
@ -166,7 +170,7 @@ For the Web server mode, run:
$ glances -w
and enter the URL http://<ip>:61208 in your favorite Web Browser.
and enter the URL ``http://<ip>:61208`` in your favorite web browser.
For the client/server mode, run:
@ -206,7 +210,6 @@ LGPL. See ``COPYING`` for more details.
.. _pip: http://www.pip-installer.org/
.. _Homebrew: http://brew.sh/
.. _MacPorts: https://www.macports.org/
.. _Glances-1.7.2-win32.msi: http://glances.s3.amazonaws.com/Glances-1.7.2-win32.msi
.. _colorconsole: https://pypi.python.org/pypi/colorconsole
.. _Puppet: https://puppetlabs.com/puppet/what-is-puppet/
.. _glances-doc: https://github.com/nicolargo/glances/blob/master/docs/glances-doc.rst

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +0,0 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 88f9709ac94d939db26f5322044ea5df
tags: fbb0d17656682115ca4d033fb2f83ba1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -1,529 +0,0 @@
=======
Glances
=======
This manual describes *Glances* version 1.7.3.
Copyright © 2012-2013 Nicolas Hennion <nicolas@nicolargo.com>
November 2013
.. contents:: Table of Contents
Introduction
============
Glances is a cross-platform curses-based monitoring tool which aims to
present a maximum of information in a minimum of space, ideally to fit
in a classical 80x24 terminal or higher to have additional information.
Glances can adapt dynamically the displayed information depending on the
terminal size. It can also work in a client/server mode for remote monitoring.
Glances is written in Python and uses the `psutil`_ library to get information from your system.
Console (80x24)
.. image:: images/screenshot.png
Full view (>80x24)
.. image:: images/screenshot-wide.png
Usage
=====
Standalone mode
---------------
Simply run:
.. code-block:: console
$ glances
Client/Server mode
------------------
If you want to remotely monitor a machine, called ``server``, from another one, called ``client``,
just run on the server:
.. code-block:: console
server$ glances -s
and on the client:
.. code-block:: console
client$ glances -c @server
where ``@server`` is the IP address or hostname of the server.
In server mode, you can set the bind address ``-B ADDRESS`` and listening TCP port ``-p PORT``.
In client mode, you can set the TCP port of the server ``-p PORT``.
Default binding address is ``0.0.0.0`` (Glances will listen on all the network interfaces) and TCP port is ``61209``.
In client/server mode, limits are set by the server side.
You can also set a password to access to the server ``-P password``.
Glances is ``IPv6`` compatible. Just use the ``-B ::`` option to bind to all IPv6 addresses.
Command reference
=================
Command-line options
--------------------
-b Display network rate in Byte per second (default: bit per second)
-B IP Bind server to the given IPv4/IPv6 address or hostname
-c IP Connect to a Glances server by IPv4/IPv6 address or hostname
-C FILE Path to the configuration file
-d Disable disk I/O module
-e Enable sensors module (requires pysensors, Linux-only)
-f FILE Set the HTML output folder or CSV file
-h Display the help and exit
-m Disable mount module
-n Disable network module
-o OUTPUT Define additional output (available: HTML or CSV)
-p PORT Define the client/server TCP port (default: 61209)
-P PASSWORD Define a client/server password
--password Define a client/server password from the prompt
-r Disable process list (for low CPU consumption)
-s Run Glances in server mode
-t SECONDS Set refresh time in seconds (default: 3 sec)
-v Display the version and exit
-y Enable hddtemp module (requires hddtemp)
-z Do not use the bold color attribute
-1 Start Glances in per-CPU mode
Interactive commands
--------------------
The following commands (key pressed) are supported while in Glances:
``a``
Sort process list automatically
- If CPU iowait ``>60%``, sort processes by I/O read and write
- If CPU ``>70%``, sort processes by CPU usage
- If MEM ``>70%``, sort processes by memory usage
``b``
Switch between bit/s or Byte/s for network I/O
``c``
Sort processes by CPU usage
``d``
Show/hide disk I/O stats
``f``
Show/hide file system stats
``h``
Show/hide the help screen
``i``
Sort processes by I/O rate (may need root privileges on some OSes)
``l``
Show/hide log messages
``m``
Sort processes by MEM usage
``n``
Show/hide network stats
``p``
Sort processes by name
``q``
Quit
``s``
Show/hide sensors stats (only available with -e flag)
``t``
View network I/O as combination
``u``
View cumulative network I/O
``w``
Delete finished warning log messages
``x``
Delete finished warning and critical log messages
``y``
Show/hide hddtemp stats (only available with -y flag)
``1``
Switch between global CPU and per-CPU stats
Configuration
=============
No configuration file is mandatory to use Glances.
Furthermore a configuration file is needed for setup limits and/or monitored processes list.
By default, the configuration file is under:
:Linux: ``/etc/glances/glances.conf``
:\*BSD and OS X: ``/usr/local/etc/glances/glances.conf``
:Windows: ``%APPDATA%\glances\glances.conf``
On Windows XP, the ``%APPDATA%`` path is:
.. code-block:: console
C:\Documents and Settings\<User>\Application Data
Since Windows Vista and newer versions:
.. code-block:: console
C:\Users\<User>\AppData\Roaming
You can override the default configuration, located in one of the above
directories on your system, except for Windows.
Just copy the ``glances.conf`` file to your ``$XDG_CONFIG_HOME`` directory, e.g. Linux:
.. code-block:: console
mkdir -p $XDG_CONFIG_HOME/glances
cp /etc/glances/glances.conf $XDG_CONFIG_HOME/glances/
On OS X, you should copy the configuration file to ``~/Library/Application Support/glances/``.
Anatomy of the application
==========================
Legend
------
| ``GREEN`` stat counter is ``"OK"``
| ``BLUE`` stat counter is ``"CAREFUL"``
| ``MAGENTA`` stat counter is ``"WARNING"``
| ``RED`` stat counter is ``"CRITICAL"``
Header
------
.. image:: images/header.png
The header shows the OS name, release version, platform architecture and the hostname.
On Linux, it shows also the kernel version.
CPU
---
Short view:
.. image:: images/cpu.png
If enough horizontal space is available, extended CPU informations are displayed.
Extended view:
.. image:: images/cpu-wide.png
To switch to per-CPU stats, just hit the ``1`` key:
.. image:: images/per-cpu.png
The CPU stats are shown as a percentage and for the configured refresh time.
The total CPU usage is displayed on the first line.
| If user|system|nice CPU is ``<50%``, then status is set to ``"OK"``
| If user|system|nice CPU is ``>50%``, then status is set to ``"CAREFUL"``
| If user|system|nice CPU is ``>70%``, then status is set to ``"WARNING"``
| If user|system|nice CPU is ``>90%``, then status is set to ``"CRITICAL"``
*Note*: limit values can be overwritten in the configuration file under the ``[cpu]`` section.
Load
----
.. image:: images/load.png
On the *No Sheep* blog, *Zachary Tirrell* defines the average load [1]_:
"In short it is the average sum of the number of processes
waiting in the run-queue plus the number currently executing
over 1, 5, and 15 minute time periods."
Glances gets the number of CPU core to adapt the alerts.
Alerts on average load are only set on 5 and 15 min.
The first line also display the number of CPU core.
| If average load is ``<0.7*core``, then status is set to ``"OK"``
| If average load is ``>0.7*core``, then status is set to ``"CAREFUL"``
| If average load is ``>1*core``, then status is set to ``"WARNING"``
| If average load is ``>5*core``, then status is set to ``"CRITICAL"``
*Note*: limit values can be overwritten in the configuration file under the ``[load]`` section.
Memory
------
Glances uses two columns: one for the ``RAM`` and another one for the ``Swap``.
.. image:: images/mem.png
If enough space is available, Glances displays extended informations:
.. image:: images/mem-wide.png
With Glances, alerts are only set for on used memory and used swap.
| If memory is ``<50%``, then status is set to ``"OK"``
| If memory is ``>50%``, then status is set to ``"CAREFUL"``
| If memory is ``>70%``, then status is set to ``"WARNING"``
| If memory is ``>90%``, then status is set to ``"CRITICAL"``
*Note*: limit values can be overwritten in the configuration file under the ``[memory]`` and ``[swap]`` sections.
Network
-------
.. image:: images/network.png
Glances displays the network interface bit rate. The unit is adapted
dynamically (bits per second, kbits per second, Mbits per second, etc).
Alerts are only set if the network interface maximum speed is available.
For example, on a 100 Mbps ethernet interface, the warning status is set
if the bit rate is higher than 70 Mbps.
| If bit rate is ``<50%``, then status is set to ``"OK"``
| If bit rate is ``>50%``, then status is set to ``"CAREFUL"``
| If bit rate is ``>70%``, then status is set to ``"WARNING"``
| If bit rate is ``>90%``, then status is set to ``"CRITICAL"``
Sensors
-------
Glances can displays the sensors informations trough `lm-sensors` (only available on Linux).
As of lm-sensors, a filter is processed in order to display temperature only:
.. image:: images/sensors.png
Glances can also grab hard disk temperature through the `hddtemp` daemon (see here [2]_ to install hddtemp on your system):
.. image:: images/hddtemp.png
To enable the lm-sensors module:
.. code-block:: console
$ glances -e
To enable the hddtemp module:
.. code-block:: console
$ glances -y
There is no alert on this information.
*Note*: limit values can be overwritten in the configuration file under the ``[temperature]`` and ``[hddtemperature]`` sections.
Disk I/O
--------
.. image:: images/diskio.png
Glances displays the disk I/O throughput. The unit is adapted dynamically.
*Note*: There is no alert on this information.
File system
-----------
.. image:: images/fs.png
Glances displays the used and total file system disk space. The unit is
adapted dynamically.
Alerts are set for used disk space:
| If disk used is ``<50%``, then status is set to ``"OK"``
| If disk used is ``>50%``, then status is set to ``"CAREFUL"``
| If disk used is ``>70%``, then status is set to ``"WARNING"``
| If disk used is ``>90%``, then status is set to ``"CRITICAL"``
*Note*: limit values can be overwritten in the configuration file under ``[filesystem]`` section.
Processes list
--------------
Compact view:
.. image:: images/processlist.png
Full view:
.. image:: images/processlist-wide.png
Three views are available for processes:
* Processes summary
* Optional monitored processes list (new in 1.7)
* Processes list
By default, or if you hit the ``a`` key, the processes list is automatically
sorted by CPU of memory usage.
*Note*: limit values can be overwritten in the configuration file under the ``[process]`` section.
The number of processes in the list is adapted to the screen size.
``VIRT``
Total program size (VMS)
``RES``
Resident set size (RSS)
``CPU%``
% of CPU used by the process
``MEM%``
% of MEM used by the process
``PID``
Process ID
``USER``
User ID per process
``NI``
Nice level of the process
``S``
Process status
``TIME+``
Cumulative CPU time used
``IOR/s``
Per process IO read rate (in Byte/s)
``IOW/s``
Per process IO write rate (in Byte/s)
``NAME``
Process name or command line
Process status legend:
``R``
running
``S``
sleeping (may be interrupted)
``D``
disk sleep (may not be interrupted)
``T``
traced/stopped
``Z``
zombie
Monitored processes list
------------------------
New in version 1.7. Optional.
The monitored processes list allows user, through the configuration file,
to group processes and quickly show if the number of running process is not good.
.. image:: images/monitored.png
Each item is defined by:
* ``description``: description of the processes (max 16 chars).
* ``regex``: regular expression of the processes to monitor.
* ``command`` (optional): full path to shell command/script for extended stat. Should return a single line string. Use with caution.
* ``countmin`` (optional): minimal number of processes. A warning will be displayed if number of processes < count.
* ``countmax`` (optional): maximum number of processes. A warning will be displayed if number of processes > count.
Up to 10 items can be defined.
For example, if you want to monitor the Nginx processes on a Web server, the following definition should do the job:
.. code-block:: console
[monitor]
list_1_description=Nginx server
list_1_regex=.*nginx.*
list_1_command=nginx -v
list_1_countmin=1
list_1_countmax=4
If you also want to monitor the PHP-FPM daemon processes, you should add another item:
.. code-block:: console
[monitor]
list_1_description=Nginx server
list_1_regex=.*nginx.*
list_1_command=nginx -v
list_1_countmin=1
list_1_countmax=4
list_1_description=PHP-FPM
list_1_regex=.*php-fpm.*
list_1_countmin=1
list_1_countmax=20
In client/server mode, the list is defined on the server side.
A new method, called getAllMonitored, is available in the APIs and get the JSON representation of the monitored processes list.
Alerts are set as following:
| If number of processes is 0, then status is set to ``"CRITICAL"``
| If number of processes is min < current < max, then status is set to ``"OK"``
| Else status is set to ``"WARNING"``
Logs
----
.. image:: images/logs.png
A log messages list is displayed in the bottom of the screen if (and only if):
- at least one ``WARNING`` or ``CRITICAL`` alert was occurred
- space is available in the bottom of the console/terminal
Each alert message displays the following information:
1. start date
2. end date
3. alert name
4. {min/avg/max} values or number of running processes for monitored processes list alerts
Footer
------
.. image:: images/footer.png
Glances displays the current date & time and access to the embedded help screen.
If one or mode batteries were found on your machine and if the batinfo Python library [3]_
is installed on your system then Glances displays the available percent capacity in the middle on the footer.
.. image:: images/battery.png
If you have ran Glances in client mode ``-c``, you can also see if the client is connected to the server.
If client is connected:
.. image:: images/client-connected.png
else:
.. image:: images/client-disconnected.png
On the left, you can easily see if you are connected to a Glances server.
API documentation
=================
Glances uses a `XML-RPC server`_ and can be used by another client software.
API documentation is available at https://github.com/nicolargo/glances/wiki/The-Glances-API-How-To
Support
=======
To report a bug or a feature request use the bug tracking system at https://github.com/nicolargo/glances/issues
Feel free to contribute!
.. [1] http://nosheep.net/story/defining-unix-load-average/
.. [2] http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html
.. [3] https://github.com/nicolargo/batinfo
.. _psutil: https://code.google.com/p/psutil/
.. _XML-RPC server: http://docs.python.org/2/library/simplexmlrpcserver.html

View File

@ -1,28 +0,0 @@
Welcome to Glances's documentation!
===================================
**Glances** is a cross-platform curses-based monitoring tool written in Python.
It uses the psutil library and some internal code to get information from your system.
.. image:: https://raw.github.com/nicolargo/glances/master/docs/images/screenshot-wide.png
Get the code
------------
The `source <http://github.com/nicolargo/glances>`_ is available on GitHub.
Contents
--------
.. toctree::
:maxdepth: 2
glances-doc
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

View File

@ -1,540 +0,0 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox input[type="text"] {
width: 170px;
}
div.sphinxsidebar #searchbox input[type="submit"] {
width: 30px;
}
img {
border: 0;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li div.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable dl, table.indextable dd {
margin-top: 0;
margin-bottom: 0;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- general body styles --------------------------------------------------- */
a.headerlink {
visibility: hidden;
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.field-list ul {
padding-left: 1em;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px 7px 0 7px;
background-color: #ffe;
width: 40%;
float: right;
}
p.sidebar-title {
font-weight: bold;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px 7px 0 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
div.admonition dl {
margin-bottom: 0;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
border: 0;
border-collapse: collapse;
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
table.field-list td, table.field-list th {
border: 0 !important;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
dl {
margin-bottom: 15px;
}
dd p {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dt:target, .highlighted {
background-color: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.refcount {
color: #060;
}
.optional {
font-size: 1.3em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
td.linenos pre {
padding: 5px 0px;
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
margin-left: 0.5em;
}
table.highlighttable td {
padding: 0 0.5em 0 0.5em;
}
tt.descname {
background-color: transparent;
font-weight: bold;
font-size: 1.2em;
}
tt.descclassname {
background-color: transparent;
}
tt.xref, a tt {
background-color: transparent;
font-weight: bold;
}
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,256 +0,0 @@
/*
* default.css_t
* ~~~~~~~~~~~~~
*
* Sphinx stylesheet -- default theme.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: sans-serif;
font-size: 100%;
background-color: #11303d;
color: #000;
margin: 0;
padding: 0;
}
div.document {
background-color: #1c4e63;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 230px;
}
div.body {
background-color: #ffffff;
color: #000000;
padding: 0 20px 30px 20px;
}
div.footer {
color: #ffffff;
width: 100%;
padding: 9px 0 9px 0;
text-align: center;
font-size: 75%;
}
div.footer a {
color: #ffffff;
text-decoration: underline;
}
div.related {
background-color: #133f52;
line-height: 30px;
color: #ffffff;
}
div.related a {
color: #ffffff;
}
div.sphinxsidebar {
}
div.sphinxsidebar h3 {
font-family: 'Trebuchet MS', sans-serif;
color: #ffffff;
font-size: 1.4em;
font-weight: normal;
margin: 0;
padding: 0;
}
div.sphinxsidebar h3 a {
color: #ffffff;
}
div.sphinxsidebar h4 {
font-family: 'Trebuchet MS', sans-serif;
color: #ffffff;
font-size: 1.3em;
font-weight: normal;
margin: 5px 0 0 0;
padding: 0;
}
div.sphinxsidebar p {
color: #ffffff;
}
div.sphinxsidebar p.topless {
margin: 5px 10px 10px 10px;
}
div.sphinxsidebar ul {
margin: 10px;
padding: 0;
color: #ffffff;
}
div.sphinxsidebar a {
color: #98dbcc;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
/* -- hyperlink styles ------------------------------------------------------ */
a {
color: #355f7c;
text-decoration: none;
}
a:visited {
color: #355f7c;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* -- body styles ----------------------------------------------------------- */
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: 'Trebuchet MS', sans-serif;
background-color: #f2f2f2;
font-weight: normal;
color: #20435c;
border-bottom: 1px solid #ccc;
margin: 20px -20px 10px -20px;
padding: 3px 0 3px 10px;
}
div.body h1 { margin-top: 0; font-size: 200%; }
div.body h2 { font-size: 160%; }
div.body h3 { font-size: 140%; }
div.body h4 { font-size: 120%; }
div.body h5 { font-size: 110%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: #c60f0f;
font-size: 0.8em;
padding: 0 4px 0 4px;
text-decoration: none;
}
a.headerlink:hover {
background-color: #c60f0f;
color: white;
}
div.body p, div.body dd, div.body li {
text-align: justify;
line-height: 130%;
}
div.admonition p.admonition-title + p {
display: inline;
}
div.admonition p {
margin-bottom: 5px;
}
div.admonition pre {
margin-bottom: 5px;
}
div.admonition ul, div.admonition ol {
margin-bottom: 5px;
}
div.note {
background-color: #eee;
border: 1px solid #ccc;
}
div.seealso {
background-color: #ffc;
border: 1px solid #ff6;
}
div.topic {
background-color: #eee;
}
div.warning {
background-color: #ffe4e4;
border: 1px solid #f66;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre {
padding: 5px;
background-color: #eeffcc;
color: #333333;
line-height: 120%;
border: 1px solid #ac9;
border-left: none;
border-right: none;
}
tt {
background-color: #ecf0f3;
padding: 0 1px 0 1px;
font-size: 0.95em;
}
th {
background-color: #ede;
}
.warning tt {
background: #efc2c2;
}
.note tt {
background: #d6d6d6;
}
.viewcode-back {
font-family: sans-serif;
}
div.viewcode-block:target {
background-color: #f4debf;
border-top: 1px solid #ac9;
border-bottom: 1px solid #ac9;
}

View File

@ -1,247 +0,0 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*/
jQuery.urldecode = function(x) {
return decodeURIComponent(x).replace(/\+/g, ' ');
}
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s == 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* small function to check if an array contains
* a given item.
*/
jQuery.contains = function(arr, item) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == item)
return true;
}
return false;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node) {
if (node.nodeType == 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
var span = document.createElement("span");
span.className = className;
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this);
});
}
}
return this.each(function() {
highlight(this);
});
};
/**
* Small JavaScript module for the documentation.
*/
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
},
/**
* i18n support
*/
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated == 'undefined')
return string;
return (typeof translated == 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated == 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) == 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
},
/**
* make the url absolute
*/
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this == '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
}
};
// quick alias for translations
_ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

View File

@ -1,62 +0,0 @@
.highlight .hll { background-color: #ffffcc }
.highlight { background: #eeffcc; }
.highlight .c { color: #408090; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #007020 } /* Comment.Preproc */
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #333333 } /* Generic.Output */
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #902000 } /* Keyword.Type */
.highlight .m { color: #208050 } /* Literal.Number */
.highlight .s { color: #4070a0 } /* Literal.String */
.highlight .na { color: #4070a0 } /* Name.Attribute */
.highlight .nb { color: #007020 } /* Name.Builtin */
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60add5 } /* Name.Constant */
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #007020 } /* Name.Exception */
.highlight .nf { color: #06287e } /* Name.Function */
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #bb60d5 } /* Name.Variable */
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #208050 } /* Literal.Number.Float */
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
.highlight .sr { color: #235388 } /* Literal.String.Regex */
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */

View File

@ -1,567 +0,0 @@
/*
* searchtools.js_t
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilties for the full-text search.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurance, the
* latter for highlighting it.
*/
jQuery.makeSearchSummary = function(text, keywords, hlwords) {
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}
/**
* Search Module
*/
var Search = {
_index : null,
_queued_query : null,
_pulse_status : -1,
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex : function() {
return this._index !== null;
},
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse : function() {
this._pulse_status = 0;
},
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = '';
for (var i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
};
pulse();
},
/**
* perform a search for something
*/
performSearch : function(query) {
// create the required interface elements
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p style="display: none"></p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
query : function(query) {
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
// Stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = query.split(/\s+/);
var objectterms = [];
for (var i = 0; i < tmp.length; i++) {
if (tmp[i] != "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] == "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i]).toLowerCase();
// select the correct list
if (word[0] == '-') {
var toAppend = excluded;
word = word.substr(1);
}
else {
var toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
// only add if not already in the list
if (!$.contains(toAppend, word))
toAppend.push(word);
};
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// prepare search
var filenames = this._index.filenames;
var titles = this._index.titles;
var terms = this._index.terms;
var fileMap = {};
var files = null;
// different result priorities
var importantResults = [];
var objectResults = [];
var regularResults = [];
var unimportantResults = [];
$('#search-progress').empty();
// lookup as object
for (var i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0,i),
objectterms.slice(i+1, objectterms.length))
var results = this.performObjectSearch(objectterms[i], others);
// Assume first word is most likely to be the object,
// other words more likely to be in description.
// Therefore put matches for earlier words first.
// (Results are eventually used in reverse order).
objectResults = results[0].concat(objectResults);
importantResults = results[1].concat(importantResults);
unimportantResults = results[2].concat(unimportantResults);
}
// perform the search on the required terms
for (var i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
// no match but word was a required one
if ((files = terms[word]) == null)
break;
if (files.length == undefined) {
files = [files];
}
// create the mapping
for (var j = 0; j < files.length; j++) {
var file = files[j];
if (file in fileMap)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
for (var file in fileMap) {
var valid = true;
// check if all requirements are matched
if (fileMap[file].length != searchterms.length)
continue;
// ensure that none of the excluded terms is in the
// search result.
for (var i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
$.contains(terms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// if we have still a valid result we can add it
// to the result list
if (valid)
regularResults.push([filenames[file], titles[file], '', null]);
}
// delete unused variables in order to not waste
// memory until list is retrieved completely
delete filenames, titles, terms;
// now sort the regular results descending by title
regularResults.sort(function(a, b) {
var left = a[1].toLowerCase();
var right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
});
// combine all results
var results = unimportantResults.concat(regularResults)
.concat(objectResults).concat(importantResults);
// print the results
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li style="display:none"></li>');
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
listItem.append($('<a/>').attr('href',
DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
highlightstring + item[2]).html(item[1]));
} else {
// normal html builders
listItem.append($('<a/>').attr('href',
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
highlightstring + item[2]).html(item[1]));
}
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '') {
listItem.append($.makeSearchSummary(data, searchterms, hlterms));
}
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}});
} else {
// no source available, just display title
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
var importantResults = [];
var objectResults = [];
var unimportantResults = [];
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
if (fullname.toLowerCase().indexOf(object) > -1) {
var match = objects[prefix][name];
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (var i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
anchor = match[3];
if (anchor == '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
result = [filenames[match[0]], fullname, '#'+anchor, descr];
switch (match[2]) {
case 1: objectResults.push(result); break;
case 0: importantResults.push(result); break;
case 2: unimportantResults.push(result); break;
}
}
}
}
// sort results descending
objectResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
importantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
unimportantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
return [importantResults, objectResults, unimportantResults]
}
}
$(document).ready(function() {
Search.init();
});

View File

@ -1,151 +0,0 @@
/*
* sidebar.js
* ~~~~~~~~~~
*
* This script makes the Sphinx sidebar collapsible.
*
* .sphinxsidebar contains .sphinxsidebarwrapper. This script adds
* in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
* used to collapse and expand the sidebar.
*
* When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
* and the width of the sidebar and the margin-left of the document
* are decreased. When the sidebar is expanded the opposite happens.
* This script saves a per-browser/per-session cookie used to
* remember the position of the sidebar among the pages.
* Once the browser is closed the cookie is deleted and the position
* reset to the default (expanded).
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
$(function() {
// global elements used by the functions.
// the 'sidebarbutton' element is defined as global after its
// creation, in the add_sidebar_button function
var bodywrapper = $('.bodywrapper');
var sidebar = $('.sphinxsidebar');
var sidebarwrapper = $('.sphinxsidebarwrapper');
// for some reason, the document has no sidebar; do not run into errors
if (!sidebar.length) return;
// original margin-left of the bodywrapper and width of the sidebar
// with the sidebar expanded
var bw_margin_expanded = bodywrapper.css('margin-left');
var ssb_width_expanded = sidebar.width();
// margin-left of the bodywrapper and width of the sidebar
// with the sidebar collapsed
var bw_margin_collapsed = '.8em';
var ssb_width_collapsed = '.8em';
// colors used by the current theme
var dark_color = $('.related').css('background-color');
var light_color = $('.document').css('background-color');
function sidebar_is_collapsed() {
return sidebarwrapper.is(':not(:visible)');
}
function toggle_sidebar() {
if (sidebar_is_collapsed())
expand_sidebar();
else
collapse_sidebar();
}
function collapse_sidebar() {
sidebarwrapper.hide();
sidebar.css('width', ssb_width_collapsed);
bodywrapper.css('margin-left', bw_margin_collapsed);
sidebarbutton.css({
'margin-left': '0',
'height': bodywrapper.height()
});
sidebarbutton.find('span').text('»');
sidebarbutton.attr('title', _('Expand sidebar'));
document.cookie = 'sidebar=collapsed';
}
function expand_sidebar() {
bodywrapper.css('margin-left', bw_margin_expanded);
sidebar.css('width', ssb_width_expanded);
sidebarwrapper.show();
sidebarbutton.css({
'margin-left': ssb_width_expanded-12,
'height': bodywrapper.height()
});
sidebarbutton.find('span').text('«');
sidebarbutton.attr('title', _('Collapse sidebar'));
document.cookie = 'sidebar=expanded';
}
function add_sidebar_button() {
sidebarwrapper.css({
'float': 'left',
'margin-right': '0',
'width': ssb_width_expanded - 28
});
// create the button
sidebar.append(
'<div id="sidebarbutton"><span>&laquo;</span></div>'
);
var sidebarbutton = $('#sidebarbutton');
light_color = sidebarbutton.css('background-color');
// find the height of the viewport to center the '<<' in the page
var viewport_height;
if (window.innerHeight)
viewport_height = window.innerHeight;
else
viewport_height = $(window).height();
sidebarbutton.find('span').css({
'display': 'block',
'margin-top': (viewport_height - sidebar.position().top - 20) / 2
});
sidebarbutton.click(toggle_sidebar);
sidebarbutton.attr('title', _('Collapse sidebar'));
sidebarbutton.css({
'color': '#FFFFFF',
'border-left': '1px solid ' + dark_color,
'font-size': '1.2em',
'cursor': 'pointer',
'height': bodywrapper.height(),
'padding-top': '1px',
'margin-left': ssb_width_expanded - 12
});
sidebarbutton.hover(
function () {
$(this).css('background-color', dark_color);
},
function () {
$(this).css('background-color', light_color);
}
);
}
function set_position_from_cookie() {
if (!document.cookie)
return;
var items = document.cookie.split(';');
for(var k=0; k<items.length; k++) {
var key_val = items[k].split('=');
var key = key_val[0];
if (key == 'sidebar') {
var value = key_val[1];
if ((value == 'collapsed') && (!sidebar_is_collapsed()))
collapse_sidebar();
else if ((value == 'expanded') && (sidebar_is_collapsed()))
expand_sidebar();
}
}
}
add_sidebar_button();
var sidebarbutton = $('#sidebarbutton');
set_position_from_cookie();
});

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 B

View File

@ -1,808 +0,0 @@
/*
* websupport.js
* ~~~~~~~~~~~~~
*
* sphinx.websupport utilties for all documentation.
*
* :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
(function($) {
$.fn.autogrow = function() {
return this.each(function() {
var textarea = this;
$.fn.autogrow.resize(textarea);
$(textarea)
.focus(function() {
textarea.interval = setInterval(function() {
$.fn.autogrow.resize(textarea);
}, 500);
})
.blur(function() {
clearInterval(textarea.interval);
});
});
};
$.fn.autogrow.resize = function(textarea) {
var lineHeight = parseInt($(textarea).css('line-height'), 10);
var lines = textarea.value.split('\n');
var columns = textarea.cols;
var lineCount = 0;
$.each(lines, function() {
lineCount += Math.ceil(this.length / columns) || 1;
});
var height = lineHeight * (lineCount + 1);
$(textarea).css('height', height);
};
})(jQuery);
(function($) {
var comp, by;
function init() {
initEvents();
initComparator();
}
function initEvents() {
$('a.comment-close').live("click", function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
});
$('a.vote').live("click", function(event) {
event.preventDefault();
handleVote($(this));
});
$('a.reply').live("click", function(event) {
event.preventDefault();
openReply($(this).attr('id').substring(2));
});
$('a.close-reply').live("click", function(event) {
event.preventDefault();
closeReply($(this).attr('id').substring(2));
});
$('a.sort-option').live("click", function(event) {
event.preventDefault();
handleReSort($(this));
});
$('a.show-proposal').live("click", function(event) {
event.preventDefault();
showProposal($(this).attr('id').substring(2));
});
$('a.hide-proposal').live("click", function(event) {
event.preventDefault();
hideProposal($(this).attr('id').substring(2));
});
$('a.show-propose-change').live("click", function(event) {
event.preventDefault();
showProposeChange($(this).attr('id').substring(2));
});
$('a.hide-propose-change').live("click", function(event) {
event.preventDefault();
hideProposeChange($(this).attr('id').substring(2));
});
$('a.accept-comment').live("click", function(event) {
event.preventDefault();
acceptComment($(this).attr('id').substring(2));
});
$('a.delete-comment').live("click", function(event) {
event.preventDefault();
deleteComment($(this).attr('id').substring(2));
});
$('a.comment-markup').live("click", function(event) {
event.preventDefault();
toggleCommentMarkupBox($(this).attr('id').substring(2));
});
}
/**
* Set comp, which is a comparator function used for sorting and
* inserting comments into the list.
*/
function setComparator() {
// If the first three letters are "asc", sort in ascending order
// and remove the prefix.
if (by.substring(0,3) == 'asc') {
var i = by.substring(3);
comp = function(a, b) { return a[i] - b[i]; };
} else {
// Otherwise sort in descending order.
comp = function(a, b) { return b[by] - a[by]; };
}
// Reset link styles and format the selected sort option.
$('a.sel').attr('href', '#').removeClass('sel');
$('a.by' + by).removeAttr('href').addClass('sel');
}
/**
* Create a comp function. If the user has preferences stored in
* the sortBy cookie, use those, otherwise use the default.
*/
function initComparator() {
by = 'rating'; // Default to sort by rating.
// If the sortBy cookie is set, use that instead.
if (document.cookie.length > 0) {
var start = document.cookie.indexOf('sortBy=');
if (start != -1) {
start = start + 7;
var end = document.cookie.indexOf(";", start);
if (end == -1) {
end = document.cookie.length;
by = unescape(document.cookie.substring(start, end));
}
}
}
setComparator();
}
/**
* Show a comment div.
*/
function show(id) {
$('#ao' + id).hide();
$('#ah' + id).show();
var context = $.extend({id: id}, opts);
var popup = $(renderTemplate(popupTemplate, context)).hide();
popup.find('textarea[name="proposal"]').hide();
popup.find('a.by' + by).addClass('sel');
var form = popup.find('#cf' + id);
form.submit(function(event) {
event.preventDefault();
addComment(form);
});
$('#s' + id).after(popup);
popup.slideDown('fast', function() {
getComments(id);
});
}
/**
* Hide a comment div.
*/
function hide(id) {
$('#ah' + id).hide();
$('#ao' + id).show();
var div = $('#sc' + id);
div.slideUp('fast', function() {
div.remove();
});
}
/**
* Perform an ajax request to get comments for a node
* and insert the comments into the comments tree.
*/
function getComments(id) {
$.ajax({
type: 'GET',
url: opts.getCommentsURL,
data: {node: id},
success: function(data, textStatus, request) {
var ul = $('#cl' + id);
var speed = 100;
$('#cf' + id)
.find('textarea[name="proposal"]')
.data('source', data.source);
if (data.comments.length === 0) {
ul.html('<li>No comments yet.</li>');
ul.data('empty', true);
} else {
// If there are comments, sort them and put them in the list.
var comments = sortComments(data.comments);
speed = data.comments.length * 100;
appendComments(comments, ul);
ul.data('empty', false);
}
$('#cn' + id).slideUp(speed + 200);
ul.slideDown(speed);
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem retrieving the comments.');
},
dataType: 'json'
});
}
/**
* Add a comment via ajax and insert the comment into the comment tree.
*/
function addComment(form) {
var node_id = form.find('input[name="node"]').val();
var parent_id = form.find('input[name="parent"]').val();
var text = form.find('textarea[name="comment"]').val();
var proposal = form.find('textarea[name="proposal"]').val();
if (text == '') {
showError('Please enter a comment.');
return;
}
// Disable the form that is being submitted.
form.find('textarea,input').attr('disabled', 'disabled');
// Send the comment to the server.
$.ajax({
type: "POST",
url: opts.addCommentURL,
dataType: 'json',
data: {
node: node_id,
parent: parent_id,
text: text,
proposal: proposal
},
success: function(data, textStatus, error) {
// Reset the form.
if (node_id) {
hideProposeChange(node_id);
}
form.find('textarea')
.val('')
.add(form.find('input'))
.removeAttr('disabled');
var ul = $('#cl' + (node_id || parent_id));
if (ul.data('empty')) {
$(ul).empty();
ul.data('empty', false);
}
insertComment(data.comment);
var ao = $('#ao' + node_id);
ao.find('img').attr({'src': opts.commentBrightImage});
if (node_id) {
// if this was a "root" comment, remove the commenting box
// (the user can get it back by reopening the comment popup)
$('#ca' + node_id).slideUp();
}
},
error: function(request, textStatus, error) {
form.find('textarea,input').removeAttr('disabled');
showError('Oops, there was a problem adding the comment.');
}
});
}
/**
* Recursively append comments to the main comment list and children
* lists, creating the comment tree.
*/
function appendComments(comments, ul) {
$.each(comments, function() {
var div = createCommentDiv(this);
ul.append($(document.createElement('li')).html(div));
appendComments(this.children, div.find('ul.comment-children'));
// To avoid stagnating data, don't store the comments children in data.
this.children = null;
div.data('comment', this);
});
}
/**
* After adding a new comment, it must be inserted in the correct
* location in the comment tree.
*/
function insertComment(comment) {
var div = createCommentDiv(comment);
// To avoid stagnating data, don't store the comments children in data.
comment.children = null;
div.data('comment', comment);
var ul = $('#cl' + (comment.node || comment.parent));
var siblings = getChildren(ul);
var li = $(document.createElement('li'));
li.hide();
// Determine where in the parents children list to insert this comment.
for(i=0; i < siblings.length; i++) {
if (comp(comment, siblings[i]) <= 0) {
$('#cd' + siblings[i].id)
.parent()
.before(li.html(div));
li.slideDown('fast');
return;
}
}
// If we get here, this comment rates lower than all the others,
// or it is the only comment in the list.
ul.append(li.html(div));
li.slideDown('fast');
}
function acceptComment(id) {
$.ajax({
type: 'POST',
url: opts.acceptCommentURL,
data: {id: id},
success: function(data, textStatus, request) {
$('#cm' + id).fadeOut('fast');
$('#cd' + id).removeClass('moderate');
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem accepting the comment.');
}
});
}
function deleteComment(id) {
$.ajax({
type: 'POST',
url: opts.deleteCommentURL,
data: {id: id},
success: function(data, textStatus, request) {
var div = $('#cd' + id);
if (data == 'delete') {
// Moderator mode: remove the comment and all children immediately
div.slideUp('fast', function() {
div.remove();
});
return;
}
// User mode: only mark the comment as deleted
div
.find('span.user-id:first')
.text('[deleted]').end()
.find('div.comment-text:first')
.text('[deleted]').end()
.find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
.remove();
var comment = div.data('comment');
comment.username = '[deleted]';
comment.text = '[deleted]';
div.data('comment', comment);
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem deleting the comment.');
}
});
}
function showProposal(id) {
$('#sp' + id).hide();
$('#hp' + id).show();
$('#pr' + id).slideDown('fast');
}
function hideProposal(id) {
$('#hp' + id).hide();
$('#sp' + id).show();
$('#pr' + id).slideUp('fast');
}
function showProposeChange(id) {
$('#pc' + id).hide();
$('#hc' + id).show();
var textarea = $('#pt' + id);
textarea.val(textarea.data('source'));
$.fn.autogrow.resize(textarea[0]);
textarea.slideDown('fast');
}
function hideProposeChange(id) {
$('#hc' + id).hide();
$('#pc' + id).show();
var textarea = $('#pt' + id);
textarea.val('').removeAttr('disabled');
textarea.slideUp('fast');
}
function toggleCommentMarkupBox(id) {
$('#mb' + id).toggle();
}
/** Handle when the user clicks on a sort by link. */
function handleReSort(link) {
var classes = link.attr('class').split(/\s+/);
for (var i=0; i<classes.length; i++) {
if (classes[i] != 'sort-option') {
by = classes[i].substring(2);
}
}
setComparator();
// Save/update the sortBy cookie.
var expiration = new Date();
expiration.setDate(expiration.getDate() + 365);
document.cookie= 'sortBy=' + escape(by) +
';expires=' + expiration.toUTCString();
$('ul.comment-ul').each(function(index, ul) {
var comments = getChildren($(ul), true);
comments = sortComments(comments);
appendComments(comments, $(ul).empty());
});
}
/**
* Function to process a vote when a user clicks an arrow.
*/
function handleVote(link) {
if (!opts.voting) {
showError("You'll need to login to vote.");
return;
}
var id = link.attr('id');
if (!id) {
// Didn't click on one of the voting arrows.
return;
}
// If it is an unvote, the new vote value is 0,
// Otherwise it's 1 for an upvote, or -1 for a downvote.
var value = 0;
if (id.charAt(1) != 'u') {
value = id.charAt(0) == 'u' ? 1 : -1;
}
// The data to be sent to the server.
var d = {
comment_id: id.substring(2),
value: value
};
// Swap the vote and unvote links.
link.hide();
$('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
.show();
// The div the comment is displayed in.
var div = $('div#cd' + d.comment_id);
var data = div.data('comment');
// If this is not an unvote, and the other vote arrow has
// already been pressed, unpress it.
if ((d.value !== 0) && (data.vote === d.value * -1)) {
$('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
$('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
}
// Update the comments rating in the local data.
data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
data.vote = d.value;
div.data('comment', data);
// Change the rating text.
div.find('.rating:first')
.text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
// Send the vote information to the server.
$.ajax({
type: "POST",
url: opts.processVoteURL,
data: d,
error: function(request, textStatus, error) {
showError('Oops, there was a problem casting that vote.');
}
});
}
/**
* Open a reply form used to reply to an existing comment.
*/
function openReply(id) {
// Swap out the reply link for the hide link
$('#rl' + id).hide();
$('#cr' + id).show();
// Add the reply li to the children ul.
var div = $(renderTemplate(replyTemplate, {id: id})).hide();
$('#cl' + id)
.prepend(div)
// Setup the submit handler for the reply form.
.find('#rf' + id)
.submit(function(event) {
event.preventDefault();
addComment($('#rf' + id));
closeReply(id);
})
.find('input[type=button]')
.click(function() {
closeReply(id);
});
div.slideDown('fast', function() {
$('#rf' + id).find('textarea').focus();
});
}
/**
* Close the reply form opened with openReply.
*/
function closeReply(id) {
// Remove the reply div from the DOM.
$('#rd' + id).slideUp('fast', function() {
$(this).remove();
});
// Swap out the hide link for the reply link
$('#cr' + id).hide();
$('#rl' + id).show();
}
/**
* Recursively sort a tree of comments using the comp comparator.
*/
function sortComments(comments) {
comments.sort(comp);
$.each(comments, function() {
this.children = sortComments(this.children);
});
return comments;
}
/**
* Get the children comments from a ul. If recursive is true,
* recursively include childrens' children.
*/
function getChildren(ul, recursive) {
var children = [];
ul.children().children("[id^='cd']")
.each(function() {
var comment = $(this).data('comment');
if (recursive)
comment.children = getChildren($(this).find('#cl' + comment.id), true);
children.push(comment);
});
return children;
}
/** Create a div to display a comment in. */
function createCommentDiv(comment) {
if (!comment.displayed && !opts.moderator) {
return $('<div class="moderate">Thank you! Your comment will show up '
+ 'once it is has been approved by a moderator.</div>');
}
// Prettify the comment rating.
comment.pretty_rating = comment.rating + ' point' +
(comment.rating == 1 ? '' : 's');
// Make a class (for displaying not yet moderated comments differently)
comment.css_class = comment.displayed ? '' : ' moderate';
// Create a div for this comment.
var context = $.extend({}, opts, comment);
var div = $(renderTemplate(commentTemplate, context));
// If the user has voted on this comment, highlight the correct arrow.
if (comment.vote) {
var direction = (comment.vote == 1) ? 'u' : 'd';
div.find('#' + direction + 'v' + comment.id).hide();
div.find('#' + direction + 'u' + comment.id).show();
}
if (opts.moderator || comment.text != '[deleted]') {
div.find('a.reply').show();
if (comment.proposal_diff)
div.find('#sp' + comment.id).show();
if (opts.moderator && !comment.displayed)
div.find('#cm' + comment.id).show();
if (opts.moderator || (opts.username == comment.username))
div.find('#dc' + comment.id).show();
}
return div;
}
/**
* A simple template renderer. Placeholders such as <%id%> are replaced
* by context['id'] with items being escaped. Placeholders such as <#id#>
* are not escaped.
*/
function renderTemplate(template, context) {
var esc = $(document.createElement('div'));
function handle(ph, escape) {
var cur = context;
$.each(ph.split('.'), function() {
cur = cur[this];
});
return escape ? esc.text(cur || "").html() : cur;
}
return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
return handle(arguments[2], arguments[1] == '%' ? true : false);
});
}
/** Flash an error message briefly. */
function showError(message) {
$(document.createElement('div')).attr({'class': 'popup-error'})
.append($(document.createElement('div'))
.attr({'class': 'error-message'}).text(message))
.appendTo('body')
.fadeIn("slow")
.delay(2000)
.fadeOut("slow");
}
/** Add a link the user uses to open the comments popup. */
$.fn.comment = function() {
return this.each(function() {
var id = $(this).attr('id').substring(1);
var count = COMMENT_METADATA[id];
var title = count + ' comment' + (count == 1 ? '' : 's');
var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
var addcls = count == 0 ? ' nocomment' : '';
$(this)
.append(
$(document.createElement('a')).attr({
href: '#',
'class': 'sphinx-comment-open' + addcls,
id: 'ao' + id
})
.append($(document.createElement('img')).attr({
src: image,
alt: 'comment',
title: title
}))
.click(function(event) {
event.preventDefault();
show($(this).attr('id').substring(2));
})
)
.append(
$(document.createElement('a')).attr({
href: '#',
'class': 'sphinx-comment-close hidden',
id: 'ah' + id
})
.append($(document.createElement('img')).attr({
src: opts.closeCommentImage,
alt: 'close',
title: 'close'
}))
.click(function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
})
);
});
};
var opts = {
processVoteURL: '/_process_vote',
addCommentURL: '/_add_comment',
getCommentsURL: '/_get_comments',
acceptCommentURL: '/_accept_comment',
deleteCommentURL: '/_delete_comment',
commentImage: '/static/_static/comment.png',
closeCommentImage: '/static/_static/comment-close.png',
loadingImage: '/static/_static/ajax-loader.gif',
commentBrightImage: '/static/_static/comment-bright.png',
upArrow: '/static/_static/up.png',
downArrow: '/static/_static/down.png',
upArrowPressed: '/static/_static/up-pressed.png',
downArrowPressed: '/static/_static/down-pressed.png',
voting: false,
moderator: false
};
if (typeof COMMENT_OPTIONS != "undefined") {
opts = jQuery.extend(opts, COMMENT_OPTIONS);
}
var popupTemplate = '\
<div class="sphinx-comments" id="sc<%id%>">\
<p class="sort-options">\
Sort by:\
<a href="#" class="sort-option byrating">best rated</a>\
<a href="#" class="sort-option byascage">newest</a>\
<a href="#" class="sort-option byage">oldest</a>\
</p>\
<div class="comment-header">Comments</div>\
<div class="comment-loading" id="cn<%id%>">\
loading comments... <img src="<%loadingImage%>" alt="" /></div>\
<ul id="cl<%id%>" class="comment-ul"></ul>\
<div id="ca<%id%>">\
<p class="add-a-comment">Add a comment\
(<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
<div class="comment-markup-box" id="mb<%id%>">\
reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
<tt>``code``</tt>, \
code blocks: <tt>::</tt> and an indented block after blank line</div>\
<form method="post" id="cf<%id%>" class="comment-form" action="">\
<textarea name="comment" cols="80"></textarea>\
<p class="propose-button">\
<a href="#" id="pc<%id%>" class="show-propose-change">\
Propose a change &#9657;\
</a>\
<a href="#" id="hc<%id%>" class="hide-propose-change">\
Propose a change &#9663;\
</a>\
</p>\
<textarea name="proposal" id="pt<%id%>" cols="80"\
spellcheck="false"></textarea>\
<input type="submit" value="Add comment" />\
<input type="hidden" name="node" value="<%id%>" />\
<input type="hidden" name="parent" value="" />\
</form>\
</div>\
</div>';
var commentTemplate = '\
<div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
<div class="vote">\
<div class="arrow">\
<a href="#" id="uv<%id%>" class="vote" title="vote up">\
<img src="<%upArrow%>" />\
</a>\
<a href="#" id="uu<%id%>" class="un vote" title="vote up">\
<img src="<%upArrowPressed%>" />\
</a>\
</div>\
<div class="arrow">\
<a href="#" id="dv<%id%>" class="vote" title="vote down">\
<img src="<%downArrow%>" id="da<%id%>" />\
</a>\
<a href="#" id="du<%id%>" class="un vote" title="vote down">\
<img src="<%downArrowPressed%>" />\
</a>\
</div>\
</div>\
<div class="comment-content">\
<p class="tagline comment">\
<span class="user-id"><%username%></span>\
<span class="rating"><%pretty_rating%></span>\
<span class="delta"><%time.delta%></span>\
</p>\
<div class="comment-text comment"><#text#></div>\
<p class="comment-opts comment">\
<a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
<a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
<a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
<a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
<a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
<span id="cm<%id%>" class="moderation hidden">\
<a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
</span>\
</p>\
<pre class="proposal" id="pr<%id%>">\
<#proposal_diff#>\
</pre>\
<ul class="comment-children" id="cl<%id%>"></ul>\
</div>\
<div class="clearleft"></div>\
</div>\
</div>';
var replyTemplate = '\
<li>\
<div class="reply-div" id="rd<%id%>">\
<form id="rf<%id%>">\
<textarea name="comment" cols="80"></textarea>\
<input type="submit" value="Add reply" />\
<input type="button" value="Cancel" />\
<input type="hidden" name="parent" value="<%id%>" />\
<input type="hidden" name="node" value="" />\
</form>\
</div>\
</li>';
$(document).ready(function() {
init();
});
})(jQuery);
$(document).ready(function() {
// add comment anchors for all paragraphs that are commentable
$('.sphinx-has-comment').comment();
// highlight search words in search results
$("div.context").each(function() {
var params = $.getQueryParameters();
var terms = (params.q) ? params.q[0].split(/\s+/) : [];
var result = $(this);
$.each(terms, function() {
result.highlightText(this.toLowerCase(), 'highlighted');
});
});
// directly open comment window if requested
var anchor = document.location.hash;
if (anchor.substring(0, 9) == '#comment-') {
$('#ao' + anchor.substring(9)).click();
document.location.hash = '#s' + anchor.substring(9);
}
});

View File

@ -1,95 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index &mdash; Glances 1.7.3 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '1.7.3',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Glances 1.7.3 documentation" href="index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
accesskey="I">index</a></li>
<li><a href="index.html">Glances 1.7.3 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="#" title="General Index"
>index</a></li>
<li><a href="index.html">Glances 1.7.3 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Nicolas Hennion.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

View File

@ -1,665 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Glances &mdash; Glances 1.7.3 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '1.7.3',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Glances 1.7.3 documentation" href="index.html" />
<link rel="prev" title="Welcome to Glancess documentation!" href="index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="index.html" title="Welcome to Glancess documentation!"
accesskey="P">previous</a> |</li>
<li><a href="index.html">Glances 1.7.3 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="glances">
<h1><a class="toc-backref" href="#id7">Glances</a><a class="headerlink" href="#glances" title="Permalink to this headline"></a></h1>
<p>This manual describes <em>Glances</em> version 1.7.3.</p>
<p>Copyright © 2012-2013 Nicolas Hennion &lt;<a class="reference external" href="mailto:nicolas&#37;&#52;&#48;nicolargo&#46;com">nicolas<span>&#64;</span>nicolargo<span>&#46;</span>com</a>&gt;</p>
<p>November 2013</p>
<div class="contents topic" id="table-of-contents">
<p class="topic-title first">Table of Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#glances" id="id7">Glances</a><ul>
<li><a class="reference internal" href="#introduction" id="id8">Introduction</a></li>
<li><a class="reference internal" href="#usage" id="id9">Usage</a><ul>
<li><a class="reference internal" href="#standalone-mode" id="id10">Standalone mode</a></li>
<li><a class="reference internal" href="#client-server-mode" id="id11">Client/Server mode</a></li>
</ul>
</li>
<li><a class="reference internal" href="#command-reference" id="id12">Command reference</a><ul>
<li><a class="reference internal" href="#command-line-options" id="id13">Command-line options</a></li>
<li><a class="reference internal" href="#interactive-commands" id="id14">Interactive commands</a></li>
</ul>
</li>
<li><a class="reference internal" href="#configuration" id="id15">Configuration</a></li>
<li><a class="reference internal" href="#anatomy-of-the-application" id="id16">Anatomy of the application</a><ul>
<li><a class="reference internal" href="#legend" id="id17">Legend</a></li>
<li><a class="reference internal" href="#header" id="id18">Header</a></li>
<li><a class="reference internal" href="#cpu" id="id19">CPU</a></li>
<li><a class="reference internal" href="#load" id="id20">Load</a></li>
<li><a class="reference internal" href="#memory" id="id21">Memory</a></li>
<li><a class="reference internal" href="#network" id="id22">Network</a></li>
<li><a class="reference internal" href="#sensors" id="id23">Sensors</a></li>
<li><a class="reference internal" href="#disk-i-o" id="id24">Disk I/O</a></li>
<li><a class="reference internal" href="#file-system" id="id25">File system</a></li>
<li><a class="reference internal" href="#processes-list" id="id26">Processes list</a></li>
<li><a class="reference internal" href="#monitored-processes-list" id="id27">Monitored processes list</a></li>
<li><a class="reference internal" href="#logs" id="id28">Logs</a></li>
<li><a class="reference internal" href="#footer" id="id29">Footer</a></li>
</ul>
</li>
<li><a class="reference internal" href="#api-documentation" id="id30">API documentation</a></li>
<li><a class="reference internal" href="#support" id="id31">Support</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="introduction">
<h2><a class="toc-backref" href="#id8">Introduction</a><a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p>Glances is a cross-platform curses-based monitoring tool which aims to
present a maximum of information in a minimum of space, ideally to fit
in a classical 80x24 terminal or higher to have additional information.</p>
<p>Glances can adapt dynamically the displayed information depending on the
terminal size. It can also work in a client/server mode for remote monitoring.</p>
<p>Glances is written in Python and uses the <a class="reference external" href="https://code.google.com/p/psutil/">psutil</a> library to get information from your system.</p>
<p>Console (80x24)</p>
<img alt="_images/screenshot.png" src="_images/screenshot.png" />
<p>Full view (&gt;80x24)</p>
<img alt="_images/screenshot-wide.png" src="_images/screenshot-wide.png" />
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#id9">Usage</a><a class="headerlink" href="#usage" title="Permalink to this headline"></a></h2>
<div class="section" id="standalone-mode">
<h3><a class="toc-backref" href="#id10">Standalone mode</a><a class="headerlink" href="#standalone-mode" title="Permalink to this headline"></a></h3>
<p>Simply run:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="gp">$</span> glances
</pre></div>
</div>
</div>
<div class="section" id="client-server-mode">
<h3><a class="toc-backref" href="#id11">Client/Server mode</a><a class="headerlink" href="#client-server-mode" title="Permalink to this headline"></a></h3>
<p>If you want to remotely monitor a machine, called <tt class="docutils literal"><span class="pre">server</span></tt>, from another one, called <tt class="docutils literal"><span class="pre">client</span></tt>,
just run on the server:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="go">server$ glances -s</span>
</pre></div>
</div>
<p>and on the client:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="go">client$ glances -c @server</span>
</pre></div>
</div>
<p>where <tt class="docutils literal"><span class="pre">&#64;server</span></tt> is the IP address or hostname of the server.</p>
<p>In server mode, you can set the bind address <tt class="docutils literal"><span class="pre">-B</span> <span class="pre">ADDRESS</span></tt> and listening TCP port <tt class="docutils literal"><span class="pre">-p</span> <span class="pre">PORT</span></tt>.</p>
<p>In client mode, you can set the TCP port of the server <tt class="docutils literal"><span class="pre">-p</span> <span class="pre">PORT</span></tt>.</p>
<p>Default binding address is <tt class="docutils literal"><span class="pre">0.0.0.0</span></tt> (Glances will listen on all the network interfaces) and TCP port is <tt class="docutils literal"><span class="pre">61209</span></tt>.</p>
<p>In client/server mode, limits are set by the server side.</p>
<p>You can also set a password to access to the server <tt class="docutils literal"><span class="pre">-P</span> <span class="pre">password</span></tt>.</p>
<p>Glances is <tt class="docutils literal"><span class="pre">IPv6</span></tt> compatible. Just use the <tt class="docutils literal"><span class="pre">-B</span> <span class="pre">::</span></tt> option to bind to all IPv6 addresses.</p>
</div>
</div>
<div class="section" id="command-reference">
<h2><a class="toc-backref" href="#id12">Command reference</a><a class="headerlink" href="#command-reference" title="Permalink to this headline"></a></h2>
<div class="section" id="command-line-options">
<h3><a class="toc-backref" href="#id13">Command-line options</a><a class="headerlink" href="#command-line-options" title="Permalink to this headline"></a></h3>
<table class="docutils option-list" frame="void" rules="none">
<col class="option" />
<col class="description" />
<tbody valign="top">
<tr><td class="option-group">
<kbd><span class="option">-b</span></kbd></td>
<td>Display network rate in Byte per second (default: bit per second)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-B <var>IP</var></span></kbd></td>
<td>Bind server to the given IPv4/IPv6 address or hostname</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-c <var>IP</var></span></kbd></td>
<td>Connect to a Glances server by IPv4/IPv6 address or hostname</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-C <var>FILE</var></span></kbd></td>
<td>Path to the configuration file</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-d</span></kbd></td>
<td>Disable disk I/O module</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-e</span></kbd></td>
<td>Enable sensors module (requires pysensors, Linux-only)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-f <var>FILE</var></span></kbd></td>
<td>Set the HTML output folder or CSV file</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-h</span></kbd></td>
<td>Display the help and exit</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-m</span></kbd></td>
<td>Disable mount module</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-n</span></kbd></td>
<td>Disable network module</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-o <var>OUTPUT</var></span></kbd></td>
<td>Define additional output (available: HTML or CSV)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-p <var>PORT</var></span></kbd></td>
<td>Define the client/server TCP port (default: 61209)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-P <var>PASSWORD</var></span></kbd></td>
<td>Define a client/server password</td></tr>
<tr><td class="option-group">
<kbd><span class="option">--password</span></kbd></td>
<td>Define a client/server password from the prompt</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-r</span></kbd></td>
<td>Disable process list (for low CPU consumption)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-s</span></kbd></td>
<td>Run Glances in server mode</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-t <var>SECONDS</var></span></kbd></td>
<td>Set refresh time in seconds (default: 3 sec)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-v</span></kbd></td>
<td>Display the version and exit</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-y</span></kbd></td>
<td>Enable hddtemp module (requires hddtemp)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-z</span></kbd></td>
<td>Do not use the bold color attribute</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-1</span></kbd></td>
<td>Start Glances in per-CPU mode</td></tr>
</tbody>
</table>
</div>
<div class="section" id="interactive-commands">
<h3><a class="toc-backref" href="#id14">Interactive commands</a><a class="headerlink" href="#interactive-commands" title="Permalink to this headline"></a></h3>
<p>The following commands (key pressed) are supported while in Glances:</p>
<dl class="docutils">
<dt><tt class="docutils literal"><span class="pre">a</span></tt></dt>
<dd><p class="first">Sort process list automatically</p>
<ul class="last simple">
<li>If CPU iowait <tt class="docutils literal"><span class="pre">&gt;60%</span></tt>, sort processes by I/O read and write</li>
<li>If CPU <tt class="docutils literal"><span class="pre">&gt;70%</span></tt>, sort processes by CPU usage</li>
<li>If MEM <tt class="docutils literal"><span class="pre">&gt;70%</span></tt>, sort processes by memory usage</li>
</ul>
</dd>
<dt><tt class="docutils literal"><span class="pre">b</span></tt></dt>
<dd>Switch between bit/s or Byte/s for network I/O</dd>
<dt><tt class="docutils literal"><span class="pre">c</span></tt></dt>
<dd>Sort processes by CPU usage</dd>
<dt><tt class="docutils literal"><span class="pre">d</span></tt></dt>
<dd>Show/hide disk I/O stats</dd>
<dt><tt class="docutils literal"><span class="pre">f</span></tt></dt>
<dd>Show/hide file system stats</dd>
<dt><tt class="docutils literal"><span class="pre">h</span></tt></dt>
<dd>Show/hide the help screen</dd>
<dt><tt class="docutils literal"><span class="pre">i</span></tt></dt>
<dd>Sort processes by I/O rate (may need root privileges on some OSes)</dd>
<dt><tt class="docutils literal"><span class="pre">l</span></tt></dt>
<dd>Show/hide log messages</dd>
<dt><tt class="docutils literal"><span class="pre">m</span></tt></dt>
<dd>Sort processes by MEM usage</dd>
<dt><tt class="docutils literal"><span class="pre">n</span></tt></dt>
<dd>Show/hide network stats</dd>
<dt><tt class="docutils literal"><span class="pre">p</span></tt></dt>
<dd>Sort processes by name</dd>
<dt><tt class="docutils literal"><span class="pre">q</span></tt></dt>
<dd>Quit</dd>
<dt><tt class="docutils literal"><span class="pre">s</span></tt></dt>
<dd>Show/hide sensors stats (only available with -e flag)</dd>
<dt><tt class="docutils literal"><span class="pre">t</span></tt></dt>
<dd>View network I/O as combination</dd>
<dt><tt class="docutils literal"><span class="pre">u</span></tt></dt>
<dd>View cumulative network I/O</dd>
<dt><tt class="docutils literal"><span class="pre">w</span></tt></dt>
<dd>Delete finished warning log messages</dd>
<dt><tt class="docutils literal"><span class="pre">x</span></tt></dt>
<dd>Delete finished warning and critical log messages</dd>
<dt><tt class="docutils literal"><span class="pre">y</span></tt></dt>
<dd>Show/hide hddtemp stats (only available with -y flag)</dd>
<dt><tt class="docutils literal"><span class="pre">1</span></tt></dt>
<dd>Switch between global CPU and per-CPU stats</dd>
</dl>
</div>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#id15">Configuration</a><a class="headerlink" href="#configuration" title="Permalink to this headline"></a></h2>
<p>No configuration file is mandatory to use Glances.</p>
<p>Furthermore a configuration file is needed for setup limits and/or monitored processes list.</p>
<p>By default, the configuration file is under:</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Linux:</th><td class="field-body"><tt class="docutils literal"><span class="pre">/etc/glances/glances.conf</span></tt></td>
</tr>
<tr class="field-even field"><th class="field-name">*BSD and OS X:</th><td class="field-body"><tt class="docutils literal"><span class="pre">/usr/local/etc/glances/glances.conf</span></tt></td>
</tr>
<tr class="field-odd field"><th class="field-name">Windows:</th><td class="field-body"><tt class="docutils literal"><span class="pre">%APPDATA%\glances\glances.conf</span></tt></td>
</tr>
</tbody>
</table>
<p>On Windows XP, the <tt class="docutils literal"><span class="pre">%APPDATA%</span></tt> path is:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="go">C:\Documents and Settings\&lt;User&gt;\Application Data</span>
</pre></div>
</div>
<p>Since Windows Vista and newer versions:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="go">C:\Users\&lt;User&gt;\AppData\Roaming</span>
</pre></div>
</div>
<p>You can override the default configuration, located in one of the above
directories on your system, except for Windows.</p>
<p>Just copy the <tt class="docutils literal"><span class="pre">glances.conf</span></tt> file to your <tt class="docutils literal"><span class="pre">$XDG_CONFIG_HOME</span></tt> directory, e.g. Linux:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="go">mkdir -p $XDG_CONFIG_HOME/glances</span>
<span class="go">cp /etc/glances/glances.conf $XDG_CONFIG_HOME/glances/</span>
</pre></div>
</div>
<p>On OS X, you should copy the configuration file to <tt class="docutils literal"><span class="pre">~/Library/Application</span> <span class="pre">Support/glances/</span></tt>.</p>
</div>
<div class="section" id="anatomy-of-the-application">
<h2><a class="toc-backref" href="#id16">Anatomy of the application</a><a class="headerlink" href="#anatomy-of-the-application" title="Permalink to this headline"></a></h2>
<div class="section" id="legend">
<h3><a class="toc-backref" href="#id17">Legend</a><a class="headerlink" href="#legend" title="Permalink to this headline"></a></h3>
<div class="line-block">
<div class="line"><tt class="docutils literal"><span class="pre">GREEN</span></tt> stat counter is <tt class="docutils literal"><span class="pre">&quot;OK&quot;</span></tt></div>
<div class="line"><tt class="docutils literal"><span class="pre">BLUE</span></tt> stat counter is <tt class="docutils literal"><span class="pre">&quot;CAREFUL&quot;</span></tt></div>
<div class="line"><tt class="docutils literal"><span class="pre">MAGENTA</span></tt> stat counter is <tt class="docutils literal"><span class="pre">&quot;WARNING&quot;</span></tt></div>
<div class="line"><tt class="docutils literal"><span class="pre">RED</span></tt> stat counter is <tt class="docutils literal"><span class="pre">&quot;CRITICAL&quot;</span></tt></div>
</div>
</div>
<div class="section" id="header">
<h3><a class="toc-backref" href="#id18">Header</a><a class="headerlink" href="#header" title="Permalink to this headline"></a></h3>
<img alt="_images/header.png" src="_images/header.png" />
<p>The header shows the OS name, release version, platform architecture and the hostname.
On Linux, it shows also the kernel version.</p>
</div>
<div class="section" id="cpu">
<h3><a class="toc-backref" href="#id19">CPU</a><a class="headerlink" href="#cpu" title="Permalink to this headline"></a></h3>
<p>Short view:</p>
<img alt="_images/cpu.png" src="_images/cpu.png" />
<p>If enough horizontal space is available, extended CPU informations are displayed.</p>
<p>Extended view:</p>
<img alt="_images/cpu-wide.png" src="_images/cpu-wide.png" />
<p>To switch to per-CPU stats, just hit the <tt class="docutils literal"><span class="pre">1</span></tt> key:</p>
<img alt="_images/per-cpu.png" src="_images/per-cpu.png" />
<p>The CPU stats are shown as a percentage and for the configured refresh time.
The total CPU usage is displayed on the first line.</p>
<div class="line-block">
<div class="line">If user|system|nice CPU is <tt class="docutils literal"><span class="pre">&lt;50%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;OK&quot;</span></tt></div>
<div class="line">If user|system|nice CPU is <tt class="docutils literal"><span class="pre">&gt;50%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CAREFUL&quot;</span></tt></div>
<div class="line">If user|system|nice CPU is <tt class="docutils literal"><span class="pre">&gt;70%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;WARNING&quot;</span></tt></div>
<div class="line">If user|system|nice CPU is <tt class="docutils literal"><span class="pre">&gt;90%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CRITICAL&quot;</span></tt></div>
</div>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal"><span class="pre">[cpu]</span></tt> section.</p>
</div>
<div class="section" id="load">
<h3><a class="toc-backref" href="#id20">Load</a><a class="headerlink" href="#load" title="Permalink to this headline"></a></h3>
<img alt="_images/load.png" src="_images/load.png" />
<p>On the <em>No Sheep</em> blog, <em>Zachary Tirrell</em> defines the average load <a class="footnote-reference" href="#id4" id="id1">[1]</a>:</p>
<blockquote>
<div>&#8220;In short it is the average sum of the number of processes
waiting in the run-queue plus the number currently executing
over 1, 5, and 15 minute time periods.&#8221;</div></blockquote>
<p>Glances gets the number of CPU core to adapt the alerts.
Alerts on average load are only set on 5 and 15 min.
The first line also display the number of CPU core.</p>
<div class="line-block">
<div class="line">If average load is <tt class="docutils literal"><span class="pre">&lt;0.7*core</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;OK&quot;</span></tt></div>
<div class="line">If average load is <tt class="docutils literal"><span class="pre">&gt;0.7*core</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CAREFUL&quot;</span></tt></div>
<div class="line">If average load is <tt class="docutils literal"><span class="pre">&gt;1*core</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;WARNING&quot;</span></tt></div>
<div class="line">If average load is <tt class="docutils literal"><span class="pre">&gt;5*core</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CRITICAL&quot;</span></tt></div>
</div>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal"><span class="pre">[load]</span></tt> section.</p>
</div>
<div class="section" id="memory">
<h3><a class="toc-backref" href="#id21">Memory</a><a class="headerlink" href="#memory" title="Permalink to this headline"></a></h3>
<p>Glances uses two columns: one for the <tt class="docutils literal"><span class="pre">RAM</span></tt> and another one for the <tt class="docutils literal"><span class="pre">Swap</span></tt>.</p>
<img alt="_images/mem.png" src="_images/mem.png" />
<p>If enough space is available, Glances displays extended informations:</p>
<img alt="_images/mem-wide.png" src="_images/mem-wide.png" />
<p>With Glances, alerts are only set for on used memory and used swap.</p>
<div class="line-block">
<div class="line">If memory is <tt class="docutils literal"><span class="pre">&lt;50%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;OK&quot;</span></tt></div>
<div class="line">If memory is <tt class="docutils literal"><span class="pre">&gt;50%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CAREFUL&quot;</span></tt></div>
<div class="line">If memory is <tt class="docutils literal"><span class="pre">&gt;70%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;WARNING&quot;</span></tt></div>
<div class="line">If memory is <tt class="docutils literal"><span class="pre">&gt;90%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CRITICAL&quot;</span></tt></div>
</div>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal"><span class="pre">[memory]</span></tt> and <tt class="docutils literal"><span class="pre">[swap]</span></tt> sections.</p>
</div>
<div class="section" id="network">
<h3><a class="toc-backref" href="#id22">Network</a><a class="headerlink" href="#network" title="Permalink to this headline"></a></h3>
<img alt="_images/network.png" src="_images/network.png" />
<p>Glances displays the network interface bit rate. The unit is adapted
dynamically (bits per second, kbits per second, Mbits per second, etc).</p>
<p>Alerts are only set if the network interface maximum speed is available.</p>
<p>For example, on a 100 Mbps ethernet interface, the warning status is set
if the bit rate is higher than 70 Mbps.</p>
<div class="line-block">
<div class="line">If bit rate is <tt class="docutils literal"><span class="pre">&lt;50%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;OK&quot;</span></tt></div>
<div class="line">If bit rate is <tt class="docutils literal"><span class="pre">&gt;50%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CAREFUL&quot;</span></tt></div>
<div class="line">If bit rate is <tt class="docutils literal"><span class="pre">&gt;70%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;WARNING&quot;</span></tt></div>
<div class="line">If bit rate is <tt class="docutils literal"><span class="pre">&gt;90%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CRITICAL&quot;</span></tt></div>
</div>
</div>
<div class="section" id="sensors">
<h3><a class="toc-backref" href="#id23">Sensors</a><a class="headerlink" href="#sensors" title="Permalink to this headline"></a></h3>
<p>Glances can displays the sensors informations trough <cite>lm-sensors</cite> (only available on Linux).</p>
<p>As of lm-sensors, a filter is processed in order to display temperature only:</p>
<img alt="_images/sensors.png" src="_images/sensors.png" />
<p>Glances can also grab hard disk temperature through the <cite>hddtemp</cite> daemon (see here <a class="footnote-reference" href="#id5" id="id2">[2]</a> to install hddtemp on your system):</p>
<img alt="_images/hddtemp.png" src="_images/hddtemp.png" />
<p>To enable the lm-sensors module:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="gp">$</span> glances -e
</pre></div>
</div>
<p>To enable the hddtemp module:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="gp">$</span> glances -y
</pre></div>
</div>
<p>There is no alert on this information.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal"><span class="pre">[temperature]</span></tt> and <tt class="docutils literal"><span class="pre">[hddtemperature]</span></tt> sections.</p>
</div>
<div class="section" id="disk-i-o">
<h3><a class="toc-backref" href="#id24">Disk I/O</a><a class="headerlink" href="#disk-i-o" title="Permalink to this headline"></a></h3>
<img alt="_images/diskio.png" src="_images/diskio.png" />
<p>Glances displays the disk I/O throughput. The unit is adapted dynamically.</p>
<p><em>Note</em>: There is no alert on this information.</p>
</div>
<div class="section" id="file-system">
<h3><a class="toc-backref" href="#id25">File system</a><a class="headerlink" href="#file-system" title="Permalink to this headline"></a></h3>
<img alt="_images/fs.png" src="_images/fs.png" />
<p>Glances displays the used and total file system disk space. The unit is
adapted dynamically.</p>
<p>Alerts are set for used disk space:</p>
<div class="line-block">
<div class="line">If disk used is <tt class="docutils literal"><span class="pre">&lt;50%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;OK&quot;</span></tt></div>
<div class="line">If disk used is <tt class="docutils literal"><span class="pre">&gt;50%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CAREFUL&quot;</span></tt></div>
<div class="line">If disk used is <tt class="docutils literal"><span class="pre">&gt;70%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;WARNING&quot;</span></tt></div>
<div class="line">If disk used is <tt class="docutils literal"><span class="pre">&gt;90%</span></tt>, then status is set to <tt class="docutils literal"><span class="pre">&quot;CRITICAL&quot;</span></tt></div>
</div>
<p><em>Note</em>: limit values can be overwritten in the configuration file under <tt class="docutils literal"><span class="pre">[filesystem]</span></tt> section.</p>
</div>
<div class="section" id="processes-list">
<h3><a class="toc-backref" href="#id26">Processes list</a><a class="headerlink" href="#processes-list" title="Permalink to this headline"></a></h3>
<p>Compact view:</p>
<img alt="_images/processlist.png" src="_images/processlist.png" />
<p>Full view:</p>
<img alt="_images/processlist-wide.png" src="_images/processlist-wide.png" />
<p>Three views are available for processes:</p>
<ul class="simple">
<li>Processes summary</li>
<li>Optional monitored processes list (new in 1.7)</li>
<li>Processes list</li>
</ul>
<p>By default, or if you hit the <tt class="docutils literal"><span class="pre">a</span></tt> key, the processes list is automatically
sorted by CPU of memory usage.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal"><span class="pre">[process]</span></tt> section.</p>
<p>The number of processes in the list is adapted to the screen size.</p>
<dl class="docutils">
<dt><tt class="docutils literal"><span class="pre">VIRT</span></tt></dt>
<dd>Total program size (VMS)</dd>
<dt><tt class="docutils literal"><span class="pre">RES</span></tt></dt>
<dd>Resident set size (RSS)</dd>
<dt><tt class="docutils literal"><span class="pre">CPU%</span></tt></dt>
<dd>% of CPU used by the process</dd>
<dt><tt class="docutils literal"><span class="pre">MEM%</span></tt></dt>
<dd>% of MEM used by the process</dd>
<dt><tt class="docutils literal"><span class="pre">PID</span></tt></dt>
<dd>Process ID</dd>
<dt><tt class="docutils literal"><span class="pre">USER</span></tt></dt>
<dd>User ID per process</dd>
<dt><tt class="docutils literal"><span class="pre">NI</span></tt></dt>
<dd>Nice level of the process</dd>
<dt><tt class="docutils literal"><span class="pre">S</span></tt></dt>
<dd>Process status</dd>
<dt><tt class="docutils literal"><span class="pre">TIME+</span></tt></dt>
<dd>Cumulative CPU time used</dd>
<dt><tt class="docutils literal"><span class="pre">IOR/s</span></tt></dt>
<dd>Per process IO read rate (in Byte/s)</dd>
<dt><tt class="docutils literal"><span class="pre">IOW/s</span></tt></dt>
<dd>Per process IO write rate (in Byte/s)</dd>
<dt><tt class="docutils literal"><span class="pre">NAME</span></tt></dt>
<dd>Process name or command line</dd>
</dl>
<p>Process status legend:</p>
<dl class="docutils">
<dt><tt class="docutils literal"><span class="pre">R</span></tt></dt>
<dd>running</dd>
<dt><tt class="docutils literal"><span class="pre">S</span></tt></dt>
<dd>sleeping (may be interrupted)</dd>
<dt><tt class="docutils literal"><span class="pre">D</span></tt></dt>
<dd>disk sleep (may not be interrupted)</dd>
<dt><tt class="docutils literal"><span class="pre">T</span></tt></dt>
<dd>traced/stopped</dd>
<dt><tt class="docutils literal"><span class="pre">Z</span></tt></dt>
<dd>zombie</dd>
</dl>
</div>
<div class="section" id="monitored-processes-list">
<h3><a class="toc-backref" href="#id27">Monitored processes list</a><a class="headerlink" href="#monitored-processes-list" title="Permalink to this headline"></a></h3>
<p>New in version 1.7. Optional.</p>
<p>The monitored processes list allows user, through the configuration file,
to group processes and quickly show if the number of running process is not good.</p>
<img alt="_images/monitored.png" src="_images/monitored.png" />
<p>Each item is defined by:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">description</span></tt>: description of the processes (max 16 chars).</li>
<li><tt class="docutils literal"><span class="pre">regex</span></tt>: regular expression of the processes to monitor.</li>
<li><tt class="docutils literal"><span class="pre">command</span></tt> (optional): full path to shell command/script for extended stat. Should return a single line string. Use with caution.</li>
<li><tt class="docutils literal"><span class="pre">countmin</span></tt> (optional): minimal number of processes. A warning will be displayed if number of processes &lt; count.</li>
<li><tt class="docutils literal"><span class="pre">countmax</span></tt> (optional): maximum number of processes. A warning will be displayed if number of processes &gt; count.</li>
</ul>
<p>Up to 10 items can be defined.</p>
<p>For example, if you want to monitor the Nginx processes on a Web server, the following definition should do the job:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="go">[monitor]</span>
<span class="go">list_1_description=Nginx server</span>
<span class="go">list_1_regex=.*nginx.*</span>
<span class="go">list_1_command=nginx -v</span>
<span class="go">list_1_countmin=1</span>
<span class="go">list_1_countmax=4</span>
</pre></div>
</div>
<p>If you also want to monitor the PHP-FPM daemon processes, you should add another item:</p>
<div class="highlight-console"><div class="highlight"><pre><span class="go">[monitor]</span>
<span class="go">list_1_description=Nginx server</span>
<span class="go">list_1_regex=.*nginx.*</span>
<span class="go">list_1_command=nginx -v</span>
<span class="go">list_1_countmin=1</span>
<span class="go">list_1_countmax=4</span>
<span class="go">list_1_description=PHP-FPM</span>
<span class="go">list_1_regex=.*php-fpm.*</span>
<span class="go">list_1_countmin=1</span>
<span class="go">list_1_countmax=20</span>
</pre></div>
</div>
<p>In client/server mode, the list is defined on the server side.
A new method, called getAllMonitored, is available in the APIs and get the JSON representation of the monitored processes list.</p>
<p>Alerts are set as following:</p>
<div class="line-block">
<div class="line">If number of processes is 0, then status is set to <tt class="docutils literal"><span class="pre">&quot;CRITICAL&quot;</span></tt></div>
<div class="line">If number of processes is min &lt; current &lt; max, then status is set to <tt class="docutils literal"><span class="pre">&quot;OK&quot;</span></tt></div>
<div class="line">Else status is set to <tt class="docutils literal"><span class="pre">&quot;WARNING&quot;</span></tt></div>
</div>
</div>
<div class="section" id="logs">
<h3><a class="toc-backref" href="#id28">Logs</a><a class="headerlink" href="#logs" title="Permalink to this headline"></a></h3>
<img alt="_images/logs.png" src="_images/logs.png" />
<p>A log messages list is displayed in the bottom of the screen if (and only if):</p>
<ul class="simple">
<li>at least one <tt class="docutils literal"><span class="pre">WARNING</span></tt> or <tt class="docutils literal"><span class="pre">CRITICAL</span></tt> alert was occurred</li>
<li>space is available in the bottom of the console/terminal</li>
</ul>
<p>Each alert message displays the following information:</p>
<ol class="arabic simple">
<li>start date</li>
<li>end date</li>
<li>alert name</li>
<li>{min/avg/max} values or number of running processes for monitored processes list alerts</li>
</ol>
</div>
<div class="section" id="footer">
<h3><a class="toc-backref" href="#id29">Footer</a><a class="headerlink" href="#footer" title="Permalink to this headline"></a></h3>
<img alt="_images/footer.png" src="_images/footer.png" />
<p>Glances displays the current date &amp; time and access to the embedded help screen.</p>
<p>If one or mode batteries were found on your machine and if the batinfo Python library <a class="footnote-reference" href="#id6" id="id3">[3]</a>
is installed on your system then Glances displays the available percent capacity in the middle on the footer.</p>
<img alt="_images/battery.png" src="_images/battery.png" />
<p>If you have ran Glances in client mode <tt class="docutils literal"><span class="pre">-c</span></tt>, you can also see if the client is connected to the server.</p>
<p>If client is connected:</p>
<img alt="_images/client-connected.png" src="_images/client-connected.png" />
<p>else:</p>
<img alt="_images/client-disconnected.png" src="_images/client-disconnected.png" />
<p>On the left, you can easily see if you are connected to a Glances server.</p>
</div>
</div>
<div class="section" id="api-documentation">
<h2><a class="toc-backref" href="#id30">API documentation</a><a class="headerlink" href="#api-documentation" title="Permalink to this headline"></a></h2>
<p>Glances uses a <a class="reference external" href="http://docs.python.org/2/library/simplexmlrpcserver.html">XML-RPC server</a> and can be used by another client software.</p>
<p>API documentation is available at <a class="reference external" href="https://github.com/nicolargo/glances/wiki/The-Glances-API-How-To">https://github.com/nicolargo/glances/wiki/The-Glances-API-How-To</a></p>
</div>
<div class="section" id="support">
<h2><a class="toc-backref" href="#id31">Support</a><a class="headerlink" href="#support" title="Permalink to this headline"></a></h2>
<p>To report a bug or a feature request use the bug tracking system at <a class="reference external" href="https://github.com/nicolargo/glances/issues">https://github.com/nicolargo/glances/issues</a></p>
<p>Feel free to contribute!</p>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><a class="reference external" href="http://nosheep.net/story/defining-unix-load-average/">http://nosheep.net/story/defining-unix-load-average/</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><a class="reference external" href="http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html">http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id6" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td><a class="reference external" href="https://github.com/nicolargo/batinfo">https://github.com/nicolargo/batinfo</a></td></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Glances</a><ul>
<li><a class="reference internal" href="#introduction">Introduction</a></li>
<li><a class="reference internal" href="#usage">Usage</a><ul>
<li><a class="reference internal" href="#standalone-mode">Standalone mode</a></li>
<li><a class="reference internal" href="#client-server-mode">Client/Server mode</a></li>
</ul>
</li>
<li><a class="reference internal" href="#command-reference">Command reference</a><ul>
<li><a class="reference internal" href="#command-line-options">Command-line options</a></li>
<li><a class="reference internal" href="#interactive-commands">Interactive commands</a></li>
</ul>
</li>
<li><a class="reference internal" href="#configuration">Configuration</a></li>
<li><a class="reference internal" href="#anatomy-of-the-application">Anatomy of the application</a><ul>
<li><a class="reference internal" href="#legend">Legend</a></li>
<li><a class="reference internal" href="#header">Header</a></li>
<li><a class="reference internal" href="#cpu">CPU</a></li>
<li><a class="reference internal" href="#load">Load</a></li>
<li><a class="reference internal" href="#memory">Memory</a></li>
<li><a class="reference internal" href="#network">Network</a></li>
<li><a class="reference internal" href="#sensors">Sensors</a></li>
<li><a class="reference internal" href="#disk-i-o">Disk I/O</a></li>
<li><a class="reference internal" href="#file-system">File system</a></li>
<li><a class="reference internal" href="#processes-list">Processes list</a></li>
<li><a class="reference internal" href="#monitored-processes-list">Monitored processes list</a></li>
<li><a class="reference internal" href="#logs">Logs</a></li>
<li><a class="reference internal" href="#footer">Footer</a></li>
</ul>
</li>
<li><a class="reference internal" href="#api-documentation">API documentation</a></li>
<li><a class="reference internal" href="#support">Support</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="index.html"
title="previous chapter">Welcome to Glances&#8217;s documentation!</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/glances-doc.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="index.html" title="Welcome to Glancess documentation!"
>previous</a> |</li>
<li><a href="index.html">Glances 1.7.3 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Nicolas Hennion.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

View File

@ -1,146 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome to Glancess documentation! &mdash; Glances 1.7.3 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '1.7.3',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Glances 1.7.3 documentation" href="#" />
<link rel="next" title="Glances" href="glances-doc.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="glances-doc.html" title="Glances"
accesskey="N">next</a> |</li>
<li><a href="#">Glances 1.7.3 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="welcome-to-glances-s-documentation">
<h1>Welcome to Glances&#8217;s documentation!<a class="headerlink" href="#welcome-to-glances-s-documentation" title="Permalink to this headline"></a></h1>
<p><strong>Glances</strong> is a cross-platform curses-based monitoring tool written in Python.</p>
<p>It uses the psutil library and some internal code to get information from your system.</p>
<img alt="https://raw.github.com/nicolargo/glances/master/docs/images/screenshot-wide.png" src="https://raw.github.com/nicolargo/glances/master/docs/images/screenshot-wide.png" />
<div class="section" id="get-the-code">
<h2>Get the code<a class="headerlink" href="#get-the-code" title="Permalink to this headline"></a></h2>
<p>The <a class="reference external" href="http://github.com/nicolargo/glances">source</a> is available on GitHub.</p>
</div>
<div class="section" id="contents">
<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="glances-doc.html">Glances</a><ul>
<li class="toctree-l2"><a class="reference internal" href="glances-doc.html#introduction">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="glances-doc.html#usage">Usage</a></li>
<li class="toctree-l2"><a class="reference internal" href="glances-doc.html#command-reference">Command reference</a></li>
<li class="toctree-l2"><a class="reference internal" href="glances-doc.html#configuration">Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="glances-doc.html#anatomy-of-the-application">Anatomy of the application</a></li>
<li class="toctree-l2"><a class="reference internal" href="glances-doc.html#api-documentation">API documentation</a></li>
<li class="toctree-l2"><a class="reference internal" href="glances-doc.html#support">Support</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="section" id="indices-and-tables">
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
<li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="#">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Welcome to Glances&#8217;s documentation!</a><ul>
<li><a class="reference internal" href="#get-the-code">Get the code</a></li>
<li><a class="reference internal" href="#contents">Contents</a><ul>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
</ul>
<h4>Next topic</h4>
<p class="topless"><a href="glances-doc.html"
title="next chapter">Glances</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/index.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="glances-doc.html" title="Glances"
>next</a> |</li>
<li><a href="#">Glances 1.7.3 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Nicolas Hennion.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

Binary file not shown.

View File

@ -1,101 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search &mdash; Glances 1.7.3 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '1.7.3',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="top" title="Glances 1.7.3 documentation" href="index.html" />
<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script type="text/javascript" id="searchindexloader"></script>
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li><a href="index.html">Glances 1.7.3 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1 id="search-documentation">Search</h1>
<div id="fallback" class="admonition warning">
<script type="text/javascript">$('#fallback').hide();</script>
<p>
Please activate JavaScript to enable the search
functionality.
</p>
</div>
<p>
From here you can search these documents. Enter your search
words into the box below and click "search". Note that the search
function will automatically search for all of the words. Pages
containing fewer words won't appear in the result list.
</p>
<form action="" method="get">
<input type="text" name="q" value="" />
<input type="submit" value="search" />
<span id="search-progress" style="padding-left: 10px"></span>
</form>
<div id="search-results">
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li><a href="index.html">Glances 1.7.3 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Nicolas Hennion.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

View File

@ -1 +0,0 @@
Search.setIndex({objects:{},terms:{represent:0,all:0,code:1,appdata:0,global:0,sleep:0,follow:0,disk:0,compact:0,middl:0,depend:0,program:0,swap:0,under:0,list_1_command:0,sourc:1,string:0,iowait:0,trough:0,pocess:[],level:0,list:0,item:0,rate:0,port:0,compat:0,index:1,hide:0,sum:0,access:0,delet:0,version:0,"new":0,net:0,method:0,full:0,mem:0,batinfo:0,here:0,address:0,path:0,legend:0,valu:0,wait:0,search:1,queue:0,throughput:0,list_1_countmax:0,modul:[0,1],unix:0,api:[0,1],xdg_config_hom:0,instal:0,total:0,unit:0,regex:0,from:[0,1],describ:0,memori:0,two:0,call:0,usr:0,sort:0,warn:0,flag:0,setup:0,work:0,can:0,root:0,overrid:0,prompt:0,process:0,indic:1,critic:0,minimum:0,caution:0,want:0,magenta:0,occur:0,end:0,fpm:0,anoth:0,write:0,how:0,low:0,csv:0,max:0,mai:0,data:0,averag:0,"short":0,footer:0,bind:0,counter:0,issu:0,inform:[0,1],"switch":0,curent:[],combin:0,allow:0,ethernet:0,order:0,hennion:0,cyberc:0,help:0,over:0,privileg:0,dynam:0,group:0,monitor:[0,1],fit:0,platform:[0,1],window:0,good:0,"return":0,python:[0,1],interrupt:0,introduct:[0,1],name:0,refresh:0,psutil:[0,1],mode:0,each:0,found:0,side:0,hard:0,connect:0,tirrel:0,shown:0,network:0,space:0,content:[0,1],adapt:0,sensor:0,red:0,free:0,standalon:0,base:[0,1],zombi:0,releas:0,"byte":0,care:0,mbit:0,filter:0,view:0,first:0,softwar:0,feel:0,number:0,system:[0,1],date:0,messag:0,size:0,sheep:0,given:0,script:0,interact:0,mkdir:0,capac:0,least:0,stori:0,cumul:0,termin:0,listen:0,shell:0,consol:0,option:0,tool:[0,1],copi:0,github:[0,1],hddtemp:0,list_1_regex:0,than:0,rss:0,remot:0,second:0,horizont:0,were:0,consumpt:0,minut:0,zachari:0,countmin:0,ran:0,ram:0,have:0,tabl:[0,1],need:0,min:0,note:0,also:0,ideal:0,client:0,which:0,green:0,singl:0,anatomi:[0,1],blue:0,trace:0,track:0,regular:0,"80x24":0,bsd:0,request:0,drive:0,section:0,show:0,xml:0,current:0,onli:0,locat:0,execut:0,copyright:0,configur:[0,1],written:[0,1],should:0,folder:0,local:0,overwritten:0,hit:0,contribut:0,get:[0,1],express:0,stop:0,report:0,requir:0,enabl:0,through:0,grab:0,septemb:[],where:0,summari:0,wiki:0,kernel:0,set:0,maximum:0,see:0,sec:0,statu:0,kei:0,list_1_descript:0,enough:0,between:0,attribut:0,hddtemperatur:0,august:[],extend:0,screen:0,job:0,addit:0,etc:0,com:0,load:0,simpli:0,color:0,period:0,header:0,rpc:0,linux:0,batteri:0,nicola:0,quit:0,three:0,sinc:0,json:0,quickli:0,present:0,mount:0,aim:0,defin:0,"while":0,abov:0,mandatori:0,glanc:[0,1],list_1_countmin:0,virt:0,conf:0,nicolargo:0,avg:0,welcom:1,minim:0,cross:[0,1],html:0,nosheep:0,document:[0,1],higher:0,finish:0,http:0,hostnam:0,iow:0,ior:0,alert:0,user:0,php:0,exampl:0,command:[0,1],thi:0,filesystem:0,left:0,just:0,percent:0,tcp:0,speed:0,web:0,except:0,blog:0,add:0,els:0,applic:[0,1],read:0,howto:0,nginx:0,temperatur:0,biz:0,press:0,bit:0,password:0,daemon:0,resid:0,manual:0,server:0,kbit:0,output:0,nice:0,page:1,www:0,some:[0,1],percentag:0,intern:1,librari:[0,1],bottom:0,definit:0,per:0,pysensor:0,exit:0,refer:[0,1],machin:0,core:0,plu:0,run:0,bold:0,usag:[0,1],column:0,roam:0,disabl:0,countmax:0,automat:0,mbp:0,your:[0,1],log:0,support:[0,1],avail:[0,1],start:0,interfac:0,ipv4:0,ipv6:0,newer:0,line:0,bug:0,count:0,"default":0,displai:0,limit:0,embed:0,featur:0,curs:[0,1],classic:0,pid:0,"char":0,novemb:0,file:0,vista:0,tip:0,virtual:[],you:0,architectur:0,stat:0,easili:0,furthermor:0,directori:0,descript:0,getallmonitor:0,time:0,cpu:0},objtypes:{},titles:["Glances","Welcome to Glances&#8217;s documentation!"],objnames:{},filenames:["glances-doc","index"]})

View File

@ -70,12 +70,12 @@ p.topic-title {
font-weight: bold;
}
pre.code {
pre {
margin-left: 2em;
margin-right: 2em;
}
.console {
.console, .literal-block {
background-color: #eeeeee;
border: 1px solid #cccccc;
max-width: 60em;
@ -123,70 +123,76 @@ td.option-group {
<div class="document" id="glances">
<h1 class="title">Glances</h1>
<p>This manual describes <em>Glances</em> version 1.7.3.</p>
<p>Copyright © 2012-2013 Nicolas Hennion &lt;<a class="reference external" href="mailto:nicolas&#64;nicolargo.com">nicolas&#64;nicolargo.com</a>&gt;</p>
<p>November 2013</p>
<p>This manual describes <em>Glances</em> version 2.0.</p>
<p>Copyright © 2012-2014 Nicolas Hennion &lt;<a class="reference external" href="mailto:nicolas&#64;nicolargo.com">nicolas&#64;nicolargo.com</a>&gt;</p>
<p>June 2014</p>
<div class="contents topic" id="table-of-contents">
<p class="topic-title first">Table of Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#introduction" id="id7">Introduction</a></li>
<li><a class="reference internal" href="#usage" id="id8">Usage</a><ul>
<li><a class="reference internal" href="#standalone-mode" id="id9">Standalone mode</a></li>
<li><a class="reference internal" href="#client-server-mode" id="id10">Client/Server mode</a></li>
<li><a class="reference internal" href="#introduction" id="id5">Introduction</a></li>
<li><a class="reference internal" href="#usage" id="id6">Usage</a><ul>
<li><a class="reference internal" href="#standalone-mode" id="id7">Standalone Mode</a></li>
<li><a class="reference internal" href="#client-server-mode" id="id8">Client/Server Mode</a></li>
<li><a class="reference internal" href="#web-server-mode" id="id9">Web Server Mode</a></li>
</ul>
</li>
<li><a class="reference internal" href="#command-reference" id="id11">Command reference</a><ul>
<li><a class="reference internal" href="#command-line-options" id="id12">Command-line options</a></li>
<li><a class="reference internal" href="#interactive-commands" id="id13">Interactive commands</a></li>
<li><a class="reference internal" href="#command-reference" id="id10">Command Reference</a><ul>
<li><a class="reference internal" href="#command-line-options" id="id11">Command-Line Options</a></li>
<li><a class="reference internal" href="#interactive-commands" id="id12">Interactive Commands</a></li>
</ul>
</li>
<li><a class="reference internal" href="#configuration" id="id14">Configuration</a></li>
<li><a class="reference internal" href="#anatomy-of-the-application" id="id15">Anatomy of the application</a><ul>
<li><a class="reference internal" href="#legend" id="id16">Legend</a></li>
<li><a class="reference internal" href="#header" id="id17">Header</a></li>
<li><a class="reference internal" href="#cpu" id="id18">CPU</a></li>
<li><a class="reference internal" href="#load" id="id19">Load</a></li>
<li><a class="reference internal" href="#memory" id="id20">Memory</a></li>
<li><a class="reference internal" href="#network" id="id21">Network</a></li>
<li><a class="reference internal" href="#sensors" id="id22">Sensors</a></li>
<li><a class="reference internal" href="#disk-i-o" id="id23">Disk I/O</a></li>
<li><a class="reference internal" href="#file-system" id="id24">File system</a></li>
<li><a class="reference internal" href="#processes-list" id="id25">Processes list</a></li>
<li><a class="reference internal" href="#monitored-processes-list" id="id26">Monitored processes list</a></li>
<li><a class="reference internal" href="#logs" id="id27">Logs</a></li>
<li><a class="reference internal" href="#footer" id="id28">Footer</a></li>
<li><a class="reference internal" href="#configuration" id="id13">Configuration</a></li>
<li><a class="reference internal" href="#anatomy-of-the-application" id="id14">Anatomy Of The Application</a><ul>
<li><a class="reference internal" href="#legend" id="id15">Legend</a></li>
<li><a class="reference internal" href="#header" id="id16">Header</a></li>
<li><a class="reference internal" href="#cpu" id="id17">CPU</a></li>
<li><a class="reference internal" href="#load" id="id18">Load</a></li>
<li><a class="reference internal" href="#memory" id="id19">Memory</a></li>
<li><a class="reference internal" href="#network" id="id20">Network</a></li>
<li><a class="reference internal" href="#disk-i-o" id="id21">Disk I/O</a></li>
<li><a class="reference internal" href="#file-system" id="id22">File System</a></li>
<li><a class="reference internal" href="#sensors" id="id23">Sensors</a></li>
<li><a class="reference internal" href="#processes-list" id="id24">Processes List</a></li>
<li><a class="reference internal" href="#monitored-processes-list" id="id25">Monitored Processes List</a></li>
<li><a class="reference internal" href="#logs" id="id26">Logs</a></li>
</ul>
</li>
<li><a class="reference internal" href="#api-documentation" id="id29">API documentation</a></li>
<li><a class="reference internal" href="#support" id="id30">Support</a></li>
<li><a class="reference internal" href="#other-outputs" id="id27">Other Outputs</a></li>
<li><a class="reference internal" href="#api-documentation" id="id28">API Documentation</a></li>
<li><a class="reference internal" href="#support" id="id29">Support</a></li>
</ul>
</div>
<div class="section" id="introduction">
<h1><a class="toc-backref" href="#id7">Introduction</a></h1>
<p>Glances is a cross-platform curses-based monitoring tool which aims to
present a maximum of information in a minimum of space, ideally to fit
in a classical 80x24 terminal or higher to have additional information.</p>
<p>Glances can adapt dynamically the displayed information depending on the
terminal size. It can also work in a client/server mode for remote monitoring.</p>
<p>Glances is written in Python and uses the <a class="reference external" href="https://code.google.com/p/psutil/">psutil</a> library to get information from your system.</p>
<h1><a class="toc-backref" href="#id5">Introduction</a></h1>
<p>Glances is a cross-platform curses-based system monitoring tool which
aims to present a maximum of information in a minimum of space, ideally
to fit in a classical 80x24 terminal or higher to have additional
information. It can adapt dynamically the displayed information depending
on the terminal size.</p>
<p>Glances can also work in client/server mode. Remote monitoring could be
done via terminal or web interface.</p>
<p>Glances is written in Python and uses the <a class="reference external" href="https://code.google.com/p/psutil/">psutil</a> library to get
information from your system.</p>
<p>Console (80x24)</p>
<img alt="images/screenshot.png" src="images/screenshot.png" />
<p>Full view (&gt;80x24)</p>
<img alt="images/screenshot-wide.png" src="images/screenshot-wide.png" />
<p>Web interface (Firefox)</p>
<img alt="images/screenshot-web.png" src="images/screenshot-web.png" />
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id8">Usage</a></h1>
<h1><a class="toc-backref" href="#id6">Usage</a></h1>
<div class="section" id="standalone-mode">
<h2><a class="toc-backref" href="#id9">Standalone mode</a></h2>
<h2><a class="toc-backref" href="#id7">Standalone Mode</a></h2>
<p>Simply run:</p>
<pre class="code console literal-block">
<span class="generic prompt">$</span> glances
</pre>
</div>
<div class="section" id="client-server-mode">
<h2><a class="toc-backref" href="#id10">Client/Server mode</a></h2>
<p>If you want to remotely monitor a machine, called <tt class="docutils literal">server</tt>, from another one, called <tt class="docutils literal">client</tt>,
just run on the server:</p>
<h2><a class="toc-backref" href="#id8">Client/Server Mode</a></h2>
<p>If you want to remotely monitor a machine, called <tt class="docutils literal">server</tt>, from
another one, called <tt class="docutils literal">client</tt>, just run on the server:</p>
<pre class="code console literal-block">
<span class="generic output">server$ glances -s</span>
</pre>
@ -195,90 +201,146 @@ just run on the server:</p>
<span class="generic output">client$ glances -c &#64;server</span>
</pre>
<p>where <tt class="docutils literal">&#64;server</tt> is the IP address or hostname of the server.</p>
<p>In server mode, you can set the bind address <tt class="docutils literal"><span class="pre">-B</span> ADDRESS</tt> and listening TCP port <tt class="docutils literal"><span class="pre">-p</span> PORT</tt>.</p>
<p>In server mode, you can set the bind address <tt class="docutils literal"><span class="pre">-B</span> ADDRESS</tt> and listening
TCP port <tt class="docutils literal"><span class="pre">-p</span> PORT</tt>.</p>
<p>In client mode, you can set the TCP port of the server <tt class="docutils literal"><span class="pre">-p</span> PORT</tt>.</p>
<p>Default binding address is <tt class="docutils literal">0.0.0.0</tt> (Glances will listen on all the network interfaces) and TCP port is <tt class="docutils literal">61209</tt>.</p>
<p>You can also set a password to access to the server <tt class="docutils literal"><span class="pre">--password</span></tt>.</p>
<p>Default binding address is <tt class="docutils literal">0.0.0.0</tt> (Glances will listen on all the
network interfaces) and TCP port is <tt class="docutils literal">61209</tt>.</p>
<p>In client/server mode, limits are set by the server side.</p>
<p>You can also set a password to access to the server <tt class="docutils literal"><span class="pre">-P</span> password</tt>.</p>
<p>Glances is <tt class="docutils literal">IPv6</tt> compatible. Just use the <tt class="docutils literal"><span class="pre">-B</span> ::</tt> option to bind to all IPv6 addresses.</p>
<p>Glances is <tt class="docutils literal">IPv6</tt> compatible. Just use the <tt class="docutils literal"><span class="pre">-B</span> ::</tt> option to bind to
all IPv6 addresses.</p>
<p>As an experimental feature, if Glances server is not detected by the
client, the latter will try to grab stats using the <tt class="docutils literal">SNMP</tt> protocol:</p>
<pre class="code console literal-block">
<span class="generic output">client$ glances -c &#64;snmpserver</span>
</pre>
<p>Known issues: grab using SNMP is only validated for GNU/Linux with SNMP
v2/2c server.</p>
</div>
<div class="section" id="web-server-mode">
<h2><a class="toc-backref" href="#id9">Web Server Mode</a></h2>
<p>If you want to remotely monitor a machine, called <tt class="docutils literal">server</tt>, from any
device with a web browser, called <tt class="docutils literal">client</tt>, just run on the server:</p>
<pre class="code console literal-block">
<span class="generic output">server$ glances -w</span>
</pre>
<p>and on the client enter the following URL in your favorite web browser:</p>
<pre class="literal-block">
http://&#64;server:61208
</pre>
<p>where <tt class="docutils literal">&#64;server</tt> is the IP address or hostname of the server.</p>
<p>The Glances web interface follows responsive web design principles.</p>
<p>Screenshot from Chrome on Android</p>
<img alt="images/screenshot-web2.png" src="images/screenshot-web2.png" />
</div>
</div>
<div class="section" id="command-reference">
<h1><a class="toc-backref" href="#id11">Command reference</a></h1>
<h1><a class="toc-backref" href="#id10">Command Reference</a></h1>
<div class="section" id="command-line-options">
<h2><a class="toc-backref" href="#id12">Command-line options</a></h2>
<h2><a class="toc-backref" href="#id11">Command-Line Options</a></h2>
<table class="docutils option-list" frame="void" rules="none">
<col class="option" />
<col class="description" />
<tbody valign="top">
<tr><td class="option-group">
<kbd><span class="option">-b</span></kbd></td>
<td>Display network rate in Byte per second (default: bit per second)</td></tr>
<kbd><span class="option">-h</span>, <span class="option">--help</span></kbd></td>
<td>show this help message and exit</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-B <var>IP</var></span></kbd></td>
<td>Bind server to the given IPv4/IPv6 address or hostname</td></tr>
<kbd><span class="option">-V</span>, <span class="option">--version</span></kbd></td>
<td>show program's version number and exit</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-c <var>IP</var></span></kbd></td>
<td>Connect to a Glances server by IPv4/IPv6 address or hostname</td></tr>
<kbd><span class="option">-b</span>, <span class="option">--byte</span></kbd></td>
<td>display network rate in byte per second</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">-B <var>BIND_ADDRESS</var></span>, <span class="option">--bind <var>BIND_ADDRESS</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>bind server to the given IPv4/IPv6 address or hostname</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">-c <var>CLIENT</var></span>, <span class="option">--client <var>CLIENT</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>connect to a Glances server by IPv4/IPv6 address or
hostname</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">-C <var>CONF_FILE</var></span>, <span class="option">--config <var>CONF_FILE</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>path to the configuration file</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-C <var>FILE</var></span></kbd></td>
<td>Path to the configuration file</td></tr>
<kbd><span class="option">--disable-bold</span></kbd></td>
<td>disable bold mode in the terminal</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--disable-diskio</span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>disable disk I/O module</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-d</span></kbd></td>
<td>Disable disk I/O module</td></tr>
<kbd><span class="option">--disable-fs</span></kbd></td>
<td>disable file system module</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--disable-network</span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>disable network module</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--disable-sensors</span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>disable sensors module</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--disable-process</span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>disable process module</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-e</span></kbd></td>
<td>Enable sensors module (requires pysensors, Linux-only)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-f <var>FILE</var></span></kbd></td>
<td>Set the HTML output folder or CSV file</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-h</span></kbd></td>
<td>Display the help and exit</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-m</span></kbd></td>
<td>Disable mount module</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-n</span></kbd></td>
<td>Disable network module</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-o <var>OUTPUT</var></span></kbd></td>
<td>Define additional output (available: HTML or CSV)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-p <var>PORT</var></span></kbd></td>
<td>Define the client/server TCP port (default: 61209)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-P <var>PASSWORD</var></span></kbd></td>
<td>Define a client/server password</td></tr>
<kbd><span class="option">--disable-log</span></kbd></td>
<td>disable log module</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--output-csv <var>OUTPUT_CSV</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>export stats to a CSV file</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">-p <var>PORT</var></span>, <span class="option">--port <var>PORT</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>define the client/server TCP port [default: 61209]</td></tr>
<tr><td class="option-group">
<kbd><span class="option">--password</span></kbd></td>
<td>Define a client/server password from the prompt</td></tr>
<td>define a client/server password from the prompt or
file</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-r</span></kbd></td>
<td>Disable process list (for low CPU consumption)</td></tr>
<kbd><span class="option">-s</span>, <span class="option">--server</span></kbd></td>
<td>run Glances in server mode</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--snmp-community <var>SNMP_COMMUNITY</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>SNMP community</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--snmp-port <var>SNMP_PORT</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>SNMP port</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--snmp-version <var>SNMP_VERSION</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>SNMP version (1, 2c or 3)</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--snmp-user <var>SNMP_USER</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>SNMP username (only for SNMPv3)</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">--snmp-auth <var>SNMP_AUTH</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>SNMP authentication key (only for SNMPv3)</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">-t <var>TIME</var></span>, <span class="option">--time <var>TIME</var></span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>set refresh time in seconds [default: 3 sec]</td></tr>
<tr><td class="option-group" colspan="2">
<kbd><span class="option">-w</span>, <span class="option">--webserver</span></kbd></td>
</tr>
<tr><td>&nbsp;</td><td>run Glances in Web server mode</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-s</span></kbd></td>
<td>Run Glances in server mode</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-t <var>SECONDS</var></span></kbd></td>
<td>Set refresh time in seconds (default: 3 sec)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-v</span></kbd></td>
<td>Display the version and exit</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-y</span></kbd></td>
<td>Enable hddtemp module (requires hddtemp)</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-z</span></kbd></td>
<td>Do not use the bold color attribute</td></tr>
<tr><td class="option-group">
<kbd><span class="option">-1</span></kbd></td>
<td>Start Glances in per-CPU mode</td></tr>
<kbd><span class="option">-1</span>, <span class="option">--percpu</span></kbd></td>
<td>start Glances in per CPU mode</td></tr>
</tbody>
</table>
</div>
<div class="section" id="interactive-commands">
<h2><a class="toc-backref" href="#id13">Interactive commands</a></h2>
<h2><a class="toc-backref" href="#id12">Interactive Commands</a></h2>
<p>The following commands (key pressed) are supported while in Glances:</p>
<dl class="docutils">
<dt><tt class="docutils literal">a</tt></dt>
@ -300,7 +362,7 @@ just run on the server:</p>
<dt><tt class="docutils literal">h</tt></dt>
<dd>Show/hide the help screen</dd>
<dt><tt class="docutils literal">i</tt></dt>
<dd>Sort processes by I/O rate (may need root privileges on some OSes)</dd>
<dd>Sort processes by I/O rate</dd>
<dt><tt class="docutils literal">l</tt></dt>
<dd>Show/hide log messages</dd>
<dt><tt class="docutils literal">m</tt></dt>
@ -312,7 +374,7 @@ just run on the server:</p>
<dt><tt class="docutils literal">q</tt></dt>
<dd>Quit</dd>
<dt><tt class="docutils literal">s</tt></dt>
<dd>Show/hide sensors stats (only available with -e flag)</dd>
<dd>Show/hide sensors stats</dd>
<dt><tt class="docutils literal">t</tt></dt>
<dd>View network I/O as combination</dd>
<dt><tt class="docutils literal">u</tt></dt>
@ -321,17 +383,20 @@ just run on the server:</p>
<dd>Delete finished warning log messages</dd>
<dt><tt class="docutils literal">x</tt></dt>
<dd>Delete finished warning and critical log messages</dd>
<dt><tt class="docutils literal">y</tt></dt>
<dd>Show/hide hddtemp stats (only available with -y flag)</dd>
<dt><tt class="docutils literal">z</tt></dt>
<dd>Show/hide processes stats</dd>
<dt><tt class="docutils literal">1</tt></dt>
<dd>Switch between global CPU and per-CPU stats</dd>
</dl>
</div>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id14">Configuration</a></h1>
<h1><a class="toc-backref" href="#id13">Configuration</a></h1>
<p><strong>Caution! Glances version 1.x configuration files are not compatible
with the version 2.x.</strong></p>
<p>No configuration file is mandatory to use Glances.</p>
<p>Furthermore a configuration file is needed for setup limits and/or monitored processes list.</p>
<p>Furthermore a configuration file is needed to set up limits, disks or
network interfaces to hide and/or monitored processes list.</p>
<p>By default, the configuration file is under:</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
@ -346,147 +411,155 @@ just run on the server:</p>
</tbody>
</table>
<p>On Windows XP, the <tt class="docutils literal">%APPDATA%</tt> path is:</p>
<pre class="code console literal-block">
<span class="generic output">C:\Documents and Settings\&lt;User&gt;\Application Data</span>
<pre class="literal-block">
C:\Documents and Settings\&lt;User&gt;\Application Data
</pre>
<p>Since Windows Vista and newer versions:</p>
<pre class="code console literal-block">
<span class="generic output">C:\Users\&lt;User&gt;\AppData\Roaming</span>
<pre class="literal-block">
C:\Users\&lt;User&gt;\AppData\Roaming
</pre>
<p>You can override the default configuration, located in one of the above
directories on your system, except for Windows.</p>
<p>Just copy the <tt class="docutils literal">glances.conf</tt> file to your <tt class="docutils literal">$XDG_CONFIG_HOME</tt> directory, e.g. Linux:</p>
<p>Just copy the <tt class="docutils literal">glances.conf</tt> file to your <tt class="docutils literal">$XDG_CONFIG_HOME</tt> directory,
e.g., on Linux:</p>
<pre class="code console literal-block">
<span class="generic output">mkdir -p $XDG_CONFIG_HOME/glances
cp /etc/glances/glances.conf $XDG_CONFIG_HOME/glances/</span>
cp /usr/share/doc/glances/glances.conf $XDG_CONFIG_HOME/glances/</span>
</pre>
<p>On OS X, you should copy the configuration file to <tt class="docutils literal">~/Library/Application Support/glances/</tt>.</p>
<p>On OS X, you should copy the configuration file to
<tt class="docutils literal">~/Library/Application Support/glances/</tt>.</p>
</div>
<div class="section" id="anatomy-of-the-application">
<h1><a class="toc-backref" href="#id15">Anatomy of the application</a></h1>
<h1><a class="toc-backref" href="#id14">Anatomy Of The Application</a></h1>
<div class="section" id="legend">
<h2><a class="toc-backref" href="#id16">Legend</a></h2>
<h2><a class="toc-backref" href="#id15">Legend</a></h2>
<div class="line-block">
<div class="line"><tt class="docutils literal">GREEN</tt> stat counter is <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line"><tt class="docutils literal">BLUE</tt> stat counter is <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line"><tt class="docutils literal">MAGENTA</tt> stat counter is <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line"><tt class="docutils literal">RED</tt> stat counter is <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
</div>
<p><em>Note</em>: only stats with colored background will be logged in the alert
view.</p>
</div>
<div class="section" id="header">
<h2><a class="toc-backref" href="#id17">Header</a></h2>
<h2><a class="toc-backref" href="#id16">Header</a></h2>
<img alt="images/header.png" src="images/header.png" />
<p>The header shows the OS name, release version, platform architecture and the hostname.
On Linux, it shows also the kernel version.</p>
<p>The header shows the hostname, OS name, release version, platform
architecture and system uptime (on the upper right corner).
Additionally, on GNU/Linux, it also shows the kernel version.</p>
<p>In client mode, the server connection status is displayed.</p>
<p>Connected:</p>
<img alt="images/connected.png" src="images/connected.png" />
<p>Disconnected:</p>
<img alt="images/disconnected.png" src="images/disconnected.png" />
</div>
<div class="section" id="cpu">
<h2><a class="toc-backref" href="#id18">CPU</a></h2>
<h2><a class="toc-backref" href="#id17">CPU</a></h2>
<p>Short view:</p>
<img alt="images/cpu.png" src="images/cpu.png" />
<p>If enough horizontal space is available, extended CPU informations are displayed.</p>
<p>If enough horizontal space is available, extended CPU information are
displayed.</p>
<p>Extended view:</p>
<img alt="images/cpu-wide.png" src="images/cpu-wide.png" />
<p>To switch to per-CPU stats, just hit the <tt class="docutils literal">1</tt> key:</p>
<img alt="images/per-cpu.png" src="images/per-cpu.png" />
<p>The CPU stats are shown as a percentage and for the configured refresh time.
The total CPU usage is displayed on the first line.</p>
<p>The CPU stats are shown as a percentage and for the configured refresh
time. The total CPU usage is displayed on the first line.</p>
<div class="line-block">
<div class="line">If user|system|nice CPU is <tt class="docutils literal">&lt;50%</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If user|system|nice CPU is <tt class="docutils literal">&gt;50%</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If user|system|nice CPU is <tt class="docutils literal">&gt;70%</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If user|system|nice CPU is <tt class="docutils literal">&gt;90%</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
<div class="line">If user|system CPU is <tt class="docutils literal">&lt;50%</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If user|system CPU is <tt class="docutils literal">&gt;50%</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If user|system CPU is <tt class="docutils literal">&gt;70%</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If user|system CPU is <tt class="docutils literal">&gt;90%</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
</div>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal">[cpu]</tt> section.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under
the <tt class="docutils literal">[cpu]</tt> and/or <tt class="docutils literal">[percpu]</tt> sections.</p>
</div>
<div class="section" id="load">
<h2><a class="toc-backref" href="#id19">Load</a></h2>
<h2><a class="toc-backref" href="#id18">Load</a></h2>
<img alt="images/load.png" src="images/load.png" />
<p>On the <em>No Sheep</em> blog, <em>Zachary Tirrell</em> defines the average load <a class="footnote-reference" href="#id4" id="id1">[1]</a>:</p>
<p>On the <em>No Sheep</em> blog, <em>Zachary Tirrell</em> defines the load average <a class="footnote-reference" href="#id3" id="id1">[1]</a>:</p>
<blockquote>
&quot;In short it is the average sum of the number of processes
waiting in the run-queue plus the number currently executing
over 1, 5, and 15 minute time periods.&quot;</blockquote>
over 1, 5, and 15 minutes time periods.&quot;</blockquote>
<p>Glances gets the number of CPU core to adapt the alerts.
Alerts on average load are only set on 5 and 15 min.
The first line also display the number of CPU core.</p>
Alerts on load average are only set on 15 minutes time period.
The first line also displays the number of CPU core.</p>
<div class="line-block">
<div class="line">If average load is <tt class="docutils literal">&lt;0.7*core</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If average load is <tt class="docutils literal">&gt;0.7*core</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If average load is <tt class="docutils literal">&gt;1*core</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If average load is <tt class="docutils literal">&gt;5*core</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
<div class="line">If load average is <tt class="docutils literal">&lt;0.7*core</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If load average is <tt class="docutils literal">&gt;0.7*core</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If load average is <tt class="docutils literal">&gt;1*core</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If load average is <tt class="docutils literal">&gt;5*core</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
</div>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal">[load]</tt> section.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under
the <tt class="docutils literal">[load]</tt> section.</p>
</div>
<div class="section" id="memory">
<h2><a class="toc-backref" href="#id20">Memory</a></h2>
<p>Glances uses two columns: one for the <tt class="docutils literal">RAM</tt> and another one for the <tt class="docutils literal">Swap</tt>.</p>
<h2><a class="toc-backref" href="#id19">Memory</a></h2>
<p>Glances uses two columns: one for the <tt class="docutils literal">RAM</tt> and one for the <tt class="docutils literal">SWAP</tt>.</p>
<img alt="images/mem.png" src="images/mem.png" />
<p>If enough space is available, Glances displays extended informations:</p>
<p>If enough space is available, Glances displays extended information for
the <tt class="docutils literal">RAM</tt>:</p>
<img alt="images/mem-wide.png" src="images/mem-wide.png" />
<p>With Glances, alerts are only set for on used memory and used swap.</p>
<p>Alerts are only set for used memory and used swap.</p>
<div class="line-block">
<div class="line">If memory is <tt class="docutils literal">&lt;50%</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If memory is <tt class="docutils literal">&gt;50%</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If memory is <tt class="docutils literal">&gt;70%</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If memory is <tt class="docutils literal">&gt;90%</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
<div class="line">If used memory|swap is <tt class="docutils literal">&lt;50%</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If used memory|swap is <tt class="docutils literal">&gt;50%</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If used memory|swap is <tt class="docutils literal">&gt;70%</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If used memory|swap is <tt class="docutils literal">&gt;90%</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
</div>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal">[memory]</tt> and <tt class="docutils literal">[swap]</tt> sections.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under
the <tt class="docutils literal">[memory]</tt> and/or <tt class="docutils literal">[memswap]</tt> sections.</p>
</div>
<div class="section" id="network">
<h2><a class="toc-backref" href="#id21">Network</a></h2>
<h2><a class="toc-backref" href="#id20">Network</a></h2>
<img alt="images/network.png" src="images/network.png" />
<p>Glances displays the network interface bit rate. The unit is adapted
dynamically (bits per second, kbits per second, Mbits per second, etc).</p>
<p>Alerts are only set if the network interface maximum speed is available.</p>
<p>For example, on a 100 Mbps ethernet interface, the warning status is set
if the bit rate is higher than 70 Mbps.</p>
<div class="line-block">
<div class="line">If bit rate is <tt class="docutils literal">&lt;50%</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If bit rate is <tt class="docutils literal">&gt;50%</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If bit rate is <tt class="docutils literal">&gt;70%</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If bit rate is <tt class="docutils literal">&gt;90%</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
</div>
</div>
<div class="section" id="sensors">
<h2><a class="toc-backref" href="#id22">Sensors</a></h2>
<p>Glances can displays the sensors informations trough <cite>lm-sensors</cite> (only available on Linux).</p>
<p>As of lm-sensors, a filter is processed in order to display temperature only:</p>
<img alt="images/sensors.png" src="images/sensors.png" />
<p>Glances can also grab hard disk temperature through the <cite>hddtemp</cite> daemon (see here <a class="footnote-reference" href="#id5" id="id2">[2]</a> to install hddtemp on your system):</p>
<img alt="images/hddtemp.png" src="images/hddtemp.png" />
<p>To enable the lm-sensors module:</p>
<pre class="code console literal-block">
<span class="generic prompt">$</span> glances -e
</pre>
<p>To enable the hddtemp module:</p>
<pre class="code console literal-block">
<span class="generic prompt">$</span> glances -y
</pre>
<p>There is no alert on this information.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal">[temperature]</tt> and <tt class="docutils literal">[hddtemperature]</tt> sections.</p>
<p>Alerts are only set if the maximum speed per network interface is available
(see sample in the configuration file).</p>
<p><em>Note</em>: it is possibile to define a list of network interfaces to hide
and per-interface limit values in the <tt class="docutils literal">[network]</tt> section of the
configuration file.</p>
</div>
<div class="section" id="disk-i-o">
<h2><a class="toc-backref" href="#id23">Disk I/O</a></h2>
<h2><a class="toc-backref" href="#id21">Disk I/O</a></h2>
<img alt="images/diskio.png" src="images/diskio.png" />
<p>Glances displays the disk I/O throughput. The unit is adapted dynamically.</p>
<p><em>Note</em>: There is no alert on this information.</p>
<p>There is no alert on this information.</p>
<p><em>Note</em>: it is possible to define a list of disks to hide under the
<tt class="docutils literal">[diskio]</tt> section in the configuration file.</p>
</div>
<div class="section" id="file-system">
<h2><a class="toc-backref" href="#id24">File system</a></h2>
<h2><a class="toc-backref" href="#id22">File System</a></h2>
<img alt="images/fs.png" src="images/fs.png" />
<p>Glances displays the used and total file system disk space. The unit is
adapted dynamically.</p>
<p>Alerts are set for used disk space:</p>
<p>Alerts are set for used disk space.</p>
<div class="line-block">
<div class="line">If disk used is <tt class="docutils literal">&lt;50%</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If disk used is <tt class="docutils literal">&gt;50%</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If disk used is <tt class="docutils literal">&gt;70%</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If disk used is <tt class="docutils literal">&gt;90%</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
<div class="line">If used disk is <tt class="docutils literal">&lt;50%</tt>, then status is set to <tt class="docutils literal">&quot;OK&quot;</tt></div>
<div class="line">If used disk is <tt class="docutils literal">&gt;50%</tt>, then status is set to <tt class="docutils literal">&quot;CAREFUL&quot;</tt></div>
<div class="line">If used disk is <tt class="docutils literal">&gt;70%</tt>, then status is set to <tt class="docutils literal">&quot;WARNING&quot;</tt></div>
<div class="line">If used disk is <tt class="docutils literal">&gt;90%</tt>, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
</div>
<p><em>Note</em>: limit values can be overwritten in the configuration file under <tt class="docutils literal">[filesystem]</tt> section.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under
the <tt class="docutils literal">[filesystem]</tt> section.</p>
</div>
<div class="section" id="sensors">
<h2><a class="toc-backref" href="#id23">Sensors</a></h2>
<p>Glances can displays the sensors information using <cite>lm-sensors</cite>,
<cite>hddtemp</cite> and <cite>batinfo</cite> <a class="footnote-reference" href="#id4" id="id2">[2]</a>.</p>
<p>All of the above libraries are available only on Linux.</p>
<p>As of lm-sensors, a filter is being applied in order to display
temperature only.</p>
<img alt="images/sensors.png" src="images/sensors.png" />
<p>There is no alert on this information.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under
the <tt class="docutils literal">[sensors]</tt> section.</p>
</div>
<div class="section" id="processes-list">
<h2><a class="toc-backref" href="#id25">Processes list</a></h2>
<h2><a class="toc-backref" href="#id24">Processes List</a></h2>
<p>Compact view:</p>
<img alt="images/processlist.png" src="images/processlist.png" />
<p>Full view:</p>
@ -494,80 +567,101 @@ adapted dynamically.</p>
<p>Three views are available for processes:</p>
<ul class="simple">
<li>Processes summary</li>
<li>Optional monitored processes list (new in 1.7)</li>
<li>Optional monitored processes list (see below)</li>
<li>Processes list</li>
</ul>
<p>By default, or if you hit the <tt class="docutils literal">a</tt> key, the processes list is automatically
sorted by CPU of memory usage.</p>
<p><em>Note</em>: limit values can be overwritten in the configuration file under the <tt class="docutils literal">[process]</tt> section.</p>
<p>The processes summary line display:</p>
<ul class="simple">
<li>Tasks number (total number of processes)</li>
<li>Threads number</li>
<li>Running tasks number</li>
<li>Sleeping tasks number</li>
<li>Other tasks number (not running or sleeping)</li>
<li>Sort key</li>
</ul>
<p>By default, or if you hit the <tt class="docutils literal">a</tt> key, the processes list is
automatically sorted by:</p>
<ul class="simple">
<li><tt class="docutils literal">CPU</tt> if there is no alert (default behavior)</li>
<li><tt class="docutils literal">CPU</tt> if a CPU or LOAD alert is detected</li>
<li><tt class="docutils literal">MEM</tt> if a memory alert is detected</li>
<li><tt class="docutils literal">Disk I/O</tt> if a CPU iowait alert is detected</li>
</ul>
<p>The number of processes in the list is adapted to the screen size.</p>
<dl class="docutils">
<dt><tt class="docutils literal">VIRT</tt></dt>
<dd>Total program size (VMS)</dd>
<dt><tt class="docutils literal">RES</tt></dt>
<dd>Resident set size (RSS)</dd>
<dt><tt class="docutils literal">CPU%</tt></dt>
<dd>% of CPU used by the process</dd>
<dt><tt class="docutils literal">MEM%</tt></dt>
<dd>% of MEM used by the process</dd>
<dt><tt class="docutils literal">VIRT</tt></dt>
<dd>Total program size (VMS)</dd>
<dt><tt class="docutils literal">RES</tt></dt>
<dd>Resident set size (RSS)</dd>
<dt><tt class="docutils literal">PID</tt></dt>
<dd>Process ID</dd>
<dt><tt class="docutils literal">USER</tt></dt>
<dd>User ID per process</dd>
<dd>User ID</dd>
<dt><tt class="docutils literal">NI</tt></dt>
<dd>Nice level of the process</dd>
<dd>Nice level of the process (niceness other than 0 is highlighted)</dd>
<dt><tt class="docutils literal">S</tt></dt>
<dd>Process status</dd>
<dd>Process status (running process is highlighted)</dd>
<dt><tt class="docutils literal">TIME+</tt></dt>
<dd>Cumulative CPU time used</dd>
<dt><tt class="docutils literal">IOR/s</tt></dt>
<dd>Per process IO read rate (in Byte/s)</dd>
<dd>Per process I/O read rate (in Byte/s)</dd>
<dt><tt class="docutils literal">IOW/s</tt></dt>
<dd>Per process IO write rate (in Byte/s)</dd>
<dt><tt class="docutils literal">NAME</tt></dt>
<dd>Process name or command line</dd>
<dd>Per process I/O write rate (in Byte/s)</dd>
<dt><tt class="docutils literal">COMMAND</tt></dt>
<dd>Process command line (process name is highlighted)</dd>
</dl>
<p>Process status legend:</p>
<dl class="docutils">
<dt><tt class="docutils literal">R</tt></dt>
<dd>running</dd>
<dd>Running</dd>
<dt><tt class="docutils literal">S</tt></dt>
<dd>sleeping (may be interrupted)</dd>
<dd>Sleeping (may be interrupted)</dd>
<dt><tt class="docutils literal">D</tt></dt>
<dd>disk sleep (may not be interrupted)</dd>
<dd>Disk sleep (may not be interrupted)</dd>
<dt><tt class="docutils literal">T</tt></dt>
<dd>traced/stopped</dd>
<dd>Traced / Stopped</dd>
<dt><tt class="docutils literal">Z</tt></dt>
<dd>zombie</dd>
<dd>Zombie</dd>
</dl>
<p><em>Note</em>: limits values can be overwritten in the configuration file under
the <tt class="docutils literal">[process]</tt> section.</p>
</div>
<div class="section" id="monitored-processes-list">
<h2><a class="toc-backref" href="#id26">Monitored processes list</a></h2>
<p>New in version 1.7. Optional.</p>
<h2><a class="toc-backref" href="#id25">Monitored Processes List</a></h2>
<p>The monitored processes list allows user, through the configuration file,
to group processes and quickly show if the number of running process is not good.</p>
to group processes and quickly show if the number of running processes is
not good.</p>
<img alt="images/monitored.png" src="images/monitored.png" />
<p>Each item is defined by:</p>
<ul class="simple">
<li><tt class="docutils literal">description</tt>: description of the processes (max 16 chars).</li>
<li><tt class="docutils literal">regex</tt>: regular expression of the processes to monitor.</li>
<li><tt class="docutils literal">command</tt> (optional): full path to shell command/script for extended stat. Should return a single line string. Use with caution.</li>
<li><tt class="docutils literal">countmin</tt> (optional): minimal number of processes. A warning will be displayed if number of processes &lt; count.</li>
<li><tt class="docutils literal">countmax</tt> (optional): maximum number of processes. A warning will be displayed if number of processes &gt; count.</li>
<li><tt class="docutils literal">command</tt> (optional): full path to shell command/script for extended
stat. Should return a single line string. Use with caution.</li>
<li><tt class="docutils literal">countmin</tt> (optional): minimal number of processes. A warning will
be displayed if number of processes &lt; count.</li>
<li><tt class="docutils literal">countmax</tt> (optional): maximum number of processes. A warning will
be displayed if number of processes &gt; count.</li>
</ul>
<p>Up to 10 items can be defined.</p>
<p>For example, if you want to monitor the Nginx processes on a Web server, the following definition should do the job:</p>
<pre class="code console literal-block">
<span class="generic output">[monitor]
<p>For example, if you want to monitor the Nginx processes on a Web server,
the following definition should do the job:</p>
<pre class="literal-block">
[monitor]
list_1_description=Nginx server
list_1_regex=.*nginx.*
list_1_command=nginx -v
list_1_countmin=1
list_1_countmax=4</span>
list_1_countmax=4
</pre>
<p>If you also want to monitor the PHP-FPM daemon processes, you should add another item:</p>
<pre class="code console literal-block">
<span class="generic output">[monitor]
<p>If you also want to monitor the PHP-FPM daemon processes, you should add
another item:</p>
<pre class="literal-block">
[monitor]
list_1_description=Nginx server
list_1_regex=.*nginx.*
list_1_command=nginx -v
@ -576,10 +670,11 @@ list_1_countmax=4
list_1_description=PHP-FPM
list_1_regex=.*php-fpm.*
list_1_countmin=1
list_1_countmax=20</span>
list_1_countmax=20
</pre>
<p>In client/server mode, the list is defined on the server side.
A new method, called getAllMonitored, is available in the APIs and get the JSON representation of the monitored processes list.</p>
A new method, called <cite>getAllMonitored</cite>, is available in the APIs and
get the JSON representation of the monitored processes list.</p>
<p>Alerts are set as following:</p>
<div class="line-block">
<div class="line">If number of processes is 0, then status is set to <tt class="docutils literal">&quot;CRITICAL&quot;</tt></div>
@ -588,61 +683,58 @@ A new method, called getAllMonitored, is available in the APIs and get the JSON
</div>
</div>
<div class="section" id="logs">
<h2><a class="toc-backref" href="#id27">Logs</a></h2>
<h2><a class="toc-backref" href="#id26">Logs</a></h2>
<img alt="images/logs.png" src="images/logs.png" />
<p>A log messages list is displayed in the bottom of the screen if (and only if):</p>
<p>A log messages list is displayed in the bottom of the screen if (and
only if):</p>
<ul class="simple">
<li>at least one <tt class="docutils literal">WARNING</tt> or <tt class="docutils literal">CRITICAL</tt> alert was occurred</li>
<li>space is available in the bottom of the console/terminal</li>
</ul>
<p>Each alert message displays the following information:</p>
<ol class="arabic simple">
<li>start date</li>
<li>end date</li>
<li>start datetime</li>
<li>duration if alert is terminated or <cite>ongoing</cite> if the alert is still in
progress</li>
<li>alert name</li>
<li>{min/avg/max} values or number of running processes for monitored processes list alerts</li>
<li>{min,avg,max} values or number of running processes for monitored
processes list alerts</li>
</ol>
</div>
<div class="section" id="footer">
<h2><a class="toc-backref" href="#id28">Footer</a></h2>
<img alt="images/footer.png" src="images/footer.png" />
<p>Glances displays the current date &amp; time and access to the embedded help screen.</p>
<p>If one or mode batteries were found on your machine and if the batinfo Python library <a class="footnote-reference" href="#id6" id="id3">[3]</a>
is installed on your system then Glances displays the available percent capacity in the middle on the footer.</p>
<img alt="images/battery.png" src="images/battery.png" />
<p>If you have ran Glances in client mode <tt class="docutils literal"><span class="pre">-c</span></tt>, you can also see if the client is connected to the server.</p>
<p>If client is connected:</p>
<img alt="images/client-connected.png" src="images/client-connected.png" />
<p>else:</p>
<img alt="images/client-disconnected.png" src="images/client-disconnected.png" />
<p>On the left, you can easily see if you are connected to a Glances server.</p>
</div>
<div class="section" id="other-outputs">
<h1><a class="toc-backref" href="#id27">Other Outputs</a></h1>
<p>It is possible to export statistics to CSV file.</p>
<pre class="code console literal-block">
<span class="generic prompt">$</span> glances --output-csv /tmp/glances.csv
</pre>
<p>CSV files have two lines per stats:</p>
<ul class="simple">
<li>Stats description</li>
<li>Stats (comma separated)</li>
</ul>
</div>
<div class="section" id="api-documentation">
<h1><a class="toc-backref" href="#id29">API documentation</a></h1>
<h1><a class="toc-backref" href="#id28">API Documentation</a></h1>
<p>Glances uses a <a class="reference external" href="http://docs.python.org/2/library/simplexmlrpcserver.html">XML-RPC server</a> and can be used by another client software.</p>
<p>API documentation is available at <a class="reference external" href="https://github.com/nicolargo/glances/wiki/The-Glances-API-How-To">https://github.com/nicolargo/glances/wiki/The-Glances-API-How-To</a></p>
<p>API documentation is available at
<a class="reference external" href="https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to">https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to</a>.</p>
</div>
<div class="section" id="support">
<h1><a class="toc-backref" href="#id30">Support</a></h1>
<p>To report a bug or a feature request use the bug tracking system at <a class="reference external" href="https://github.com/nicolargo/glances/issues">https://github.com/nicolargo/glances/issues</a></p>
<h1><a class="toc-backref" href="#id29">Support</a></h1>
<p>To report a bug or a feature request use the bug tracking system at
<a class="reference external" href="https://github.com/nicolargo/glances/issues">https://github.com/nicolargo/glances/issues</a>.</p>
<p>Feel free to contribute!</p>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<table class="docutils footnote" frame="void" id="id3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><a class="reference external" href="http://nosheep.net/story/defining-unix-load-average/">http://nosheep.net/story/defining-unix-load-average/</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><a class="reference external" href="http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html">http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id6" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td><a class="reference external" href="https://github.com/nicolargo/batinfo">https://github.com/nicolargo/batinfo</a></td></tr>
<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><a class="reference external" href="https://github.com/nicolargo/batinfo">https://github.com/nicolargo/batinfo</a></td></tr>
</tbody>
</table>
</div>

View File

@ -6,23 +6,24 @@ This manual describes *Glances* version 2.0.
Copyright © 2012-2014 Nicolas Hennion <nicolas@nicolargo.com>
May 2014
June 2014
.. contents:: Table of Contents
Introduction
============
Glances is a cross-platform curses-based monitoring tool which aims to
present a maximum of information in a minimum of space, ideally to fit
in a classical 80x24 terminal or higher to have additional information.
Glances can adapt dynamically the displayed information depending on the
terminal size.
Glances is a cross-platform curses-based system monitoring tool which
aims to present a maximum of information in a minimum of space, ideally
to fit in a classical 80x24 terminal or higher to have additional
information. It can adapt dynamically the displayed information depending
on the terminal size.
Glances can also work in a client/server mode. Remote monitoring could be
done via terminal or Web interface.
Glances can also work in client/server mode. Remote monitoring could be
done via terminal or web interface.
Glances is written in Python and uses the `psutil`_ library to get information from your system.
Glances is written in Python and uses the `psutil`_ library to get
information from your system.
Console (80x24)
@ -39,7 +40,7 @@ Web interface (Firefox)
Usage
=====
Standalone mode
Standalone Mode
---------------
Simply run:
@ -48,10 +49,11 @@ Simply run:
$ glances
Client/Server mode
Client/Server Mode
------------------
If you want to remotely monitor a machine, called ``server``, from another one, called ``client``, just run on the server:
If you want to remotely monitor a machine, called ``server``, from
another one, called ``client``, just run on the server:
.. code-block:: console
@ -65,89 +67,100 @@ and on the client:
where ``@server`` is the IP address or hostname of the server.
In server mode, you can set the bind address ``-B ADDRESS`` and listening TCP port ``-p PORT``.
In server mode, you can set the bind address ``-B ADDRESS`` and listening
TCP port ``-p PORT``.
In client mode, you can set the TCP port of the server ``-p PORT``.
You can also set a password to access to the server ``--password``.
Default binding address is ``0.0.0.0`` (Glances will listen on all the network interfaces) and TCP port is ``61209``.
Default binding address is ``0.0.0.0`` (Glances will listen on all the
network interfaces) and TCP port is ``61209``.
In client/server mode, limits are set by the server side.
Glances is ``IPv6`` compatible. Just use the ``-B ::`` option to bind to all IPv6 addresses.
Glances is ``IPv6`` compatible. Just use the ``-B ::`` option to bind to
all IPv6 addresses.
As an experimental feature, if Glances server is not detected by the client, this last one try to grab stats using the SNMP protocol:
As an experimental feature, if Glances server is not detected by the
client, the latter will try to grab stats using the ``SNMP`` protocol:
.. code-block:: console
client$ glances -c @snmpserver
client$ glances -c @snmpserver
Known limitation: Grab using SNMP is only validated for GNU/Linux operating system with SNMP v2/2c server.
Known issues: grab using SNMP is only validated for GNU/Linux with SNMP
v2/2c server.
Web Server mode
----------------
Web Server Mode
---------------
If you want to remotely monitor a machine, called ``server``, from any device with a Web Browser (called ``client``), just run on the server:
If you want to remotely monitor a machine, called ``server``, from any
device with a web browser, called ``client``, just run on the server:
.. code-block:: console
server$ glances -w
and on the client, enter the following URL in your favorite Web Browser:
and on the client enter the following URL in your favorite web browser:
http:\\@server:61208\
::
http://@server:61208
where ``@server`` is the IP address or hostname of the server.
The Glances Web interface is responsive web designed (Android device screenshot):
The Glances web interface follows responsive web design principles.
Screenshot from Chrome on Android
.. image:: images/screenshot-web2.png
Command reference
Command Reference
=================
Command-line options
Command-Line Options
--------------------
-h, --help show this help message and exit
-V, --version show program's version number and exit
-V, --version show program's version number and exit
-b, --byte display network rate in byte per second
-B BIND_ADDRESS, --bind BIND_ADDRESS
bind server to the given IPv4/IPv6 address or hostname
bind server to the given IPv4/IPv6 address or hostname
-c CLIENT, --client CLIENT
connect to a Glances server by IPv4/IPv6 address or
hostname
connect to a Glances server by IPv4/IPv6 address or
hostname
-C CONF_FILE, --config CONF_FILE
path to the configuration file
path to the configuration file
--disable-bold disable bold mode in the terminal
--disable-diskio disable disk I/O module
--disable-fs disable filesystem module
--disable-fs disable file system module
--disable-network disable network module
--disable-sensors disable sensors module
--disable-process disable process module
--disable-log disable log module
--output-csv OUTPUT_CSV
export stats to a csv file
export stats to a CSV file
-p PORT, --port PORT define the client/server TCP port [default: 61209]
--password define a client/server password from the prompt/file
--password define a client/server password from the prompt or
file
-s, --server run Glances in server mode
--snmp-community SNMP_COMMUNITY
SNMP community
SNMP community
--snmp-port SNMP_PORT
SNMP port
SNMP port
--snmp-version SNMP_VERSION
SNMP version (1, 2c or 3)
SNMP version (1, 2c or 3)
--snmp-user SNMP_USER
SNMP username (only for SNMPv3)
SNMP username (only for SNMPv3)
--snmp-auth SNMP_AUTH
SNMP authentication key (only for SNMPv3)
SNMP authentication key (only for SNMPv3)
-t TIME, --time TIME set refresh time in seconds [default: 3 sec]
-w, --webserver run Glances in web server mode
-w, --webserver run Glances in Web server mode
-1, --percpu start Glances in per CPU mode
Interactive commands
Interactive Commands
--------------------
The following commands (key pressed) are supported while in Glances:
@ -169,7 +182,7 @@ The following commands (key pressed) are supported while in Glances:
``h``
Show/hide the help screen
``i``
Sort processes by I/O rate (may need root privileges on some OSes)
Sort processes by I/O rate
``l``
Show/hide log messages
``m``
@ -190,19 +203,21 @@ The following commands (key pressed) are supported while in Glances:
Delete finished warning log messages
``x``
Delete finished warning and critical log messages
``y``
Show/hide hddtemp stats
``z``
Show/hide processes stats
``1``
Switch between global CPU and per-CPU stats
Configuration
=============
**Caution: be aware that the Glances version 1.x configurations files are not comaptible with the version 2.x.**
**Caution! Glances version 1.x configuration files are not compatible
with the version 2.x.**
No configuration file is mandatory to use Glances.
Furthermore a configuration file is needed for setup limits, disks or network interfaces to hide and/or monitored processes list.
Furthermore a configuration file is needed to set up limits, disks or
network interfaces to hide and/or monitored processes list.
By default, the configuration file is under:
@ -212,29 +227,31 @@ By default, the configuration file is under:
On Windows XP, the ``%APPDATA%`` path is:
.. code-block:: console
::
C:\Documents and Settings\<User>\Application Data
Since Windows Vista and newer versions:
.. code-block:: console
::
C:\Users\<User>\AppData\Roaming
You can override the default configuration, located in one of the above
directories on your system, except for Windows.
Just copy the ``glances.conf`` file to your ``$XDG_CONFIG_HOME`` directory, e.g. Linux:
Just copy the ``glances.conf`` file to your ``$XDG_CONFIG_HOME`` directory,
e.g., on Linux:
.. code-block:: console
mkdir -p $XDG_CONFIG_HOME/glances
cp /etc/glances/glances.conf $XDG_CONFIG_HOME/glances/
cp /usr/share/doc/glances/glances.conf $XDG_CONFIG_HOME/glances/
On OS X, you should copy the configuration file to ``~/Library/Application Support/glances/``.
On OS X, you should copy the configuration file to
``~/Library/Application Support/glances/``.
Anatomy of the application
Anatomy Of The Application
==========================
Legend
@ -245,17 +262,19 @@ Legend
| ``MAGENTA`` stat counter is ``"WARNING"``
| ``RED`` stat counter is ``"CRITICAL"``
Note: Only stats with colored background will be logged in the alert view.
*Note*: only stats with colored background will be logged in the alert
view.
Header
------
.. image:: images/header.png
The header shows the hostname, OS name, release version, platform architecture and system uptime (on the upper right).
Additionnaly, on GNU/Linux operating system, it shows also the kernel version.
The header shows the hostname, OS name, release version, platform
architecture and system uptime (on the upper right corner).
Additionally, on GNU/Linux, it also shows the kernel version.
In client mode, the server connection status is displayed:
In client mode, the server connection status is displayed.
Connected:
@ -272,7 +291,8 @@ Short view:
.. image:: images/cpu.png
If enough horizontal space is available, extended CPU informations are displayed.
If enough horizontal space is available, extended CPU information are
displayed.
Extended view:
@ -282,57 +302,61 @@ To switch to per-CPU stats, just hit the ``1`` key:
.. image:: images/per-cpu.png
The CPU stats are shown as a percentage and for the configured refresh time.
The total CPU usage is displayed on the first line.
The CPU stats are shown as a percentage and for the configured refresh
time. The total CPU usage is displayed on the first line.
| If user|system|iowait CPU is ``<50%``, then status is set to ``"OK"``
| If user|system|iowait CPU is ``>50%``, then status is set to ``"CAREFUL"``
| If user|system|iowait CPU is ``>70%``, then status is set to ``"WARNING"``
| If user|system|iowait CPU is ``>90%``, then status is set to ``"CRITICAL"``
| If user|system CPU is ``<50%``, then status is set to ``"OK"``
| If user|system CPU is ``>50%``, then status is set to ``"CAREFUL"``
| If user|system CPU is ``>70%``, then status is set to ``"WARNING"``
| If user|system CPU is ``>90%``, then status is set to ``"CRITICAL"``
*Note*: limit values can be overwritten in the configuration file under the ``[cpu]`` or/and ``[percpu]`` sections.
*Note*: limit values can be overwritten in the configuration file under
the ``[cpu]`` and/or ``[percpu]`` sections.
Load
----
.. image:: images/load.png
On the *No Sheep* blog, *Zachary Tirrell* defines the average load [1]_:
On the *No Sheep* blog, *Zachary Tirrell* defines the load average [1]_:
"In short it is the average sum of the number of processes
waiting in the run-queue plus the number currently executing
over 1, 5, and 15 minutes time periods."
Glances gets the number of CPU core to adapt the alerts.
Alerts on average load are only set on 15 minutes time period.
The first line also display the number of CPU core.
Alerts on load average are only set on 15 minutes time period.
The first line also displays the number of CPU core.
| If average load is ``<0.7*core``, then status is set to ``"OK"``
| If average load is ``>0.7*core``, then status is set to ``"CAREFUL"``
| If average load is ``>1*core``, then status is set to ``"WARNING"``
| If average load is ``>5*core``, then status is set to ``"CRITICAL"``
| If load average is ``<0.7*core``, then status is set to ``"OK"``
| If load average is ``>0.7*core``, then status is set to ``"CAREFUL"``
| If load average is ``>1*core``, then status is set to ``"WARNING"``
| If load average is ``>5*core``, then status is set to ``"CRITICAL"``
*Note*: limit values can be overwritten in the configuration file under the ``[load]`` section.
*Note*: limit values can be overwritten in the configuration file under
the ``[load]`` section.
Memory
------
Glances uses two columns: one for the ``RAM`` and another one for the ``SWAP``.
Glances uses two columns: one for the ``RAM`` and one for the ``SWAP``.
.. image:: images/mem.png
If enough space is available, Glances displays extended informations for the ``RAM``:
If enough space is available, Glances displays extended information for
the ``RAM``:
.. image:: images/mem-wide.png
With Glances, alerts are only set for used memory and swap.
Alerts are only set for used memory and used swap.
| If memory is ``<50%``, then status is set to ``"OK"``
| If memory is ``>50%``, then status is set to ``"CAREFUL"``
| If memory is ``>70%``, then status is set to ``"WARNING"``
| If memory is ``>90%``, then status is set to ``"CRITICAL"``
| If used memory|swap is ``<50%``, then status is set to ``"OK"``
| If used memory|swap is ``>50%``, then status is set to ``"CAREFUL"``
| If used memory|swap is ``>70%``, then status is set to ``"WARNING"``
| If used memory|swap is ``>90%``, then status is set to ``"CRITICAL"``
*Note*: limit values can be overwritten in the configuration file under the ``[memory]`` and ``[memswap]`` sections.
*Note*: limit values can be overwritten in the configuration file under
the ``[memory]`` and/or ``[memswap]`` sections.
Network
-------
@ -342,9 +366,12 @@ Network
Glances displays the network interface bit rate. The unit is adapted
dynamically (bits per second, kbits per second, Mbits per second, etc).
Alerts are only set if the network interface maximum speed is available (see sample in the configuration file).
Alerts are only set if the maximum speed per network interface is available
(see sample in the configuration file).
*Note*: In the `[network]`` section of the configuration file, you can define a list of network interfaces to hide and per interface limits value.
*Note*: it is possibile to define a list of network interfaces to hide
and per-interface limit values in the ``[network]`` section of the
configuration file.
Disk I/O
--------
@ -353,11 +380,12 @@ Disk I/O
Glances displays the disk I/O throughput. The unit is adapted dynamically.
*Note*: There is no alert on this information.
There is no alert on this information.
*Note*: In the configuration file, you can define a list of disk to hide.
*Note*: it is possible to define a list of disks to hide under the
``[diskio]`` section in the configuration file.
File system
File System
-----------
.. image:: images/fs.png
@ -365,33 +393,35 @@ File system
Glances displays the used and total file system disk space. The unit is
adapted dynamically.
Alerts are set for used disk space:
Alerts are set for used disk space.
| If disk used is ``<50%``, then status is set to ``"OK"``
| If disk used is ``>50%``, then status is set to ``"CAREFUL"``
| If disk used is ``>70%``, then status is set to ``"WARNING"``
| If disk used is ``>90%``, then status is set to ``"CRITICAL"``
| If used disk is ``<50%``, then status is set to ``"OK"``
| If used disk is ``>50%``, then status is set to ``"CAREFUL"``
| If used disk is ``>70%``, then status is set to ``"WARNING"``
| If used disk is ``>90%``, then status is set to ``"CRITICAL"``
*Note*: limit values can be overwritten in the configuration file under ``[filesystem]`` section.
*Note*: limit values can be overwritten in the configuration file under
the ``[filesystem]`` section.
Sensors
-------
Glances can displays the sensors information trough `lm-sensors` (only available on GNU/Linux), HDDTemp and BatInfo.
Glances can displays the sensors information using `lm-sensors`,
`hddtemp` and `batinfo` [2]_.
As of lm-sensors, a filter is processed in order to display temperature only:
All of the above libraries are available only on Linux.
As of lm-sensors, a filter is being applied in order to display
temperature only.
.. image:: images/sensors.png
Glances can also grab hard disk temperature through the `hddtemp` daemon (see here [2]_ to install hddtemp on your system):
.. image:: images/hddtemp.png
There is no alert on this information.
*Note*: limit values can be overwritten in the configuration file under the ``[sensors]`` section.
*Note*: limit values can be overwritten in the configuration file under
the ``[sensors]`` section.
Processes list
Processes List
--------------
Compact view:
@ -405,25 +435,25 @@ Full view:
Three views are available for processes:
* Processes summary
* Optional monitored processes list (see bellow)
* Optional monitored processes list (see below)
* Processes list
The processes summary line display:
* Tasks number (total number of processes)
* Threads number
* Threads number
* Running tasks number
* Sleeping tasks number
* Other tasks number (not running or sleeping)
* Sort key
By default, or if you hit the ``a`` key, the processes list is automatically
sorted by:
By default, or if you hit the ``a`` key, the processes list is
automatically sorted by:
* CPU if there is no alert (default behavor)
* CPU if a CPU or LOAD alert is detected
* MEM if a memory alert is detected
* DiskIO if a CPU IOWait alert is detected
* ``CPU`` if there is no alert (default behavior)
* ``CPU`` if a CPU or LOAD alert is detected
* ``MEM`` if a memory alert is detected
* ``Disk I/O`` if a CPU iowait alert is detected
The number of processes in the list is adapted to the screen size.
@ -440,19 +470,19 @@ The number of processes in the list is adapted to the screen size.
``USER``
User ID
``NI``
Nice level of the process
Nice level of the process (niceness other than 0 is highlighted)
``S``
Process status (see details bellow) (running process is highlighted)
Process status (running process is highlighted)
``TIME+``
Cumulative CPU time used
``IOR/s``
Per process IO read rate (in Byte/s)
Per process I/O read rate (in Byte/s)
``IOW/s``
Per process IO write rate (in Byte/s)
Per process I/O write rate (in Byte/s)
``COMMAND``
Process command line (process name is highlighted)
Process Status legend:
Process status legend:
``R``
Running
@ -465,13 +495,15 @@ Process Status legend:
``Z``
Zombie
*Note*: limits values can be overwritten in the configuration file under the ``[process]`` section.
*Note*: limits values can be overwritten in the configuration file under
the ``[process]`` section.
Monitored processes list
Monitored Processes List
------------------------
The monitored processes list allows user, through the configuration file,
to group processes and quickly show if the number of running process is not good.
to group processes and quickly show if the number of running processes is
not good.
.. image:: images/monitored.png
@ -479,15 +511,19 @@ Each item is defined by:
* ``description``: description of the processes (max 16 chars).
* ``regex``: regular expression of the processes to monitor.
* ``command`` (optional): full path to shell command/script for extended stat. Should return a single line string. Use with caution.
* ``countmin`` (optional): minimal number of processes. A warning will be displayed if number of processes < count.
* ``countmax`` (optional): maximum number of processes. A warning will be displayed if number of processes > count.
* ``command`` (optional): full path to shell command/script for extended
stat. Should return a single line string. Use with caution.
* ``countmin`` (optional): minimal number of processes. A warning will
be displayed if number of processes < count.
* ``countmax`` (optional): maximum number of processes. A warning will
be displayed if number of processes > count.
Up to 10 items can be defined.
For example, if you want to monitor the Nginx processes on a Web server, the following definition should do the job:
For example, if you want to monitor the Nginx processes on a Web server,
the following definition should do the job:
.. code-block:: console
::
[monitor]
list_1_description=Nginx server
@ -496,9 +532,10 @@ For example, if you want to monitor the Nginx processes on a Web server, the fol
list_1_countmin=1
list_1_countmax=4
If you also want to monitor the PHP-FPM daemon processes, you should add another item:
If you also want to monitor the PHP-FPM daemon processes, you should add
another item:
.. code-block:: console
::
[monitor]
list_1_description=Nginx server
@ -512,7 +549,8 @@ If you also want to monitor the PHP-FPM daemon processes, you should add another
list_1_countmax=20
In client/server mode, the list is defined on the server side.
A new method, called getAllMonitored, is available in the APIs and get the JSON representation of the monitored processes list.
A new method, called `getAllMonitored`, is available in the APIs and
get the JSON representation of the monitored processes list.
Alerts are set as following:
@ -525,27 +563,23 @@ Logs
.. image:: images/logs.png
A log messages list is displayed in the bottom of the screen if (and only if):
A log messages list is displayed in the bottom of the screen if (and
only if):
- at least one ``WARNING`` or ``CRITICAL`` alert was occurred
- space is available in the bottom of the console/terminal
Each alert message displays the following information:
1. start date
2. duration if alert is terminated or ongoing if the alert is on going
1. start datetime
2. duration if alert is terminated or `ongoing` if the alert is still in
progress
3. alert name
4. {min/avg/max} values or number of running processes for monitored processes list alerts
4. {min,avg,max} values or number of running processes for monitored
processes list alerts
API documentation
=================
Glances uses a `XML-RPC server`_ and can be used by another client software.
API documentation is available at https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to
Others outputs
==============
Other Outputs
=============
It is possible to export statistics to CSV file.
@ -558,17 +592,25 @@ CSV files have two lines per stats:
- Stats description
- Stats (comma separated)
API Documentation
=================
Glances uses a `XML-RPC server`_ and can be used by another client software.
API documentation is available at
https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to.
Support
=======
To report a bug or a feature request use the bug tracking system at https://github.com/nicolargo/glances/issues
To report a bug or a feature request use the bug tracking system at
https://github.com/nicolargo/glances/issues.
Feel free to contribute!
.. [1] http://nosheep.net/story/defining-unix-load-average/
.. [2] http://www.cyberciti.biz/tips/howto-monitor-hard-drive-temperature.html
.. [3] https://github.com/nicolargo/batinfo
.. [2] https://github.com/nicolargo/batinfo
.. _psutil: https://code.google.com/p/psutil/
.. _XML-RPC server: http://docs.python.org/2/library/simplexmlrpcserver.html

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 288 KiB

After

Width:  |  Height:  |  Size: 242 KiB

View File

@ -61,12 +61,12 @@ p.topic-title {
font-weight: bold;
}
pre.code {
pre {
margin-left: 2em;
margin-right: 2em;
}
.console {
.console, .literal-block {
background-color: #eeeeee;
border: 1px solid #cccccc;
max-width: 60em;