antsysmon

This is a free and highly configurable text-based system monitor for GNU/Linux systems.  It can display any/all of system load, CPU utilization, RAM/swap utilization, and network utilization, as well as the current date/time.  You can choose whether to display text graphs with each/all of the stats you want it to display.

Screenshots

I use this program at the bottom of my desktop, so pay attention to the very bottom 14 pixels in these screenshots:

in white
in black
with other stuff
with other other stuff

The Details

This is what you get when you run antsysmon --longhelp:

Overview
--------

antsysmon, by Anthony DiSante, http://nodivisions.com/software/antsysmon/

antsysmon is a highly configurable system monitor for GNU/Linux systems.  It
is text-based, but it can display "graphs" made of text.  It can show any or
all of:
	system load average
	current utilization of CPU, RAM, swap, network (with independent TX/RX)
	current date/time

It runs forever and updates once per second.  It is designed to be used within
a terminal (probably swallowed by a window-manager module) that is sized to
only show one line of output, so that each new line seamlessly replaces the
last one, and only the values/graphs will appear to change.

There is just one mandatory argument: either --fields or --preset.  The 
--fields argument can accept any/all of:

	c CPU
	l load
	m memory (RAM)
	s swap
	t transmitted network data rate
	r received network data rate
	d date/time

So "antsysmon --fields dlm" will display the date, load, and memory usage, in
that order.  There are currently a few presets you can use:

"antsysmon --preset log" fits everything into 76 columns:

20040426-073858 CPU: 10% Load: 0.24 RAM: 76% Swap:  0% TX:   31KB RX:   93KB

"antsysmon --fields lcmstr --preset one-per-line" looks like this:

	with --show-graphs:			without --show-graphs:

	Load:[----------]   0.37		Load....0.34
	CPU :[##########]    97%		CPU.....100%
	RAM :[########--]    77%		RAM......82%
	Swap:[----------]     0%		Swap......0%
	TX  :[####------]   12KB		TX.......4KB
	RX  :[#---------]   29KB		RX.....138KB

Then there are two presets called ant-full and ant-half that fit nicely along
a single line at the bottom of my 1280x1024 screen, looking something like 
this (truncated here):

RAM: 80%   Swap: 0%    RX:[#----] 49KB    TX:[##---] 13KB    Mon Apr 26 / 07:51

If you are going to use the network TX or RX fields, you'll at least want to
set the --max-tx-value and --max-rx-value fields, so that the graphs display
something meaningful for your connection.  (They default to 400 RX and 32 TX,
for my cable connection; the values are in KB by default.)

------------------------------------------------------------------------------

Options
-------

Here is the full option list.  Remember, you need to use at least --fields or 
--preset.  If you use other options at the same time as --preset, the other 
options will take precedence.

--fields [clmsrtd]
--preset 
--show-graphs   By default, graphs are not displayed.

Field widths: the max number of chars that a given value will take up.  For
example, in "TX:[##---]  7KB" the --tx-field-width is set to 3, and the seven
is currently only using one of those 3 slots.  The other two are filled with
--spacer-char which defaults to an actual space.  (Note that the unit KB is not
part of the field width.)

--rx-field-width
--tx-field-width
--cpu-field-width
--load-field-width
--mem-field-width
--swap-field-width

--spacer-char   This is what fills any unused field width
--colon-char    This comes after the label, as in "TX:"
--blink-colons  Replace the colon with a space every-other-second

Graph widths: the number of chars in the graph, not counting the brackets.  You
can set them all at once by setting --global-graph-width instead; then you can
override individual ones if you want.

--rx-graph-width
--tx-graph-width
--cpu-graph-width
--load-graph-width
--mem-graph-width
--swap-graph-width

--graph-blank-char   Defaults to -
--graph-filled-char  Defaults to #

--spacer-size  The number of spaces between the displayed stats
--total-width  Define this if you want the output padded to a specific
               length; it's centered by default if so
--align-left   Use with --total-width if you don't want centered output
--align-right  Use with --total-width if you don't want centered output

--use-newline-for-spacer  Puts newlines instead of spaces between the stats
--align-labels            Useful with --use-newline-for-spacer to make the
                          labels ("CPU", "Swap", "RX", etc) and graphs line up
                          vertically.   Preset one-per-line includes this.

--spaces-after-foo: these all default to --spacer-size (or to a newline if
--use-newline-for-spacer is set) but can be overridden individually.  I usually
only use these if the length of my output is one or two chars shorter than I
want my --total-width to be; in that case, I just pick some random one of these
and add one or two to it.

--spaces-after-cpu
--spaces-after-load
--spaces-after-tx
--spaces-after-rx
--spaces-after-mem
--spaces-after-swap
--spaces-after-date

For the network data rate graphs to make sense, they need to know what the
maximum possible value is.  For example, my cable connection can transmit
at 32KB per second max, and receive at about 400KB per second max.  The unit
is whatever you specify for --rx-unit or --tx-unit.

--max-rx-value		Some number
--max-tx-value		Some (probably different) number
--rx-unit		KB (default), Kb, MB, Mb, B, or b  (B=bytes, b=bits)
--tx-unit		KB (default), Kb, MB, Mb, B, or b  (B=bytes, b=bits)
--net-decimal-places	Defaults to zero

--date-format     Defaults to "%a %b %d / %H:%M"   see man strftime
--load-max-value  Defaults to 8

------------------------------------------------------------------------------

Bugs
----

The terminals that I use (aterm, xterm) don't seem to let you turn off the 
displaying of the cursor.  And in order to make the output be the full width
of your screen AND on a single line, the cursor apparently needs to overlap
the last character in the line.  aterm lets me use -cr to define the color of
the cursor, and since the cursor is just a hollow rectangle when the terminal
doesn't have focus, I can just set the cursor color the same as the background
color.  The result is that a few pixels of the final character on the line get
overwritten by the edge of the cursor.  It's a very small issue and isn't even
noticable on most characters, but it's sort of annoying knowing I can't just
turn off the cursor.  Of course the workaround is to simply make the final char
in the line be a space or a period or something.

------------------------------------------------------------------------------

Contact
-------

For help, etc:
Anthony DiSante: orders@nodivisions.com
http://nodivisions.com/software/antsysmon/

Download

antsysmon is a perl script.  Download antsysmon.txt and rename it to just antsysmon with no extension.  Then you probably want to do something like this:

mv antsysmon /usr/bin/
chmod a+x /usr/bin/antsysmon

I put this into my ~/.fvwm/.fvwm2rc file to get what you see in those screenshots above:

AddToFunc StartFunction
+ I PipeRead "echo Module FvwmButtons -g $$(($[vp.width]))x14+0-0 FvwmButtonsAnt"

Style FvwmButtonsAnt     NoTitle, WindowListSkip, CirculateSkip, Sticky, BorderWidth 0
Style FvwmButtonsAnt     NoHandles, StaysOnTop, NeverFocus

Colorset 20 fg white, bg black
DestroyModuleConfig FvwmButtonsAnt: *
*FvwmButtonsAnt: Colorset 20
*FvwmButtonsAnt: Frame 0
*FvwmButtonsAnt: Padding 0 0
*FvwmButtonsAnt: Rows 1
*FvwmButtonsAnt: Columns 1
*FvwmButtonsAnt: (1x1, Frame 0, Swallow "antsysmon" `Exec aterm -fg white -bg black \
 -cr black -bw 0 -sl 0 +sb -fn 6x10 -title antsysmon -e antsysmon --preset ant-full`)

You can get my whole Fvwm config file here.