From 7cd3835eeb8d64936731b10395836be332705fb8 Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Sat, 8 Nov 2008 20:33:48 -0600
Subject: hobbit server

---
 abs/mv-core/hobbitmon/PKGBUILD                    |   84 ++
 abs/mv-core/hobbitmon/be.png                      |  Bin 0 -> 15618 bytes
 abs/mv-core/hobbitmon/clientlaunch.cfg.diff       |   12 +
 abs/mv-core/hobbitmon/diffs/clientlaunch.cfg      |   43 +
 abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.diff |   12 +
 abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.orig |   37 +
 abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg       | 1173 +++++++++++++++++++++
 abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.diff  |   42 +
 abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.orig  | 1138 ++++++++++++++++++++
 abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg      |  240 +++++
 abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.diff |   40 +
 abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.orig |  206 ++++
 abs/mv-core/hobbitmon/diffs/hobbitserver.cfg      |  226 ++++
 abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.diff |   45 +
 abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.orig |  224 ++++
 abs/mv-core/hobbitmon/hbfunc.py                   |  167 +++
 abs/mv-core/hobbitmon/hbnotes.py                  |  357 +++++++
 abs/mv-core/hobbitmon/hobbit-alerts.cfg           |  124 +++
 abs/mv-core/hobbitmon/hobbit-clients.cfg          |  427 ++++++++
 abs/mv-core/hobbitmon/hobbit-mem-myth.sh          |   52 +
 abs/mv-core/hobbitmon/hobbit-myth-orphan.sh       |   54 +
 abs/mv-core/hobbitmon/hobbit.install              |   32 +
 abs/mv-core/hobbitmon/hobbit_myth_data.py         |   91 ++
 abs/mv-core/hobbitmon/hobbit_notify.sh            |   48 +
 abs/mv-core/hobbitmon/hobbitadd.py                |   87 ++
 abs/mv-core/hobbitmon/hobbitcheck.sh              |    6 +
 abs/mv-core/hobbitmon/hobbitgraph.cfg.diff        |   42 +
 abs/mv-core/hobbitmon/hobbitlaunch.cfg.diff       |   40 +
 abs/mv-core/hobbitmon/hobbitserver.cfg.diff       |   45 +
 abs/mv-core/hobbitmon/hobbitstorage.py            |  121 +++
 abs/mv-core/hobbitmon/tuner.png                   |  Bin 0 -> 7685 bytes
 abs/mv-core/hobbitmon/tv.png                      |  Bin 0 -> 5968 bytes
 32 files changed, 5215 insertions(+)
 create mode 100755 abs/mv-core/hobbitmon/PKGBUILD
 create mode 100644 abs/mv-core/hobbitmon/be.png
 create mode 100644 abs/mv-core/hobbitmon/clientlaunch.cfg.diff
 create mode 100644 abs/mv-core/hobbitmon/diffs/clientlaunch.cfg
 create mode 100644 abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.diff
 create mode 100644 abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.orig
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.diff
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.orig
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.diff
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.orig
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitserver.cfg
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.diff
 create mode 100644 abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.orig
 create mode 100755 abs/mv-core/hobbitmon/hbfunc.py
 create mode 100755 abs/mv-core/hobbitmon/hbnotes.py
 create mode 100644 abs/mv-core/hobbitmon/hobbit-alerts.cfg
 create mode 100755 abs/mv-core/hobbitmon/hobbit-clients.cfg
 create mode 100755 abs/mv-core/hobbitmon/hobbit-mem-myth.sh
 create mode 100755 abs/mv-core/hobbitmon/hobbit-myth-orphan.sh
 create mode 100755 abs/mv-core/hobbitmon/hobbit.install
 create mode 100755 abs/mv-core/hobbitmon/hobbit_myth_data.py
 create mode 100755 abs/mv-core/hobbitmon/hobbit_notify.sh
 create mode 100755 abs/mv-core/hobbitmon/hobbitadd.py
 create mode 100755 abs/mv-core/hobbitmon/hobbitcheck.sh
 create mode 100644 abs/mv-core/hobbitmon/hobbitgraph.cfg.diff
 create mode 100644 abs/mv-core/hobbitmon/hobbitlaunch.cfg.diff
 create mode 100644 abs/mv-core/hobbitmon/hobbitserver.cfg.diff
 create mode 100755 abs/mv-core/hobbitmon/hobbitstorage.py
 create mode 100644 abs/mv-core/hobbitmon/tuner.png
 create mode 100644 abs/mv-core/hobbitmon/tv.png

diff --git a/abs/mv-core/hobbitmon/PKGBUILD b/abs/mv-core/hobbitmon/PKGBUILD
new file mode 100755
index 0000000..592392d
--- /dev/null
+++ b/abs/mv-core/hobbitmon/PKGBUILD
@@ -0,0 +1,84 @@
+pkgname=hobbitserver
+provides=hobbit
+pkgver=4.2.0
+pkgrel=98
+pkgdesc="Hobbit is a system for monitoring servers and networks. "
+license="GPL"
+arch=('i686')
+
+url="http://hobbitmon.sourceforge.net/"
+source=(http://voxel.dl.sourceforge.net/sourceforge/hobbitmon/hobbit-4.2.0.tar.gz  hobbitadd.py hobbitcheck.sh hobbitgraph.cfg.diff hobbitserver.cfg.diff hobbitlaunch.cfg.diff clientlaunch.cfg.diff hobbitstorage.py  hbnotes.py hobbit-myth-orphan.sh hobbit-clients.cfg hbfunc.py be.png tuner.png tv.png  hobbit-mem-myth.sh hobbit_notify.sh hobbit-alerts.cfg hobbit_myth_data.py)
+depends="rrdtool fping pcre python graphviz"
+install=hobbit.install
+
+build() {
+cd $startdir/src/hobbit-$pkgver
+ENABLESSL=n \
+ENABLELDAP=n \
+ENABLELDAPSSL=n \
+BBUSER=nobody \
+BBTOPDIR=/data/srv/hobbit \
+BBVAR=/data/srv/hobbit/var \
+BBHOSTURL=/hobbit \
+CGIDIR=/data/srv/httpd/htdocs/hobbit/hobbit-cgi \
+BBCGIURL=/hobbit/hobbit-cgi \
+SECURECGIDIR=/data/srv/httpd/htdocs/hobbit/hobbit-seccgi \
+SECUREBBCGIURL=/hobbit/hobbit-seccgi \
+HTTPDGID=nobody \
+BBLOGDIR=/var/log/hobbit \
+BBHOSTNAME=localhost \
+BBHOSTIP=127.0.0.1 \
+MANROOT=/usr/share/man \
+BARS=all \
+USENEWHIST=y \
+PIXELCOUNT=960 \
+INSTALLBINDIR=/data/srv/hobbit/server/bin \
+INSTALLETCDIR=/data/srv/hobbit/etc \
+INSTALLWEBDIR=/data/srv/hobbit/web \
+INSTALLEXTDIR=/data/srv/hobbit/server/ext \
+INSTALLTMPDIR=/data/srv/hobbit/tmp \
+INSTALLWWWDIR=/data/srv/httpd/htdocs/hobbit/ \
+USERFPING=/usr/sbin/fping \
+./configure
+	make PKGBUILD=1|| return 1
+	make PKGBUILD=1 INSTALLROOT=$startdir/pkg install
+
+cd $startdir/src
+cp $startdir/src/hobbitadd.py  $startdir/pkg/data/srv/hobbit/server/bin/
+install -D -m755 $startdir/src/hobbitstorage.py  $startdir/pkg/data/srv/hobbit/server/ext/hobbitstorage.py
+install -D -m755 $startdir/src/hobbit-myth-orphan.sh $startdir/pkg/data/srv/hobbit/server/ext/hobbit-myth-orphan.sh
+install -D -m755 $startdir/src/hbfunc.py $startdir/pkg/data/srv/hobbit/server/ext/hbfunc.py
+install -D -m755 $startdir/src/hbnotes.py $startdir/pkg/data/srv/hobbit/server/ext/hbnotes.py
+    install -D -m755 $startdir/src/hobbit_myth_data.py $startdir/pkg/data/srv/hobbit/server/ext/hobbit_myth_data.py
+install -D -m755 $startdir/src/hobbit-mem-myth.sh $startdir/pkg/data/srv/hobbit/server/ext/hobbit-mem-myth.sh
+install -D -m755  hobbitcheck.sh $startdir/pkg/etc/cron.tenminutes/hobbitcheck.sh
+install  -m755 hobbit-clients.cfg $startdir/pkg/data/srv/hobbit/etc/hobbit-clients.cfg
+install  -m755 hobbit-alerts.cfg $startdir/pkg/data/srv/hobbit/etc/hobbit-alerts.cfg
+install  -m755 hobbit_notify.sh $startdir/pkg/data/srv/hobbit/server/bin/hobbit_notify.sh
+
+install  -m755 $startdir/src/tv.png  $startdir/pkg/data/srv/httpd/htdocs/hobbit/gifs/tv.png
+install  -m755 $startdir/src/tuner.png  $startdir/pkg/data/srv/httpd/htdocs/hobbit/gifs/tuner.png
+install  -m755 $startdir/src/be.png  $startdir/pkg/data/srv/httpd/htdocs/hobbit/gifs/be.png
+
+
+#apply patches to conf file
+
+cd $startdir/pkg/data/srv/hobbit/etc
+patch -p0 <  $startdir/src/hobbitgraph.cfg.diff
+patch -p0 <  $startdir/src/hobbitserver.cfg.diff
+patch -p0 <  $startdir/src/hobbitlaunch.cfg.diff
+
+
+cd -
+cd $startdir/pkg/data/srv/hobbit/client/etc
+patch -p0 <  $startdir/src/clientlaunch.cfg.diff
+cd -
+
+
+
+#create client package as well
+install -D -m755 $startdir/src/hobbit-mem-myth.sh $startdir/pkg/data/srv/hobbit/client/ext/hobbit-mem-myth.sh
+cp -rp /$startdir/pkg/data/srv/hobbit/client $startdir/../hobbit-client
+
+}
+
diff --git a/abs/mv-core/hobbitmon/be.png b/abs/mv-core/hobbitmon/be.png
new file mode 100644
index 0000000..2267cab
Binary files /dev/null and b/abs/mv-core/hobbitmon/be.png differ
diff --git a/abs/mv-core/hobbitmon/clientlaunch.cfg.diff b/abs/mv-core/hobbitmon/clientlaunch.cfg.diff
new file mode 100644
index 0000000..76bb678
--- /dev/null
+++ b/abs/mv-core/hobbitmon/clientlaunch.cfg.diff
@@ -0,0 +1,12 @@
+--- clientlaunch.cfg.orig	2008-01-08 09:24:06.000000000 -0600
++++ clientlaunch.cfg	2008-01-08 10:17:26.000000000 -0600
+@@ -35,3 +35,9 @@
+ 	LOGFILE $HOBBITCLIENTHOME/logs/hobbitclient.log
+ 	INTERVAL 5m
+ 
++[memmyth]
++	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
++       CMD  /data/srv/hobbit/client/ext/hobbit-mem-myth.sh
++       LOGFILE /data/srv/hobbit/client/mythmem.log
++       INTERVAL 5m
++
diff --git a/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg b/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg
new file mode 100644
index 0000000..8457a8f
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg
@@ -0,0 +1,43 @@
+#
+# The clientlaunch.cfg file is loaded by "hobbitlaunch".
+# It controls which of the Hobbit client-side modules to run, 
+# (both the main client "hobbitclient.sh" and any client-side
+# extensions); how often, and with which parameters, options 
+# and environment variables.
+#
+# Note: On the Hobbit *server* itself, this file is normally 
+#       NOT used. Instead, both the client- and server-tasks
+#       are controlled by the hobbitlaunch.cfg file.
+#
+
+# msgcache is used for passive clients, that cannot connect
+# directly to the Hobbit server. This is not the default
+# setup, so this task is normally disabled.
+[msgcache]
+	DISABLED
+	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
+	CMD $HOBBITCLIENTHOME/bin/msgcache --no-daemon --pidfile=$HOBBITCLIENTHOME/logs/msgcache.pid
+	LOGFILE $HOBBITCLIENTHOME/logs/msgcache.log
+
+# The main client task
+[client]
+	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
+	CMD $HOBBITCLIENTHOME/bin/hobbitclient.sh 
+	LOGFILE $HOBBITCLIENTHOME/logs/hobbitclient.log
+	INTERVAL 5m
+
+# ORCA data collector. This is an experimental add-on module,
+# the data sent by this module are not processed by Hobbit 4.2.
+[orcadata]
+	DISABLED
+	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
+	CMD $HOBBITCLIENTHOME/bin/orcahobbit --orca=/usr/local/orca/orcallator
+	LOGFILE $HOBBITCLIENTHOME/logs/hobbitclient.log
+	INTERVAL 5m
+
+[memmyth]
+	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
+       CMD  /data/srv/hobbit/client/ext/hobbit-mem-myth.sh
+       LOGFILE /data/srv/hobbit/client/mythmem.log
+       INTERVAL 5m
+
diff --git a/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.diff b/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.diff
new file mode 100644
index 0000000..76bb678
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.diff
@@ -0,0 +1,12 @@
+--- clientlaunch.cfg.orig	2008-01-08 09:24:06.000000000 -0600
++++ clientlaunch.cfg	2008-01-08 10:17:26.000000000 -0600
+@@ -35,3 +35,9 @@
+ 	LOGFILE $HOBBITCLIENTHOME/logs/hobbitclient.log
+ 	INTERVAL 5m
+ 
++[memmyth]
++	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
++       CMD  /data/srv/hobbit/client/ext/hobbit-mem-myth.sh
++       LOGFILE /data/srv/hobbit/client/mythmem.log
++       INTERVAL 5m
++
diff --git a/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.orig b/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.orig
new file mode 100644
index 0000000..cfda695
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/clientlaunch.cfg.orig
@@ -0,0 +1,37 @@
+#
+# The clientlaunch.cfg file is loaded by "hobbitlaunch".
+# It controls which of the Hobbit client-side modules to run, 
+# (both the main client "hobbitclient.sh" and any client-side
+# extensions); how often, and with which parameters, options 
+# and environment variables.
+#
+# Note: On the Hobbit *server* itself, this file is normally 
+#       NOT used. Instead, both the client- and server-tasks
+#       are controlled by the hobbitlaunch.cfg file.
+#
+
+# msgcache is used for passive clients, that cannot connect
+# directly to the Hobbit server. This is not the default
+# setup, so this task is normally disabled.
+[msgcache]
+	DISABLED
+	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
+	CMD $HOBBITCLIENTHOME/bin/msgcache --no-daemon --pidfile=$HOBBITCLIENTHOME/logs/msgcache.pid
+	LOGFILE $HOBBITCLIENTHOME/logs/msgcache.log
+
+# The main client task
+[client]
+	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
+	CMD $HOBBITCLIENTHOME/bin/hobbitclient.sh 
+	LOGFILE $HOBBITCLIENTHOME/logs/hobbitclient.log
+	INTERVAL 5m
+
+# ORCA data collector. This is an experimental add-on module,
+# the data sent by this module are not processed by Hobbit 4.2.
+[orcadata]
+	DISABLED
+	ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
+	CMD $HOBBITCLIENTHOME/bin/orcahobbit --orca=/usr/local/orca/orcallator
+	LOGFILE $HOBBITCLIENTHOME/logs/hobbitclient.log
+	INTERVAL 5m
+
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg b/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg
new file mode 100644
index 0000000..c11ee6c
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg
@@ -0,0 +1,1173 @@
+# This file defines how RRD graphs are generated by the hobbitgraph CGI.
+#
+# Each section begins with a "[SERVICE]" indicator - this is the name passed
+# to hobbitgraph.cgi?host=foo&service=SERVICE
+#
+# A graph has a TITLE and a YAXIS setting - these are texts shown as the
+# title of the graph, and the YAXIS heading respectively. (The X-axis is
+# always time-based).
+#
+# If a fixed set of RRD files are used for the graph, you just write those
+# in the RRDtool definitions. 
+#
+# For graphs that use multiple RRD files as input, you specify a filename
+# pattern in the FNPATTERN statement, and optionally a pattern of files
+# to exclude from the graph with EXFNPATTERN (see "[tcp]" for an example).
+# When FNPATTERN is used, you can use "@RRDFN@" in the RRDtool definitions
+# to pick up each filename. "@RRDIDX@" is an index (starting at 0) for each
+# file in the set. "@RRDPARAM@" contains the first word extracted from the
+# pattern of files (see e.g. "[memory]" how this is used). "@COLOR@" picks
+# a new color for each graph automatically.
+#
+# The remainder of the lines in each definition are passed directly to the
+# RRDtool rrd_graph() routine.
+#
+# Most of these RRD definitions are from the larrd-grapher.cgi from LARRD 0.43c.
+
+[la]
+	TITLE CPU Load
+	YAXIS Load
+	DEF:avg=la.rrd:la:AVERAGE
+	CDEF:la=avg,100,/
+	AREA:la#00CC00:CPU Load Average
+	-u 1.0
+	GPRINT:la:LAST: \: %5.1lf (cur)
+	GPRINT:la:MAX: \: %5.1lf (max)
+	GPRINT:la:MIN: \: %5.1lf (min)
+	GPRINT:la:AVERAGE: \: %5.1lf (avg)\n
+
+[la-multi]
+	TITLE Multi-host CPU Load
+	YAXIS Load
+	FNPATTERN la.rrd
+	DEF:avg@RRDIDX@=@RRDFN@:la:AVERAGE
+	CDEF:la@RRDIDX@=avg@RRDIDX@,100,/
+	LINE2:la@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 1.0
+	GPRINT:la@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:la@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:la@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:la@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[la1]
+	TITLE CPU Utilitization
+	YAXIS % Used
+	-u 100
+	-r
+	DEF:cpu_idl=vmstat.rrd:cpu_idl:AVERAGE
+	CDEF:pbusy=100,cpu_idl,-
+	LINE2:pbusy#00CC00:% CPU busy
+	GPRINT:pbusy:LAST: \: %5.1lf (cur)
+	GPRINT:pbusy:MAX: \: %5.1lf (max)
+	GPRINT:pbusy:MIN: \: %5.1lf (min)
+	GPRINT:pbusy:AVERAGE: \: %5.1lf (avg)\n
+
+[la1-multi]
+	TITLE Multi-host CPU Utilitization
+	YAXIS % Used
+	FNPATTERN vmstat.rrd
+	-u 100
+	-r
+	DEF:cpu_idl@RRDIDX@=@RRDFN@:cpu_idl:AVERAGE
+	CDEF:pbusy@RRDIDX@=100,cpu_idl@RRDIDX@,-
+	LINE2:pbusy@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:pbusy@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:pbusy@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:pbusy@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:pbusy@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[clock]
+	TITLE Clock offset
+	YAXIS Seconds
+	DEF:offset=clock.rrd:la:AVERAGE
+	LINE2:offset#00CC00:Seconds
+	GPRINT:offset:LAST: \: %5.1lf (cur)
+	GPRINT:offset:MAX: \: %5.1lf (max)
+	GPRINT:offset:MIN: \: %5.1lf (min)
+	GPRINT:offset:AVERAGE: \: %5.1lf (avg)\n
+
+[disk]
+	FNPATTERN disk(.*).rrd
+	TITLE Disk Utilization
+	YAXIS % Full
+	DEF:p@RRDIDX@=@RRDFN@:pct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-l 0
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[disk1]
+	FNPATTERN disk(.*).rrd
+	TITLE Disk Utilization
+	YAXIS Used
+	DEF:p@RRDIDX@=@RRDFN@:used:AVERAGE
+	CDEF:p@RRDIDX@t=p@RRDIDX@,1024,*
+	LINE2:p@RRDIDX@t#@COLOR@:@RRDPARAM@
+	-l 0
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf KB (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf KB (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf KB (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf KB (avg)\n
+
+# The qtree graphs are based on the qtree report from filerstats2bb.pl
+# These handle NetApp storage devices.
+[qtree]
+	FNPATTERN qtree(.+).rrd
+	TITLE Qtree Utilization
+	YAXIS % Full
+	DEF:p@RRDIDX@=@RRDFN@:pct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-l 0
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+# The qtree graphs are based on the inode report from filerstats2bb.pl
+# These handle NetApp storage devices
+# An enhanced disk script that just runs "df -i" could probably get the
+# same data.
+[inode]
+	FNPATTERN inode(.+).rrd
+	TITLE inode Utilization
+	YAXIS % Full
+	DEF:p@RRDIDX@=@RRDFN@:pct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-l 0
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[memory]
+	FNPATTERN memory.(.+).rrd
+	TITLE Memory Utilization
+	YAXIS % Used
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-b 1024
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[ram]
+	TITLE RAM Utilization
+	YAXIS % Used
+	DEF:p=memory.real.rrd:realmempct:AVERAGE
+	LINE2:p#0000FF:% RAM used
+	-u 100
+	-b 1024
+	GPRINT:p:LAST: \: %5.1lf (cur)
+	GPRINT:p:MAX: \: %5.1lf (max)
+	GPRINT:p:MIN: \: %5.1lf (min)
+	GPRINT:p:AVERAGE: \: %5.1lf (avg)\n
+
+[ram-multi]
+	TITLE Multi-host RAM Utilization
+	FNPATTERN memory.real.rrd
+	YAXIS % Used
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-b 1024
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[swap]
+	TITLE Swap Utilization
+	YAXIS % Used
+	DEF:p=memory.swap.rrd:realmempct:AVERAGE
+	LINE2:p#0000FF:% Swap used
+	-u 100
+	-b 1024
+	GPRINT:p:LAST: \: %5.1lf (cur)
+	GPRINT:p:MAX: \: %5.1lf (max)
+	GPRINT:p:MIN: \: %5.1lf (min)
+	GPRINT:p:AVERAGE: \: %5.1lf (avg)\n
+
+[swap-multi]
+	TITLE Multi-host Swap Utilization
+	FNPATTERN memory.swap.rrd
+	YAXIS % Used
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-b 1024
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[mem]
+	TITLE Actual Memory Utilization
+	YAXIS % Used
+	DEF:p=memory.actual.rrd:realmempct:AVERAGE
+	LINE2:p#0000FF:% Actual memory used
+	-u 100
+	-b 1024
+	GPRINT:p:LAST: \: %5.1lf (cur)
+	GPRINT:p:MAX: \: %5.1lf (max)
+	GPRINT:p:MIN: \: %5.1lf (min)
+	GPRINT:p:AVERAGE: \: %5.1lf (avg)\n
+
+[mem-multi]
+	TITLE Multi-host Actual Memory Utilization
+	FNPATTERN memory.actual.rrd
+	YAXIS % Used
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-b 1024
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[users]
+	TITLE Users and Processes
+	YAXIS #
+	DEF:p=procs.rrd:la:AVERAGE
+	DEF:u=users.rrd:la:AVERAGE
+	AREA:p#00CC00:Processes
+	LINE1:u#000099:Users
+	COMMENT:\n
+	GPRINT:p:LAST:Processes   \: %5.1lf%s (cur)
+	GPRINT:p:MAX: \: %5.1lf%s (max)
+	GPRINT:p:MIN: \: %5.1lf%s (min)
+	GPRINT:p:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:u:LAST:Users       \: %5.1lf%s (cur)
+	GPRINT:u:MAX: \: %5.1lf%s (max)
+	GPRINT:u:MIN: \: %5.1lf%s (min)
+	GPRINT:u:AVERAGE: \: %5.1lf%s (avg)\n
+
+[users-multi]
+	TITLE Multi-host users
+	FNPATTERN users.rrd
+	YAXIS #
+	DEF:u@RRDIDX@=@RRDFN@:la:AVERAGE
+	LINE2:u@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:u@RRDIDX@:LAST:Users       \: %5.1lf%s (cur)
+	GPRINT:u@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:u@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:u@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[tcp]
+	# TCP tests - include all, except the HTTP tests as they tend to have
+	# much longer response times than the normal tcp tests.
+	FNPATTERN tcp.(.+).rrd
+	EXFNPATTERN tcp.http.(.+).rrd
+	TITLE TCP Connection Times
+	YAXIS Seconds
+	DEF:p@RRDIDX@=@RRDFN@:sec:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf%s (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[http]
+	FNPATTERN tcp.http.(.+).rrd
+	TITLE HTTP Response Times
+	YAXIS Seconds
+	DEF:p@RRDIDX@=@RRDFN@:sec:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf%s (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[conn-multi]
+	FNPATTERN tcp.conn.rrd
+	TITLE PING Round-trip time
+	YAXIS Seconds
+	DEF:p@RRDIDX@=@RRDFN@:sec:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf%s (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[ntpstat]
+	TITLE NTP accuracy
+	YAXIS Offset (ms)
+	DEF:u=ntpstat.rrd:offsetms:AVERAGE
+	LINE2:u#FF0000:Offset (ms)
+	COMMENT:\n
+	GPRINT:u:LAST: \: %5.2lf ms (cur)\n
+	GPRINT:u:MAX: \: %5.2lf ms (max)\n
+	GPRINT:u:MIN: \: %5.2lf ms (min)\n
+	GPRINT:u:AVERAGE: \: %5.2lf ms (avg)\n
+
+[vmstat]
+	TITLE CPU Utilization
+	YAXIS % Load
+	-u 100
+	-r
+	DEF:cpu_idl=vmstat.rrd:cpu_idl:AVERAGE
+	DEF:cpu_usr=vmstat.rrd:cpu_usr:AVERAGE
+	DEF:cpu_sys=vmstat.rrd:cpu_sys:AVERAGE
+	AREA:cpu_sys#FF0000:System
+	STACK:cpu_usr#FFFF00:User
+	STACK:cpu_idl#00FF00:Idle
+	COMMENT:\n
+	GPRINT:cpu_sys:LAST:System  \: %5.1lf (cur)
+	GPRINT:cpu_sys:MAX: \: %5.1lf (max)
+	GPRINT:cpu_sys:MIN: \: %5.1lf (min)
+	GPRINT:cpu_sys:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_usr:LAST:User    \: %5.1lf (cur)
+	GPRINT:cpu_usr:MAX: \: %5.1lf (max)
+	GPRINT:cpu_usr:MIN: \: %5.1lf (min)
+	GPRINT:cpu_usr:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_idl:LAST:Idle    \: %5.1lf (cur)
+	GPRINT:cpu_idl:MAX: \: %5.1lf (max)
+	GPRINT:cpu_idl:MIN: \: %5.1lf (min)
+	GPRINT:cpu_idl:AVERAGE: \: %5.1lf (avg)\n
+
+[vmstat1]
+	TITLE CPU Utilization
+	YAXIS % Load
+	-u 100
+	-r
+	DEF:cpu_idl=vmstat.rrd:cpu_idl:AVERAGE
+	DEF:cpu_usr=vmstat.rrd:cpu_usr:AVERAGE
+	DEF:cpu_sys=vmstat.rrd:cpu_sys:AVERAGE
+	DEF:cpu_wait=vmstat.rrd:cpu_wait:AVERAGE
+	AREA:cpu_sys#FF0000:System
+	STACK:cpu_wait#774400:I/O wait
+	STACK:cpu_usr#FFFF00:User
+	STACK:cpu_idl#00FF00:Idle
+	COMMENT:\n
+	GPRINT:cpu_sys:LAST:System  \: %5.1lf (cur)
+	GPRINT:cpu_sys:MAX: \: %5.1lf (max)
+	GPRINT:cpu_sys:MIN: \: %5.1lf (min)
+	GPRINT:cpu_sys:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_wait:LAST:I/O Wait\: %5.1lf (cur)
+	GPRINT:cpu_wait:MAX: \: %5.1lf (max)
+	GPRINT:cpu_wait:MIN: \: %5.1lf (min)
+	GPRINT:cpu_wait:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_usr:LAST:User    \: %5.1lf (cur)
+	GPRINT:cpu_usr:MAX: \: %5.1lf (max)
+	GPRINT:cpu_usr:MIN: \: %5.1lf (min)
+	GPRINT:cpu_usr:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_idl:LAST:Idle    \: %5.1lf (cur)
+	GPRINT:cpu_idl:MAX: \: %5.1lf (max)
+	GPRINT:cpu_idl:MIN: \: %5.1lf (min)
+	GPRINT:cpu_idl:AVERAGE: \: %5.1lf (avg)\n
+
+[vmstat2]
+	TITLE CPU Utilization
+	YAXIS % Load
+	-u 1.0
+	DEF:avg=la.rrd:la:AVERAGE
+	CDEF:la=avg,100,/
+	DEF:cpu_idl=vmstat.rrd:cpu_idl:AVERAGE
+	CDEF:cpu_idl2=cpu_idl,100,/
+	DEF:cpu_usr=vmstat.rrd:cpu_usr:AVERAGE
+	CDEF:cpu_usr2=cpu_usr,100,/
+	DEF:cpu_sys=vmstat.rrd:cpu_sys:AVERAGE
+	CDEF:cpu_sys2=cpu_sys,100,/
+	AREA:cpu_sys2#FF0000:System
+	STACK:cpu_usr2#FFFF00:User
+	STACK:cpu_idl2#00FF00:Idle
+	LINE1:la#000099:CPU Load Average
+	COMMENT:\n
+	GPRINT:cpu_sys2:LAST:System           \: %5.1lf (cur)
+	GPRINT:cpu_sys2:MAX: \: %5.1lf (max)
+	GPRINT:cpu_sys2:MIN: \: %5.1lf (min)
+	GPRINT:cpu_sys2:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_usr2:LAST:User             \: %5.1lf (cur)
+	GPRINT:cpu_usr2:MAX: \: %5.1lf (max)
+	GPRINT:cpu_usr2:MIN: \: %5.1lf (min)
+	GPRINT:cpu_usr2:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_idl2:LAST:Idle             \: %5.1lf (cur)
+	GPRINT:cpu_idl2:MAX: \: %5.1lf (max)
+	GPRINT:cpu_idl2:MIN: \: %5.1lf (min)
+	GPRINT:cpu_idl2:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:la:LAST:CPU Load Average \: %5.1lf (cur)
+	GPRINT:la:MAX: \: %5.1lf (max)
+	GPRINT:la:MIN: \: %5.1lf (min)
+	GPRINT:la:AVERAGE: \: %5.1lf (avg)\n
+
+[vmstat3]
+	TITLE Interrupts and Context Switches
+	YAXIS Average Events/sec
+	DEF:int=vmstat.rrd:cpu_int:AVERAGE
+	DEF:csw=vmstat.rrd:cpu_csw:AVERAGE
+	LINE2:int#0000ff:Interrupts
+	LINE2:csw#00FF00:Context Switches
+	COMMENT:\n
+	GPRINT:int:LAST:Interrupts        \: %5.1lf%s (cur)
+	GPRINT:int:MAX: \: %5.1lf%s (max)
+	GPRINT:int:MIN: \: %5.1lf%s (min)
+	GPRINT:int:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:csw:LAST:Context Switches  \: %5.1lf%s (cur)
+	GPRINT:csw:MAX: \: %5.1lf%s (max)
+	GPRINT:csw:MIN: \: %5.1lf%s (min)
+	GPRINT:csw:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat4]
+	TITLE Swap Activity
+	YAXIS Average kB/s
+	-b 1024
+	DEF:si=vmstat.rrd:mem_si:AVERAGE
+	DEF:so=vmstat.rrd:mem_so:AVERAGE
+	LINE2:si#0000ff:Memory Swapped from Disk
+	LINE2:so#00FF00:Memory Swapped to Disk
+	COMMENT:\n
+	GPRINT:si:LAST:Memory Swapped from Disk  \: %5.1lf (cur)
+	GPRINT:si:MAX: \: %5.1lf (max)
+	GPRINT:si:MIN: \: %5.1lf (min)
+	GPRINT:si:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:si:LAST:Memory Swapped to Disk    \: %5.1lf (cur)
+	GPRINT:si:MAX: \: %5.1lf (max)
+	GPRINT:si:MIN: \: %5.1lf (min)
+	GPRINT:si:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat5]
+	TITLE Block I/O
+	YAXIS Average blocks/s
+	DEF:bi=vmstat.rrd:dsk_bi:AVERAGE
+	DEF:bo=vmstat.rrd:dsk_bo:AVERAGE
+	LINE2:bi#0000FF:Blocks sent to a block device
+	LINE2:bo#00FF00:Blocks received from a block device
+	COMMENT:\n
+	GPRINT:bi:LAST:Blocks sent to a block device        \: %5.1lf (cur)
+	GPRINT:bi:MAX: \: %5.1lf (max)
+	GPRINT:bi:MIN: \: %5.1lf (min)
+	GPRINT:bi:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:bo:LAST:Blocks received from a block device  \: %5.1lf (cur)
+	GPRINT:bo:MAX: \: %5.1lf (max)
+	GPRINT:bo:MIN: \: %5.1lf (min)
+	GPRINT:bo:AVERAGE: \: %5.1lf (avg)\n
+
+[vmstat6]
+	# This graph only works on some OS'es (Solaris)
+	TITLE Memory Utilization
+	YAXIS Size kB
+	-b 1024
+	DEF:free=vmstat.rrd:mem_free:AVERAGE
+	CDEF:fr=free,1024,*
+	DEF:swap=vmstat.rrd:mem_swap:AVERAGE
+	CDEF:sw=swap,1024,*
+	LINE2:fr#0000ff:Size of the free list
+	LINE2:sw#00FF00:Swap space currently available
+	COMMENT:\n
+	GPRINT:fr:LAST:Size of the free list           \: %5.1lf%s (cur)
+	GPRINT:fr:MAX: \: %5.1lf%s (max)
+	GPRINT:fr:MIN: \: %5.1lf%s (min)
+	GPRINT:fr:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:sw:LAST:Swap space currently available  \: %5.1lf%s (cur)
+	GPRINT:sw:MAX: \: %5.1lf%s (max)
+	GPRINT:sw:MIN: \: %5.1lf%s (min)
+	GPRINT:sw:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat7]
+	# This graph only works on some OS'es (Solaris)
+	TITLE Memory Utilization
+	YAXIS Events/s
+	DEF:re=vmstat.rrd:mem_re:AVERAGE
+	DEF:mf=vmstat.rrd:mem_mf:AVERAGE
+	LINE2:re#0000ff:Page reclaims
+	LINE2:mf#00FF00:Minor faults
+	COMMENT:\n
+	GPRINT:re:LAST:Page reclaims  \: %5.1lf%s (cur)
+	GPRINT:re:MAX: \: %5.1lf%s (max)
+	GPRINT:re:MIN: \: %5.1lf%s (min)
+	GPRINT:re:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:mf:LAST:Minor faults   \: %5.1lf%s (cur)
+	GPRINT:mf:MAX: \: %5.1lf%s (max)
+	GPRINT:mf:MIN: \: %5.1lf%s (min)
+	GPRINT:mf:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat8]
+	# This graph only works on some OS'es (Solaris)
+	TITLE Paging Activity
+	YAXIS kB/s
+	-b 1024
+	DEF:pi=vmstat.rrd:mem_pi:AVERAGE
+	CDEF:rpi=pi,1024,*
+	DEF:po=vmstat.rrd:mem_po:AVERAGE
+	CDEF:rpo=po,1024,*
+	LINE2:rpi#0000ff:Paged in
+	LINE2:rpo#00FF00:Paged out
+	COMMENT:\n
+	GPRINT:pi:LAST:Page Ins   \: %5.1lf%s (cur)
+	GPRINT:pi:MAX: \: %5.1lf%s (max)
+	GPRINT:pi:MIN: \: %5.1lf%s (min)
+	GPRINT:pi:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:po:LAST:Page Outs  \: %5.1lf%s (cur)
+	GPRINT:po:MAX: \: %5.1lf%s (max)
+	GPRINT:po:MIN: \: %5.1lf%s (min)
+	GPRINT:po:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat9]
+	# This graph only works on some OS'es (Solaris)
+	TITLE RAM Scan Rate
+	YAXIS Pages scanned/s
+	DEF:sr=vmstat.rrd:sr:AVERAGE
+	AREA:sr#00CC00:Scan Rate
+	-u 20
+	GPRINT:sr:LAST: \: %5.1lf%s (cur)
+	GPRINT:sr:MAX: \: %5.1lf%s (max)
+	GPRINT:sr:MIN: \: %5.1lf%s (min)
+	GPRINT:sr:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat0]
+	# This graph only works on some OS'es (Solaris)
+	TITLE System Calls
+	YAXIS System Calls/s
+	DEF:cpu_syc=vmstat.rrd:cpu_syc:AVERAGE
+	AREA:cpu_syc#00CC00:System Calls
+	GPRINT:cpu_syc:LAST: \: %5.1lf%s (cur)
+	GPRINT:cpu_syc:MAX: \: %5.1lf%s (max)
+	GPRINT:cpu_syc:MIN: \: %5.1lf%s (min)
+	GPRINT:cpu_syc:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat]
+	TITLE TCP/IP statistics
+	YAXIS Packets/second
+	DEF:tcpInInorderPackets=netstat.rrd:tcpInInorderPackets:AVERAGE
+	DEF:tcpOutDataPackets=netstat.rrd:tcpOutDataPackets:AVERAGE
+	DEF:tcpRetransPackets=netstat.rrd:tcpRetransPackets:AVERAGE
+	LINE3:tcpInInorderPackets#00FF00:In 
+	LINE1:tcpOutDataPackets#0000FF:Out 
+	LINE2:tcpRetransPackets#FF0000:Retrans 
+	COMMENT:\n
+	GPRINT:tcpInInorderPackets:LAST:In       \: %5.1lf%s (cur)
+	GPRINT:tcpInInorderPackets:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpInInorderPackets:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpInInorderPackets:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpOutDataPackets:LAST:Out      \: %5.1lf%s (cur)
+	GPRINT:tcpOutDataPackets:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpOutDataPackets:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpOutDataPackets:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpRetransPackets:LAST:Retrans  \: %5.1lf%s (cur)
+	GPRINT:tcpRetransPackets:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpRetransPackets:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpRetransPackets:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat0]
+	TITLE TCP/IP statistics
+	YAXIS Bits/second
+	DEF:tcpInInorderBytes=netstat.rrd:tcpInInorderBytes:AVERAGE
+	DEF:tcpOutDataBytes=netstat.rrd:tcpOutDataBytes:AVERAGE
+	DEF:tcpRetransBytes=netstat.rrd:tcpRetransBytes:AVERAGE
+	CDEF:tcpInInorderBits=tcpInInorderBytes,8,*
+	CDEF:tcpOutDataBits=tcpOutDataBytes,8,*
+	CDEF:tcpRetransBits=tcpRetransBytes,8,*
+	LINE3:tcpInInorderBits#00FF00:In 
+	LINE1:tcpOutDataBits#0000FF:Out 
+	LINE2:tcpRetransBits#FF0000:Retrans 
+	COMMENT:\n
+	GPRINT:tcpInInorderBits:LAST:In       \: %5.1lf%s (cur)
+	GPRINT:tcpInInorderBits:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpInInorderBits:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpInInorderBits:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpOutDataBits:LAST:Out      \: %5.1lf%s (cur)
+	GPRINT:tcpOutDataBits:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpOutDataBits:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpOutDataBits:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpRetransBits:LAST:Retrans  \: %5.1lf%s (cur)
+	GPRINT:tcpRetransBits:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpRetransBits:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpRetransBits:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat1]
+	TITLE UDP Statistics
+	YAXIS # Datagrams
+	DEF:udpInDatagrams=netstat.rrd:udpInDatagrams:AVERAGE
+	DEF:udpOutDatagrams=netstat.rrd:udpOutDatagrams:AVERAGE
+	DEF:udpInErrors=netstat.rrd:udpInErrors:AVERAGE
+	LINE3:udpInDatagrams#00FF00:UDP In Datagrams
+	LINE1:udpOutDatagrams#0000FF:UDP Out Datagrams
+	LINE2:udpInErrors#FF0000:UDP In Errors
+	COMMENT:\n
+	GPRINT:udpInDatagrams:LAST:UDP In Datagrams       \: %5.1lf%s (cur)
+	GPRINT:udpInDatagrams:MAX: \: %5.1lf%s (max)
+	GPRINT:udpInDatagrams:MIN: \: %5.1lf%s (min)
+	GPRINT:udpInDatagrams:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:udpOutDatagrams:LAST:UDP Out Datagrams      \: %5.1lf%s (cur)
+	GPRINT:udpOutDatagrams:MAX: \: %5.1lf%s (max)
+	GPRINT:udpOutDatagrams:MIN: \: %5.1lf%s (min)
+	GPRINT:udpOutDatagrams:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:udpInErrors:LAST:UDP In Errors          \: %5.1lf%s (cur)
+	GPRINT:udpInErrors:MAX: \: %5.1lf%s (max)
+	GPRINT:udpInErrors:MIN: \: %5.1lf%s (min)
+	GPRINT:udpInErrors:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat2]
+	TITLE TCP Statistics
+	YAXIS # Events
+	DEF:tcpActiveOpens=netstat.rrd:tcpActiveOpens:AVERAGE
+	DEF:tcpPassiveOpens=netstat.rrd:tcpPassiveOpens:AVERAGE
+	DEF:tcpAttemptFails=netstat.rrd:tcpAttemptFails:AVERAGE
+	DEF:tcpEstabResets=netstat.rrd:tcpEstabResets:AVERAGE
+	LINE2:tcpActiveOpens#0000FF:TCP Active Open
+	LINE2:tcpPassiveOpens#000088:TCP Passive Open
+	LINE2:tcpAttemptFails#FF0000:TCP Attempts Fail
+	LINE2:tcpEstabResets#88FF00:TCP Established Resets
+	COMMENT:\n
+	GPRINT:tcpActiveOpens:LAST:TCP Active Opens            \: %5.1lf%s (cur)
+	GPRINT:tcpActiveOpens:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpActiveOpens:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpActiveOpens:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpPassiveOpens:LAST:TCP Passive Opens           \: %5.1lf%s (cur)
+	GPRINT:tcpPassiveOpens:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpPassiveOpens:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpPassiveOpens:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpAttemptFails:LAST:TCP Failed Attempts         \: %5.1lf%s (cur)
+	GPRINT:tcpAttemptFails:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpAttemptFails:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpAttemptFails:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpEstabResets:LAST:TCP Established Resets      \: %5.1lf%s (cur)
+	GPRINT:tcpEstabResets:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpEstabResets:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpEstabResets:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat3]
+	TITLE Established TCP Connections
+	YAXIS # Connections
+	DEF:tcpCurrEstab=netstat.rrd:tcpCurrEstab:AVERAGE
+	LINE2:tcpCurrEstab#0000FF:TCP Established Connections
+	COMMENT:\n
+	GPRINT:tcpCurrEstab:LAST:TCP Established Connections \: %5.1lf%s (cur)
+	GPRINT:tcpCurrEstab:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpCurrEstab:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpCurrEstab:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat3-multi]
+	TITLE Multi-host TCP Connections
+	YAXIS # Connections
+	FNPATTERN netstat.rrd
+	DEF:tcpCurrEstab@RRDIDX@=@RRDFN@:tcpCurrEstab:AVERAGE
+	LINE2:tcpCurrEstab@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:tcpCurrEstab@RRDIDX@:LAST:# Est. \: %5.1lf%s (cur)
+	GPRINT:tcpCurrEstab@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpCurrEstab@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpCurrEstab@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[iostat]
+	TITLE I/O Utilization
+	YAXIS Stats
+	FNPATTERN iostat.(.+).rrd
+	DEF:p@RRDIDX@B=@RRDFN@:b:AVERAGE
+	DEF:p@RRDIDX@A=@RRDFN@:asvc_t:AVERAGE
+	DEF:p@RRDIDX@W=@RRDFN@:wsvc_t:AVERAGE
+	CDEF:p@RRDIDX@t=p@RRDIDX@B,5,GT,p@RRDIDX@B,UNKN,IF
+	LINE2:p@RRDIDX@t#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:p@RRDIDX@B:LAST:B       \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@B:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@B:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@B:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:p@RRDIDX@A:LAST:asvc_t  \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@A:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@A:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@A:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:p@RRDIDX@W:LAST:wsvc_t  \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@W:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@W:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@W:AVERAGE: \: %5.1lf (avg)\n
+	COMMENT:\n
+
+[apache]
+	TITLE Apache Utilization
+	YAXIS Activity
+	DEF:TA=apache.rrd:TA:AVERAGE
+	CDEF:TA1=TA,300,*
+	DEF:TKB=apache.rrd:TKB:AVERAGE
+	CDEF:TKB1=TKB,300,*
+	LINE2:TA1#0000FF:TA (# Accesses)
+	LINE2:TKB1#FF0000:TKB (kBytes Transferred)
+	COMMENT:\n
+	GPRINT:TA1:LAST:TA    \: %5.1lf%s (cur)
+	GPRINT:TA1:MAX: \: %5.1lf%s (max)
+	GPRINT:TA1:MIN: \: %5.1lf%s (min)
+	GPRINT:TA1:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:TKB1:LAST:TKB   \: %5.1lf%s (cur)
+	GPRINT:TKB1:MAX: \: %5.1lf%s (max)
+	GPRINT:TKB1:MIN: \: %5.1lf%s (min)
+	GPRINT:TKB1:AVERAGE: \: %5.1lf%s (avg)\n
+
+[apache1]
+	TITLE Apache Workers
+	YAXIS # Worker Threads/Processes
+	#DEF:BS=apache.rrd:BS:AVERAGE
+	#DEF:IS=apache.rrd:IS:AVERAGE
+	DEF:BW=apache.rrd:BW:AVERAGE
+	DEF:IW=apache.rrd:IW:AVERAGE
+	#LINE2:BS#00CC00:BS
+	#LINE2:IS#FF00FF:IS
+	LINE2:BW#555555:BW Busy Workers
+	LINE2:IW#880000:IW Idle Workers
+	COMMENT:\n
+	GPRINT:BW:LAST:BW   \: %5.1lf%s (cur)
+	GPRINT:BW:MAX: \: %5.1lf%s (max)
+	GPRINT:BW:MIN: \: %5.1lf%s (min)
+	GPRINT:BW:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:IW:LAST:IW   \: %5.1lf%s (cur)
+	GPRINT:IW:MAX: \: %5.1lf%s (max)
+	GPRINT:IW:MIN: \: %5.1lf%s (min)
+	GPRINT:IW:AVERAGE: \: %5.1lf%s (avg)\n
+
+[apache2]
+	TITLE Apache CPU Utilization
+	YAXIS CPU Load
+	DEF:CPU=apache.rrd:CPU:AVERAGE
+	LINE2:CPU#000088:CPU
+	COMMENT:\n
+	GPRINT:CPU:LAST:CPU   \: %5.1lf (cur)
+	GPRINT:CPU:MAX: \: %5.1lf (max)
+	GPRINT:CPU:MIN: \: %5.1lf (min)
+	GPRINT:CPU:AVERAGE: \: %5.1lf (avg)\n
+
+[apache3]
+	TITLE Apache Requests/Second
+	YAXIS # Requests
+	DEF:RPS=apache.rrd:REQPERSEC:AVERAGE
+	LINE2:RPS#000088:RPS
+	COMMENT:\n
+	GPRINT:RPS:LAST:Requests per Second   \: %5.1lf (cur)
+	GPRINT:RPS:MAX: \: %5.1lf (max)
+	GPRINT:RPS:MIN: \: %5.1lf (min)
+	GPRINT:RPS:AVERAGE: \: %5.1lf (avg)\n
+
+[apache3-multi]
+	TITLE Multi-Host Apache Requests/Second
+	FNPATTERN apache.rrd
+	YAXIS # Requests / seconds
+	# --slope-mode
+	DEF:RPS@RRDIDX@=@RRDFN@:REQPERSEC:AVERAGE
+	LINE2:RPS@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:RPS@RRDIDX@:LAST:Requests per Second  \: %5.1lf (cur)
+	GPRINT:RPS@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:RPS@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:RPS@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[bea]
+	FNPATTERN bea.memory.(.+).rrd
+	TITLE BEA/Weblogic % Heap Free
+	YAXIS % Free
+	DEF:free@RRDIDX@=@RRDFN@:freeheap:AVERAGE
+	DEF:used@RRDIDX@=@RRDFN@:usedheap:AVERAGE
+	DEF:total@RRDIDX@=@RRDFN@:totalheap:AVERAGE
+	CDEF:mbfree@RRDIDX@=free@RRDIDX@,1048576,/
+	CDEF:mbused@RRDIDX@=used@RRDIDX@,1048576,/
+	CDEF:mbtotal@RRDIDX@=total@RRDIDX@,1048576,/
+	CDEF:pctfree@RRDIDX@=mbfree@RRDIDX@,100,*,mbtotal@RRDIDX@,/
+	LINE2:pctfree@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:mbused@RRDIDX@:LAST:Used \: %8.1lf MB (cur)
+	GPRINT:mbused@RRDIDX@:MAX: \: %8.1lf MB (max)
+	GPRINT:mbused@RRDIDX@:MIN: \: %8.1lf MB (min)
+	GPRINT:mbused@RRDIDX@:AVERAGE: \: %8.1lf MB (avg)\n
+	GPRINT:mbfree@RRDIDX@:LAST:Free \: %8.1lf MB (cur)
+	GPRINT:mbfree@RRDIDX@:MAX: \: %8.1lf MB (max)
+	GPRINT:mbfree@RRDIDX@:MIN: \: %8.1lf MB (min)
+	GPRINT:mbfree@RRDIDX@:AVERAGE: \: %8.1lf MB (avg)\n
+
+[bea2]
+	FNPATTERN bea.memory.(.+).rrd
+	TITLE BEA/Weblogic % Physical Memory Free
+	YAXIS % Free
+	DEF:free@RRDIDX@=@RRDFN@:freephysmem:AVERAGE
+	DEF:used@RRDIDX@=@RRDFN@:usedphysmem:AVERAGE
+	DEF:total@RRDIDX@=@RRDFN@:totalphysmem:AVERAGE
+	CDEF:mbfree@RRDIDX@=free@RRDIDX@,1048576,/
+	CDEF:mbused@RRDIDX@=used@RRDIDX@,1048576,/
+	CDEF:mbtotal@RRDIDX@=total@RRDIDX@,1048576,/
+	CDEF:pctfree@RRDIDX@=mbfree@RRDIDX@,100,*,mbtotal@RRDIDX@,/
+	LINE2:pctfree@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:mbused@RRDIDX@:LAST:Used \: %8.1lf MB (cur)
+	GPRINT:mbused@RRDIDX@:MAX: \: %8.1lf MB (max)
+	GPRINT:mbused@RRDIDX@:MIN: \: %8.1lf MB (min)
+	GPRINT:mbused@RRDIDX@:AVERAGE: \: %8.1lf MB (avg)\n
+	GPRINT:mbfree@RRDIDX@:LAST:Free \: %8.1lf MB (cur)
+	GPRINT:mbfree@RRDIDX@:MAX: \: %8.1lf MB (max)
+	GPRINT:mbfree@RRDIDX@:MIN: \: %8.1lf MB (min)
+	GPRINT:mbfree@RRDIDX@:AVERAGE: \: %8.1lf MB (avg)\n
+
+[bea3]
+	FNPATTERN bea.threads.(.+).weblogic.kernel.Default.rrd
+	TITLE BEA/Weblogic kernel.Default Idle Threads
+	YAXIS # Idle Threads
+	DEF:threads@RRDIDX@=@RRDFN@:currentidlecount:AVERAGE
+	LINE2:threads@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:threads@RRDIDX@:LAST:Free \: %4.2lf (cur)
+	GPRINT:threads@RRDIDX@:MAX: \: %4.2lf (max)
+	GPRINT:threads@RRDIDX@:MIN: \: %4.2lf (min)
+	GPRINT:threads@RRDIDX@:AVERAGE: \: %4.2lf (avg)\n
+
+[bea4]
+	FNPATTERN bea.threads.(.+).weblogic.kernel.Default.rrd
+	TITLE BEA/Weblogic kernel.Default Requests
+	YAXIS # Requests
+	DEF:reqs@RRDIDX@=@RRDFN@:totalcount:AVERAGE
+	LINE2:reqs@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:reqs@RRDIDX@:LAST:Free \: %4.2lf (cur)
+	GPRINT:reqs@RRDIDX@:MAX: \: %4.2lf (max)
+	GPRINT:reqs@RRDIDX@:MIN: \: %4.2lf (min)
+	GPRINT:reqs@RRDIDX@:AVERAGE: \: %4.2lf (avg)\n
+
+[bind]
+	TITLE BIND Utilization
+	YAXIS Stats
+	DEF:A=bind.rrd:A:AVERAGE
+	DEF:ANY=bind.rrd:ANY:AVERAGE
+	DEF:AXFR=bind.rrd:AXFR:AVERAGE
+	DEF:MX=bind.rrd:MX:AVERAGE
+	DEF:O=bind.rrd:O:AVERAGE
+	DEF:PTR=bind.rrd:PTR:AVERAGE
+	DEF:SOA=bind.rrd:SOA:AVERAGE
+	CDEF:A1=A,300,*
+	CDEF:ANY1=ANY,300,*
+	CDEF:AXFR1=AXFR,300,*
+	CDEF:MX1=MX,300,*
+	CDEF:O1=O,300,*
+	CDEF:PTR1=PTR,300,*
+	CDEF:SOA1=SOA,300,*
+	LINE2:A1#0000FF:A
+	LINE2:ANY1#FF0000:ANY
+	LINE2:AXFR1#00CC00:AXFR
+	LINE2:MX1#FF00FF:MX
+	LINE2:O1#555555:O
+	LINE2:PTR1#880000:PTR
+	LINE2:SOA1#000088:SOA
+	COMMENT:\n
+	GPRINT:A1:LAST:A     \: %5.1lf (cur) 
+	GPRINT:A1:MAX:A    \: %5.1lf (max) 
+	GPRINT:A1:MIN:A     \: %5.1lf (min) 
+	GPRINT:A1:AVERAGE:A     \: %5.1lf (avg)\n
+	GPRINT:ANY1:LAST:ANY   \: %5.1lf (cur) 
+	GPRINT:ANY1:MAX:ANY  \: %5.1lf (max) 
+	GPRINT:ANY1:MIN:ANY   \: %5.1lf (min) 
+	GPRINT:ANY1:AVERAGE:ANY   \: %5.1lf (avg)\n
+	GPRINT:AXFR1:LAST:AXFR  \: %5.1lf (cur) 
+	GPRINT:AXFR1:MAX:AXFR \: %5.1lf (max) 
+	GPRINT:AXFR1:MIN:AXFR  \: %5.1lf (min) 
+	GPRINT:AXFR1:AVERAGE:AXFR  \: %5.1lf (avg)\n
+	GPRINT:MX1:LAST:MX    \: %5.1lf (cur) 
+	GPRINT:MX1:MAX:MX   \: %5.1lf (max) 
+	GPRINT:MX1:MIN:MX    \: %5.1lf (min) 
+	GPRINT:MX1:AVERAGE:MX    \: %5.1lf (avg)\n
+	GPRINT:O1:LAST:O     \: %5.1lf (cur) 
+	GPRINT:O1:MAX:O    \: %5.1lf (max) 
+	GPRINT:O1:MIN:O     \: %5.1lf (min) 
+	GPRINT:O1:AVERAGE:O     \: %5.1lf (avg)\n
+	GPRINT:PTR1:LAST:PTR   \: %5.1lf (cur) 
+	GPRINT:PTR1:MAX:PTR  \: %5.1lf (max) 
+	GPRINT:PTR1:MIN:PTR   \: %5.1lf (min) 
+	GPRINT:PTR1:AVERAGE:PTR   \: %5.1lf (avg)\n
+	GPRINT:SOA1:LAST:SOA   \: %5.1lf (cur) 
+	GPRINT:SOA1:MAX:SOA  \: %5.1lf (max) 
+	GPRINT:SOA1:MIN:SOA   \: %5.1lf (min) 
+	GPRINT:SOA1:AVERAGE:SOA   \: %5.1lf (avg)\n
+
+[sendmail]
+	FNPATTERN sendmail.(.+).rrd
+	TITLE Sendmail Activity
+	YAXIS Messages
+	DEF:p@RRDIDX@IN=@RRDFN@:msgsfr:AVERAGE
+	DEF:p@RRDIDX@OUT=@RRDFN@:msgsto:AVERAGE
+	CDEF:p@RRDIDX@IN1=p@RRDIDX@IN,300,*
+	CDEF:p@RRDIDX@OUT1=p@RRDIDX@OUT,300,*
+	LINE1:p@RRDIDX@IN1#@COLOR@:@RRDPARAM@ IN
+	LINE2:p@RRDIDX@OUT1#@COLOR@:@RRDPARAM@ OUT
+	COMMENT:\n
+	GPRINT:p@RRDIDX@IN1:LAST:@RRDPARAM@ in   %5.1lf (cur)
+	GPRINT:p@RRDIDX@IN1:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@IN1:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@IN1:AVERAGE: \: %5.1lf (avg)
+	COMMENT:\n
+	GPRINT:p@RRDIDX@OUT1:LAST:@RRDPARAM@ out  %5.1lf (cur)
+	GPRINT:p@RRDIDX@OUT1:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@OUT1:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@OUT1:AVERAGE: \: %5.1lf (avg)\n
+	COMMENT:\n
+
+[sendmail1]
+        FNPATTERN sendmail.(.+).rrd
+        TITLE Sendmail Reject/Discards
+        YAXIS Messages
+        DEF:p@RRDIDX@IN=@RRDFN@:msgsrej:AVERAGE
+        DEF:p@RRDIDX@OUT=@RRDFN@:msgsdis:AVERAGE
+        CDEF:p@RRDIDX@IN1=p@RRDIDX@IN,300,*
+        CDEF:p@RRDIDX@OUT1=p@RRDIDX@OUT,300,*
+        LINE1:p@RRDIDX@IN1#@COLOR@:@RRDPARAM@ REJ
+        LINE2:p@RRDIDX@OUT1#@COLOR@:@RRDPARAM@ DIS
+        COMMENT:\n
+        GPRINT:p@RRDIDX@IN1:LAST:@RRDPARAM@ rej  %5.1lf (cur)
+        GPRINT:p@RRDIDX@IN1:MAX: \: %5.1lf (max)
+        GPRINT:p@RRDIDX@IN1:MIN: \: %5.1lf (min)
+        GPRINT:p@RRDIDX@IN1:AVERAGE: \: %5.1lf (avg)
+        COMMENT:\n
+        GPRINT:p@RRDIDX@OUT1:LAST:@RRDPARAM@ dis  %5.1lf (cur)
+        GPRINT:p@RRDIDX@OUT1:MAX: \: %5.1lf (max)
+        GPRINT:p@RRDIDX@OUT1:MIN: \: %5.1lf (min)
+        GPRINT:p@RRDIDX@OUT1:AVERAGE: \: %5.1lf (avg)\n
+        COMMENT:\n
+
+[mailq]
+	# This handles "mailq.rrd", "mailqin.rrd" and "mailqout.rrd"
+	FNPATTERN mailq(.+).rrd
+	TITLE Mail Queue Length
+	YAXIS Queue Length
+	DEF:mailq@RRDIDX@=@RRDFN@:mailq:AVERAGE
+	LINE2:mailq@RRDIDX@#@COLOR@:Queue Length @RRDPARAM@
+	COMMENT:\n
+	GPRINT:mailq@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:mailq@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:mailq@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:mailq@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+
+[iishealth]
+	# Based on the "IIShealth.zip" tool from deadcat
+	FNPATTERN iishealth.(.+).rrd
+	TITLE IIS Utilization
+	YAXIS #
+	# Yes, they really do call it "realmempct". Cut'n'paste programming.
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[temperature]
+	FNPATTERN temperature.(.+).rrd
+	TITLE Temperature
+	YAXIS Celsius
+	DEF:p@RRDIDX@=@RRDFN@:temperature:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+# If you want your temperature graphs in Fahrenheit,
+# comment out the [temperature] section above, and 
+# uncomment this definition.
+#
+#[temperature]
+#	FNPATTERN temperature.(.+).rrd
+#	TITLE Temperature
+#	YAXIS Fahrenheit
+#	DEF:p@RRDIDX@=@RRDFN@:temperature:AVERAGE
+#	CDEF:tempf@RRDIDX@=9,5,/,p@RRDIDX@,*,32,+
+#	LINE2:tempf@RRDIDX@#@COLOR@:@RRDPARAM@
+#	GPRINT:tempf@RRDIDX@:LAST: \: %5.1lf (cur)
+#	GPRINT:tempf@RRDIDX@:MAX: \: %5.1lf (max)
+#	GPRINT:tempf@RRDIDX@:MIN: \: %5.1lf (min)
+#	GPRINT:tempf@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[citrix]
+	TITLE Citrix Users
+	YAXIS # Users
+	DEF:u=citrix.rrd:users:AVERAGE
+	LINE2:u#FF0000:Users
+	COMMENT:\n
+	GPRINT:u:LAST: \: %5.1lf (cur)
+	GPRINT:u:MAX: \: %5.1lf (max)
+	GPRINT:u:MIN: \: %5.1lf (min)
+	GPRINT:u:AVERAGE: \: %5.1lf (avg)\n
+
+[bbgen]
+	TITLE bbgen Runtime
+	YAXIS Seconds
+	DEF:rt=bbgen.rrd:runtime:AVERAGE
+	AREA:rt#00CCCC:Run Time
+	COMMENT:\n
+	GPRINT:rt:LAST: \: %5.1lf (cur)
+	GPRINT:rt:MAX: \: %5.1lf (max)
+	GPRINT:rt:MIN: \: %5.1lf (min)
+	GPRINT:rt:AVERAGE: \: %5.1lf (avg)\n
+
+[bbtest]
+	TITLE bbtest Run Time
+	YAXIS Seconds
+	DEF:rt=bbtest.rrd:runtime:AVERAGE
+	AREA:rt#00CCCC:Run Time
+	COMMENT:\n
+	GPRINT:rt:LAST: \: %5.1lf (cur)
+	GPRINT:rt:MAX: \: %5.1lf (max)
+	GPRINT:rt:MIN: \: %5.1lf (min)
+	GPRINT:rt:AVERAGE: \: %5.1lf (avg)\n
+
+[bbproxy]
+	TITLE bbproxy Average Queue Time
+	YAXIS Seconds
+	DEF:rt=bbproxy.rrd:runtime:AVERAGE
+	LINE2:rt#00CCCC:Queue Time
+	COMMENT:\n
+	GPRINT:rt:LAST: \: %5.1lf (cur)
+	GPRINT:rt:MAX: \: %5.1lf (max)
+	GPRINT:rt:MIN: \: %5.1lf (min)
+	GPRINT:rt:AVERAGE: \: %5.1lf (avg)\n
+
+[hobbitd]
+	TITLE hobbitd Incoming Messages
+	YAXIS Messages
+	DEF:in=hobbitd.rrd:inmessages:AVERAGE
+	LINE2:in#00CCCC:Incoming messages
+	COMMENT:\n
+	GPRINT:in:LAST: \: %5.1lf (cur)
+	GPRINT:in:MAX: \: %5.1lf (max)
+	GPRINT:in:MIN: \: %5.1lf (min)
+	GPRINT:in:AVERAGE: \: %5.1lf (avg)\n
+
+[mrtg]
+	FNPATTERN mrtg.*\.(.+).rrd
+	TITLE Network Traffic (MRTG)
+	YAXIS Bits/second
+	DEF:inbytes@RRDIDX@=@RRDFN@:ds0:AVERAGE
+	CDEF:in@RRDIDX@=inbytes@RRDIDX@,8,*
+	DEF:outbytes@RRDIDX@=@RRDFN@:ds1:AVERAGE
+	CDEF:out@RRDIDX@=outbytes@RRDIDX@,8,*
+	LINE2:in@RRDIDX@#@COLOR@:@RRDPARAM@  inbound
+	GPRINT:in@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:in@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:in@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:in@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+	LINE2:out@RRDIDX@#@COLOR@:@RRDPARAM@ outbound
+	GPRINT:out@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:out@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:out@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:out@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[mysqlslow]
+	DEF:slow=mysql.rrd:Slowqueries:AVERAGE
+	TITLE MySQL Slow Queries
+	YAXIS #
+	LINE2:slow#00CCCC:Slow Queries
+	COMMENT:\n
+	GPRINT:slow:LAST: \: %5.1lf (cur)
+	GPRINT:slow:MAX: \: %5.1lf (max)
+	GPRINT:slow:MIN: \: %5.1lf (min)
+	GPRINT:slow:AVERAGE: \: %5.1lf (avg)\n
+
+[mysqlthread]
+	DEF:threads=mysql.rrd:Threads:AVERAGE
+	TITLE MySQL Active Threads
+	YAXIS #
+	AREA:threads#00CCCC:Threads
+	COMMENT:\n
+	GPRINT:threads:LAST: \: %5.1lf (cur)
+	GPRINT:threads:MAX: \: %5.1lf (max)
+	GPRINT:threads:MIN: \: %5.1lf (min)
+	GPRINT:threads:AVERAGE: \: %5.1lf (avg)\n
+
+[ifstat]
+	FNPATTERN ifstat.(.+).rrd
+	TITLE Network Traffic
+	YAXIS Bits/second
+	DEF:inbytes@RRDIDX@=@RRDFN@:bytesReceived:AVERAGE
+	CDEF:in@RRDIDX@=inbytes@RRDIDX@,8,*
+	DEF:outbytes@RRDIDX@=@RRDFN@:bytesSent:AVERAGE
+	CDEF:out@RRDIDX@=outbytes@RRDIDX@,8,*
+	LINE2:in@RRDIDX@#@COLOR@:@RRDPARAM@  inbound
+	GPRINT:in@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:in@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:in@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:in@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+	LINE2:out@RRDIDX@#@COLOR@:@RRDPARAM@ outbound
+	GPRINT:out@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:out@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:out@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:out@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[files]
+	FNPATTERN filesizes.(.+).rrd
+	TITLE File/Directory sizes
+	YAXIS KB
+	DEF:sz@RRDIDX@=@RRDFN@:size:AVERAGE
+	LINE2:sz@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:sz@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:sz@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:sz@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:sz@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[processes]
+	FNPATTERN processes.(.+).rrd
+	TITLE Process counts
+	YAXIS #
+	DEF:cnt@RRDIDX@=@RRDFN@:count:AVERAGE
+	LINE2:cnt@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:cnt@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:cnt@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:cnt@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:cnt@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[ports]
+	FNPATTERN ports.(.+).rrd
+	TITLE Network port counts
+	YAXIS #
+	DEF:cnt@RRDIDX@=@RRDFN@:count:AVERAGE
+	LINE2:cnt@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:cnt@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:cnt@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:cnt@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:cnt@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[lines]
+	FNPATTERN lines.(.+).rrd
+	TITLE Logfile linecounts
+	YAXIS #
+	DEF:cnt@RRDIDX@=@RRDFN@:count:AVERAGE
+	LINE2:cnt@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:cnt@RRDIDX@:LAST: %6.1lf (cur) \:
+	GPRINT:cnt@RRDIDX@:MAX: %6.1lf (max) \:
+	GPRINT:cnt@RRDIDX@:MIN: %6.1lf (min) \:
+	GPRINT:cnt@RRDIDX@:AVERAGE: %6.1lf (avg)\n
+
+[storage]
+	TITLE Storage Groups 
+	YAXIS  recordings
+	DEF:storage1=storage.rrd:rectvtotal:AVERAGE
+	LINE2:storage1#00CCCC:current recorded
+
+	DEF:rectime=storage.rrd:rectvtime:AVERAGE
+	LINE2:rectime#000000:current recorded time
+
+	DEF:livetime=storage.rrd:livetvtime:AVERAGE
+	LINE2:livetime#00CC11:current live  time
+
+
+[memmbe]
+	TITLE Memory usage for MythBackend
+	YAXIS mythbackend
+	DEF:vmsize=memmbe.rrd:VmSize:AVERAGE
+	LINE2:vmsize#00CCCC:vmsize
+
+	DEF:vmpeak=memmbe.rrd:VmPeak:AVERAGE
+	LINE2:vmpeak#000000:vmpeak
+
+	DEF:vmrss=memmbe.rrd:VmRSS:AVERAGE
+	LINE2:vmrss#00CC11:vmrss
+
+[memmfe]
+	TITLE Memory usage for MythFrontend
+	YAXIS mythfrontend
+	DEF:vmsize=memmfe.rrd:VmSize:AVERAGE
+	LINE2:vmsize#00CCCC:vmsize
+
+	DEF:vmpeak=memmfe.rrd:VmPeak:AVERAGE
+	LINE2:vmpeak#000000:vmpeak
+
+	DEF:vmrss=memmfe.rrd:VmRSS:AVERAGE
+	LINE2:vmrss#00CC11:vmrss
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.diff b/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.diff
new file mode 100644
index 0000000..1ca4caf
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.diff
@@ -0,0 +1,42 @@
+--- hobbitgraph.cfg.orig	2008-01-08 09:24:59.000000000 -0600
++++ hobbitgraph.cfg	2008-01-08 09:12:51.000000000 -0600
+@@ -1135,4 +1135,39 @@
+ 	GPRINT:cnt@RRDIDX@:MIN: %6.1lf (min) \:
+ 	GPRINT:cnt@RRDIDX@:AVERAGE: %6.1lf (avg)\n
+ 
++[storage]
++	TITLE Storage Groups 
++	YAXIS  recordings
++	DEF:storage1=storage.rrd:rectvtotal:AVERAGE
++	LINE2:storage1#00CCCC:current recorded
+ 
++	DEF:rectime=storage.rrd:rectvtime:AVERAGE
++	LINE2:rectime#000000:current recorded time
++
++	DEF:livetime=storage.rrd:livetvtime:AVERAGE
++	LINE2:livetime#00CC11:current live  time
++
++
++[memmbe]
++	TITLE Memory usage for MythBackend
++	YAXIS mythbackend
++	DEF:vmsize=memmbe.rrd:VmSize:AVERAGE
++	LINE2:vmsize#00CCCC:vmsize
++
++	DEF:vmpeak=memmbe.rrd:VmPeak:AVERAGE
++	LINE2:vmpeak#000000:vmpeak
++
++	DEF:vmrss=memmbe.rrd:VmRSS:AVERAGE
++	LINE2:vmrss#00CC11:vmrss
++
++[memmfe]
++	TITLE Memory usage for MythFrontend
++	YAXIS mythfrontend
++	DEF:vmsize=memmfe.rrd:VmSize:AVERAGE
++	LINE2:vmsize#00CCCC:vmsize
++
++	DEF:vmpeak=memmfe.rrd:VmPeak:AVERAGE
++	LINE2:vmpeak#000000:vmpeak
++
++	DEF:vmrss=memmfe.rrd:VmRSS:AVERAGE
++	LINE2:vmrss#00CC11:vmrss
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.orig b/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.orig
new file mode 100644
index 0000000..e60a2a5
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitgraph.cfg.orig
@@ -0,0 +1,1138 @@
+# This file defines how RRD graphs are generated by the hobbitgraph CGI.
+#
+# Each section begins with a "[SERVICE]" indicator - this is the name passed
+# to hobbitgraph.cgi?host=foo&service=SERVICE
+#
+# A graph has a TITLE and a YAXIS setting - these are texts shown as the
+# title of the graph, and the YAXIS heading respectively. (The X-axis is
+# always time-based).
+#
+# If a fixed set of RRD files are used for the graph, you just write those
+# in the RRDtool definitions. 
+#
+# For graphs that use multiple RRD files as input, you specify a filename
+# pattern in the FNPATTERN statement, and optionally a pattern of files
+# to exclude from the graph with EXFNPATTERN (see "[tcp]" for an example).
+# When FNPATTERN is used, you can use "@RRDFN@" in the RRDtool definitions
+# to pick up each filename. "@RRDIDX@" is an index (starting at 0) for each
+# file in the set. "@RRDPARAM@" contains the first word extracted from the
+# pattern of files (see e.g. "[memory]" how this is used). "@COLOR@" picks
+# a new color for each graph automatically.
+#
+# The remainder of the lines in each definition are passed directly to the
+# RRDtool rrd_graph() routine.
+#
+# Most of these RRD definitions are from the larrd-grapher.cgi from LARRD 0.43c.
+
+[la]
+	TITLE CPU Load
+	YAXIS Load
+	DEF:avg=la.rrd:la:AVERAGE
+	CDEF:la=avg,100,/
+	AREA:la#00CC00:CPU Load Average
+	-u 1.0
+	GPRINT:la:LAST: \: %5.1lf (cur)
+	GPRINT:la:MAX: \: %5.1lf (max)
+	GPRINT:la:MIN: \: %5.1lf (min)
+	GPRINT:la:AVERAGE: \: %5.1lf (avg)\n
+
+[la-multi]
+	TITLE Multi-host CPU Load
+	YAXIS Load
+	FNPATTERN la.rrd
+	DEF:avg@RRDIDX@=@RRDFN@:la:AVERAGE
+	CDEF:la@RRDIDX@=avg@RRDIDX@,100,/
+	LINE2:la@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 1.0
+	GPRINT:la@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:la@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:la@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:la@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[la1]
+	TITLE CPU Utilitization
+	YAXIS % Used
+	-u 100
+	-r
+	DEF:cpu_idl=vmstat.rrd:cpu_idl:AVERAGE
+	CDEF:pbusy=100,cpu_idl,-
+	LINE2:pbusy#00CC00:% CPU busy
+	GPRINT:pbusy:LAST: \: %5.1lf (cur)
+	GPRINT:pbusy:MAX: \: %5.1lf (max)
+	GPRINT:pbusy:MIN: \: %5.1lf (min)
+	GPRINT:pbusy:AVERAGE: \: %5.1lf (avg)\n
+
+[la1-multi]
+	TITLE Multi-host CPU Utilitization
+	YAXIS % Used
+	FNPATTERN vmstat.rrd
+	-u 100
+	-r
+	DEF:cpu_idl@RRDIDX@=@RRDFN@:cpu_idl:AVERAGE
+	CDEF:pbusy@RRDIDX@=100,cpu_idl@RRDIDX@,-
+	LINE2:pbusy@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:pbusy@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:pbusy@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:pbusy@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:pbusy@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[clock]
+	TITLE Clock offset
+	YAXIS Seconds
+	DEF:offset=clock.rrd:la:AVERAGE
+	LINE2:offset#00CC00:Seconds
+	GPRINT:offset:LAST: \: %5.1lf (cur)
+	GPRINT:offset:MAX: \: %5.1lf (max)
+	GPRINT:offset:MIN: \: %5.1lf (min)
+	GPRINT:offset:AVERAGE: \: %5.1lf (avg)\n
+
+[disk]
+	FNPATTERN disk(.*).rrd
+	TITLE Disk Utilization
+	YAXIS % Full
+	DEF:p@RRDIDX@=@RRDFN@:pct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-l 0
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[disk1]
+	FNPATTERN disk(.*).rrd
+	TITLE Disk Utilization
+	YAXIS Used
+	DEF:p@RRDIDX@=@RRDFN@:used:AVERAGE
+	CDEF:p@RRDIDX@t=p@RRDIDX@,1024,*
+	LINE2:p@RRDIDX@t#@COLOR@:@RRDPARAM@
+	-l 0
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf KB (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf KB (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf KB (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf KB (avg)\n
+
+# The qtree graphs are based on the qtree report from filerstats2bb.pl
+# These handle NetApp storage devices.
+[qtree]
+	FNPATTERN qtree(.+).rrd
+	TITLE Qtree Utilization
+	YAXIS % Full
+	DEF:p@RRDIDX@=@RRDFN@:pct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-l 0
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+# The qtree graphs are based on the inode report from filerstats2bb.pl
+# These handle NetApp storage devices
+# An enhanced disk script that just runs "df -i" could probably get the
+# same data.
+[inode]
+	FNPATTERN inode(.+).rrd
+	TITLE inode Utilization
+	YAXIS % Full
+	DEF:p@RRDIDX@=@RRDFN@:pct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-l 0
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[memory]
+	FNPATTERN memory.(.+).rrd
+	TITLE Memory Utilization
+	YAXIS % Used
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-b 1024
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[ram]
+	TITLE RAM Utilization
+	YAXIS % Used
+	DEF:p=memory.real.rrd:realmempct:AVERAGE
+	LINE2:p#0000FF:% RAM used
+	-u 100
+	-b 1024
+	GPRINT:p:LAST: \: %5.1lf (cur)
+	GPRINT:p:MAX: \: %5.1lf (max)
+	GPRINT:p:MIN: \: %5.1lf (min)
+	GPRINT:p:AVERAGE: \: %5.1lf (avg)\n
+
+[ram-multi]
+	TITLE Multi-host RAM Utilization
+	FNPATTERN memory.real.rrd
+	YAXIS % Used
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-b 1024
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[swap]
+	TITLE Swap Utilization
+	YAXIS % Used
+	DEF:p=memory.swap.rrd:realmempct:AVERAGE
+	LINE2:p#0000FF:% Swap used
+	-u 100
+	-b 1024
+	GPRINT:p:LAST: \: %5.1lf (cur)
+	GPRINT:p:MAX: \: %5.1lf (max)
+	GPRINT:p:MIN: \: %5.1lf (min)
+	GPRINT:p:AVERAGE: \: %5.1lf (avg)\n
+
+[swap-multi]
+	TITLE Multi-host Swap Utilization
+	FNPATTERN memory.swap.rrd
+	YAXIS % Used
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-b 1024
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[mem]
+	TITLE Actual Memory Utilization
+	YAXIS % Used
+	DEF:p=memory.actual.rrd:realmempct:AVERAGE
+	LINE2:p#0000FF:% Actual memory used
+	-u 100
+	-b 1024
+	GPRINT:p:LAST: \: %5.1lf (cur)
+	GPRINT:p:MAX: \: %5.1lf (max)
+	GPRINT:p:MIN: \: %5.1lf (min)
+	GPRINT:p:AVERAGE: \: %5.1lf (avg)\n
+
+[mem-multi]
+	TITLE Multi-host Actual Memory Utilization
+	FNPATTERN memory.actual.rrd
+	YAXIS % Used
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	-b 1024
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[users]
+	TITLE Users and Processes
+	YAXIS #
+	DEF:p=procs.rrd:la:AVERAGE
+	DEF:u=users.rrd:la:AVERAGE
+	AREA:p#00CC00:Processes
+	LINE1:u#000099:Users
+	COMMENT:\n
+	GPRINT:p:LAST:Processes   \: %5.1lf%s (cur)
+	GPRINT:p:MAX: \: %5.1lf%s (max)
+	GPRINT:p:MIN: \: %5.1lf%s (min)
+	GPRINT:p:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:u:LAST:Users       \: %5.1lf%s (cur)
+	GPRINT:u:MAX: \: %5.1lf%s (max)
+	GPRINT:u:MIN: \: %5.1lf%s (min)
+	GPRINT:u:AVERAGE: \: %5.1lf%s (avg)\n
+
+[users-multi]
+	TITLE Multi-host users
+	FNPATTERN users.rrd
+	YAXIS #
+	DEF:u@RRDIDX@=@RRDFN@:la:AVERAGE
+	LINE2:u@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:u@RRDIDX@:LAST:Users       \: %5.1lf%s (cur)
+	GPRINT:u@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:u@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:u@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[tcp]
+	# TCP tests - include all, except the HTTP tests as they tend to have
+	# much longer response times than the normal tcp tests.
+	FNPATTERN tcp.(.+).rrd
+	EXFNPATTERN tcp.http.(.+).rrd
+	TITLE TCP Connection Times
+	YAXIS Seconds
+	DEF:p@RRDIDX@=@RRDFN@:sec:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf%s (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[http]
+	FNPATTERN tcp.http.(.+).rrd
+	TITLE HTTP Response Times
+	YAXIS Seconds
+	DEF:p@RRDIDX@=@RRDFN@:sec:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf%s (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[conn-multi]
+	FNPATTERN tcp.conn.rrd
+	TITLE PING Round-trip time
+	YAXIS Seconds
+	DEF:p@RRDIDX@=@RRDFN@:sec:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf%s (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[ntpstat]
+	TITLE NTP accuracy
+	YAXIS Offset (ms)
+	DEF:u=ntpstat.rrd:offsetms:AVERAGE
+	LINE2:u#FF0000:Offset (ms)
+	COMMENT:\n
+	GPRINT:u:LAST: \: %5.2lf ms (cur)\n
+	GPRINT:u:MAX: \: %5.2lf ms (max)\n
+	GPRINT:u:MIN: \: %5.2lf ms (min)\n
+	GPRINT:u:AVERAGE: \: %5.2lf ms (avg)\n
+
+[vmstat]
+	TITLE CPU Utilization
+	YAXIS % Load
+	-u 100
+	-r
+	DEF:cpu_idl=vmstat.rrd:cpu_idl:AVERAGE
+	DEF:cpu_usr=vmstat.rrd:cpu_usr:AVERAGE
+	DEF:cpu_sys=vmstat.rrd:cpu_sys:AVERAGE
+	AREA:cpu_sys#FF0000:System
+	STACK:cpu_usr#FFFF00:User
+	STACK:cpu_idl#00FF00:Idle
+	COMMENT:\n
+	GPRINT:cpu_sys:LAST:System  \: %5.1lf (cur)
+	GPRINT:cpu_sys:MAX: \: %5.1lf (max)
+	GPRINT:cpu_sys:MIN: \: %5.1lf (min)
+	GPRINT:cpu_sys:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_usr:LAST:User    \: %5.1lf (cur)
+	GPRINT:cpu_usr:MAX: \: %5.1lf (max)
+	GPRINT:cpu_usr:MIN: \: %5.1lf (min)
+	GPRINT:cpu_usr:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_idl:LAST:Idle    \: %5.1lf (cur)
+	GPRINT:cpu_idl:MAX: \: %5.1lf (max)
+	GPRINT:cpu_idl:MIN: \: %5.1lf (min)
+	GPRINT:cpu_idl:AVERAGE: \: %5.1lf (avg)\n
+
+[vmstat1]
+	TITLE CPU Utilization
+	YAXIS % Load
+	-u 100
+	-r
+	DEF:cpu_idl=vmstat.rrd:cpu_idl:AVERAGE
+	DEF:cpu_usr=vmstat.rrd:cpu_usr:AVERAGE
+	DEF:cpu_sys=vmstat.rrd:cpu_sys:AVERAGE
+	DEF:cpu_wait=vmstat.rrd:cpu_wait:AVERAGE
+	AREA:cpu_sys#FF0000:System
+	STACK:cpu_wait#774400:I/O wait
+	STACK:cpu_usr#FFFF00:User
+	STACK:cpu_idl#00FF00:Idle
+	COMMENT:\n
+	GPRINT:cpu_sys:LAST:System  \: %5.1lf (cur)
+	GPRINT:cpu_sys:MAX: \: %5.1lf (max)
+	GPRINT:cpu_sys:MIN: \: %5.1lf (min)
+	GPRINT:cpu_sys:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_wait:LAST:I/O Wait\: %5.1lf (cur)
+	GPRINT:cpu_wait:MAX: \: %5.1lf (max)
+	GPRINT:cpu_wait:MIN: \: %5.1lf (min)
+	GPRINT:cpu_wait:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_usr:LAST:User    \: %5.1lf (cur)
+	GPRINT:cpu_usr:MAX: \: %5.1lf (max)
+	GPRINT:cpu_usr:MIN: \: %5.1lf (min)
+	GPRINT:cpu_usr:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_idl:LAST:Idle    \: %5.1lf (cur)
+	GPRINT:cpu_idl:MAX: \: %5.1lf (max)
+	GPRINT:cpu_idl:MIN: \: %5.1lf (min)
+	GPRINT:cpu_idl:AVERAGE: \: %5.1lf (avg)\n
+
+[vmstat2]
+	TITLE CPU Utilization
+	YAXIS % Load
+	-u 1.0
+	DEF:avg=la.rrd:la:AVERAGE
+	CDEF:la=avg,100,/
+	DEF:cpu_idl=vmstat.rrd:cpu_idl:AVERAGE
+	CDEF:cpu_idl2=cpu_idl,100,/
+	DEF:cpu_usr=vmstat.rrd:cpu_usr:AVERAGE
+	CDEF:cpu_usr2=cpu_usr,100,/
+	DEF:cpu_sys=vmstat.rrd:cpu_sys:AVERAGE
+	CDEF:cpu_sys2=cpu_sys,100,/
+	AREA:cpu_sys2#FF0000:System
+	STACK:cpu_usr2#FFFF00:User
+	STACK:cpu_idl2#00FF00:Idle
+	LINE1:la#000099:CPU Load Average
+	COMMENT:\n
+	GPRINT:cpu_sys2:LAST:System           \: %5.1lf (cur)
+	GPRINT:cpu_sys2:MAX: \: %5.1lf (max)
+	GPRINT:cpu_sys2:MIN: \: %5.1lf (min)
+	GPRINT:cpu_sys2:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_usr2:LAST:User             \: %5.1lf (cur)
+	GPRINT:cpu_usr2:MAX: \: %5.1lf (max)
+	GPRINT:cpu_usr2:MIN: \: %5.1lf (min)
+	GPRINT:cpu_usr2:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:cpu_idl2:LAST:Idle             \: %5.1lf (cur)
+	GPRINT:cpu_idl2:MAX: \: %5.1lf (max)
+	GPRINT:cpu_idl2:MIN: \: %5.1lf (min)
+	GPRINT:cpu_idl2:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:la:LAST:CPU Load Average \: %5.1lf (cur)
+	GPRINT:la:MAX: \: %5.1lf (max)
+	GPRINT:la:MIN: \: %5.1lf (min)
+	GPRINT:la:AVERAGE: \: %5.1lf (avg)\n
+
+[vmstat3]
+	TITLE Interrupts and Context Switches
+	YAXIS Average Events/sec
+	DEF:int=vmstat.rrd:cpu_int:AVERAGE
+	DEF:csw=vmstat.rrd:cpu_csw:AVERAGE
+	LINE2:int#0000ff:Interrupts
+	LINE2:csw#00FF00:Context Switches
+	COMMENT:\n
+	GPRINT:int:LAST:Interrupts        \: %5.1lf%s (cur)
+	GPRINT:int:MAX: \: %5.1lf%s (max)
+	GPRINT:int:MIN: \: %5.1lf%s (min)
+	GPRINT:int:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:csw:LAST:Context Switches  \: %5.1lf%s (cur)
+	GPRINT:csw:MAX: \: %5.1lf%s (max)
+	GPRINT:csw:MIN: \: %5.1lf%s (min)
+	GPRINT:csw:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat4]
+	TITLE Swap Activity
+	YAXIS Average kB/s
+	-b 1024
+	DEF:si=vmstat.rrd:mem_si:AVERAGE
+	DEF:so=vmstat.rrd:mem_so:AVERAGE
+	LINE2:si#0000ff:Memory Swapped from Disk
+	LINE2:so#00FF00:Memory Swapped to Disk
+	COMMENT:\n
+	GPRINT:si:LAST:Memory Swapped from Disk  \: %5.1lf (cur)
+	GPRINT:si:MAX: \: %5.1lf (max)
+	GPRINT:si:MIN: \: %5.1lf (min)
+	GPRINT:si:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:si:LAST:Memory Swapped to Disk    \: %5.1lf (cur)
+	GPRINT:si:MAX: \: %5.1lf (max)
+	GPRINT:si:MIN: \: %5.1lf (min)
+	GPRINT:si:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat5]
+	TITLE Block I/O
+	YAXIS Average blocks/s
+	DEF:bi=vmstat.rrd:dsk_bi:AVERAGE
+	DEF:bo=vmstat.rrd:dsk_bo:AVERAGE
+	LINE2:bi#0000FF:Blocks sent to a block device
+	LINE2:bo#00FF00:Blocks received from a block device
+	COMMENT:\n
+	GPRINT:bi:LAST:Blocks sent to a block device        \: %5.1lf (cur)
+	GPRINT:bi:MAX: \: %5.1lf (max)
+	GPRINT:bi:MIN: \: %5.1lf (min)
+	GPRINT:bi:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:bo:LAST:Blocks received from a block device  \: %5.1lf (cur)
+	GPRINT:bo:MAX: \: %5.1lf (max)
+	GPRINT:bo:MIN: \: %5.1lf (min)
+	GPRINT:bo:AVERAGE: \: %5.1lf (avg)\n
+
+[vmstat6]
+	# This graph only works on some OS'es (Solaris)
+	TITLE Memory Utilization
+	YAXIS Size kB
+	-b 1024
+	DEF:free=vmstat.rrd:mem_free:AVERAGE
+	CDEF:fr=free,1024,*
+	DEF:swap=vmstat.rrd:mem_swap:AVERAGE
+	CDEF:sw=swap,1024,*
+	LINE2:fr#0000ff:Size of the free list
+	LINE2:sw#00FF00:Swap space currently available
+	COMMENT:\n
+	GPRINT:fr:LAST:Size of the free list           \: %5.1lf%s (cur)
+	GPRINT:fr:MAX: \: %5.1lf%s (max)
+	GPRINT:fr:MIN: \: %5.1lf%s (min)
+	GPRINT:fr:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:sw:LAST:Swap space currently available  \: %5.1lf%s (cur)
+	GPRINT:sw:MAX: \: %5.1lf%s (max)
+	GPRINT:sw:MIN: \: %5.1lf%s (min)
+	GPRINT:sw:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat7]
+	# This graph only works on some OS'es (Solaris)
+	TITLE Memory Utilization
+	YAXIS Events/s
+	DEF:re=vmstat.rrd:mem_re:AVERAGE
+	DEF:mf=vmstat.rrd:mem_mf:AVERAGE
+	LINE2:re#0000ff:Page reclaims
+	LINE2:mf#00FF00:Minor faults
+	COMMENT:\n
+	GPRINT:re:LAST:Page reclaims  \: %5.1lf%s (cur)
+	GPRINT:re:MAX: \: %5.1lf%s (max)
+	GPRINT:re:MIN: \: %5.1lf%s (min)
+	GPRINT:re:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:mf:LAST:Minor faults   \: %5.1lf%s (cur)
+	GPRINT:mf:MAX: \: %5.1lf%s (max)
+	GPRINT:mf:MIN: \: %5.1lf%s (min)
+	GPRINT:mf:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat8]
+	# This graph only works on some OS'es (Solaris)
+	TITLE Paging Activity
+	YAXIS kB/s
+	-b 1024
+	DEF:pi=vmstat.rrd:mem_pi:AVERAGE
+	CDEF:rpi=pi,1024,*
+	DEF:po=vmstat.rrd:mem_po:AVERAGE
+	CDEF:rpo=po,1024,*
+	LINE2:rpi#0000ff:Paged in
+	LINE2:rpo#00FF00:Paged out
+	COMMENT:\n
+	GPRINT:pi:LAST:Page Ins   \: %5.1lf%s (cur)
+	GPRINT:pi:MAX: \: %5.1lf%s (max)
+	GPRINT:pi:MIN: \: %5.1lf%s (min)
+	GPRINT:pi:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:po:LAST:Page Outs  \: %5.1lf%s (cur)
+	GPRINT:po:MAX: \: %5.1lf%s (max)
+	GPRINT:po:MIN: \: %5.1lf%s (min)
+	GPRINT:po:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat9]
+	# This graph only works on some OS'es (Solaris)
+	TITLE RAM Scan Rate
+	YAXIS Pages scanned/s
+	DEF:sr=vmstat.rrd:sr:AVERAGE
+	AREA:sr#00CC00:Scan Rate
+	-u 20
+	GPRINT:sr:LAST: \: %5.1lf%s (cur)
+	GPRINT:sr:MAX: \: %5.1lf%s (max)
+	GPRINT:sr:MIN: \: %5.1lf%s (min)
+	GPRINT:sr:AVERAGE: \: %5.1lf%s (avg)\n
+
+[vmstat0]
+	# This graph only works on some OS'es (Solaris)
+	TITLE System Calls
+	YAXIS System Calls/s
+	DEF:cpu_syc=vmstat.rrd:cpu_syc:AVERAGE
+	AREA:cpu_syc#00CC00:System Calls
+	GPRINT:cpu_syc:LAST: \: %5.1lf%s (cur)
+	GPRINT:cpu_syc:MAX: \: %5.1lf%s (max)
+	GPRINT:cpu_syc:MIN: \: %5.1lf%s (min)
+	GPRINT:cpu_syc:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat]
+	TITLE TCP/IP statistics
+	YAXIS Packets/second
+	DEF:tcpInInorderPackets=netstat.rrd:tcpInInorderPackets:AVERAGE
+	DEF:tcpOutDataPackets=netstat.rrd:tcpOutDataPackets:AVERAGE
+	DEF:tcpRetransPackets=netstat.rrd:tcpRetransPackets:AVERAGE
+	LINE3:tcpInInorderPackets#00FF00:In 
+	LINE1:tcpOutDataPackets#0000FF:Out 
+	LINE2:tcpRetransPackets#FF0000:Retrans 
+	COMMENT:\n
+	GPRINT:tcpInInorderPackets:LAST:In       \: %5.1lf%s (cur)
+	GPRINT:tcpInInorderPackets:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpInInorderPackets:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpInInorderPackets:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpOutDataPackets:LAST:Out      \: %5.1lf%s (cur)
+	GPRINT:tcpOutDataPackets:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpOutDataPackets:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpOutDataPackets:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpRetransPackets:LAST:Retrans  \: %5.1lf%s (cur)
+	GPRINT:tcpRetransPackets:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpRetransPackets:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpRetransPackets:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat0]
+	TITLE TCP/IP statistics
+	YAXIS Bits/second
+	DEF:tcpInInorderBytes=netstat.rrd:tcpInInorderBytes:AVERAGE
+	DEF:tcpOutDataBytes=netstat.rrd:tcpOutDataBytes:AVERAGE
+	DEF:tcpRetransBytes=netstat.rrd:tcpRetransBytes:AVERAGE
+	CDEF:tcpInInorderBits=tcpInInorderBytes,8,*
+	CDEF:tcpOutDataBits=tcpOutDataBytes,8,*
+	CDEF:tcpRetransBits=tcpRetransBytes,8,*
+	LINE3:tcpInInorderBits#00FF00:In 
+	LINE1:tcpOutDataBits#0000FF:Out 
+	LINE2:tcpRetransBits#FF0000:Retrans 
+	COMMENT:\n
+	GPRINT:tcpInInorderBits:LAST:In       \: %5.1lf%s (cur)
+	GPRINT:tcpInInorderBits:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpInInorderBits:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpInInorderBits:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpOutDataBits:LAST:Out      \: %5.1lf%s (cur)
+	GPRINT:tcpOutDataBits:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpOutDataBits:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpOutDataBits:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpRetransBits:LAST:Retrans  \: %5.1lf%s (cur)
+	GPRINT:tcpRetransBits:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpRetransBits:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpRetransBits:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat1]
+	TITLE UDP Statistics
+	YAXIS # Datagrams
+	DEF:udpInDatagrams=netstat.rrd:udpInDatagrams:AVERAGE
+	DEF:udpOutDatagrams=netstat.rrd:udpOutDatagrams:AVERAGE
+	DEF:udpInErrors=netstat.rrd:udpInErrors:AVERAGE
+	LINE3:udpInDatagrams#00FF00:UDP In Datagrams
+	LINE1:udpOutDatagrams#0000FF:UDP Out Datagrams
+	LINE2:udpInErrors#FF0000:UDP In Errors
+	COMMENT:\n
+	GPRINT:udpInDatagrams:LAST:UDP In Datagrams       \: %5.1lf%s (cur)
+	GPRINT:udpInDatagrams:MAX: \: %5.1lf%s (max)
+	GPRINT:udpInDatagrams:MIN: \: %5.1lf%s (min)
+	GPRINT:udpInDatagrams:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:udpOutDatagrams:LAST:UDP Out Datagrams      \: %5.1lf%s (cur)
+	GPRINT:udpOutDatagrams:MAX: \: %5.1lf%s (max)
+	GPRINT:udpOutDatagrams:MIN: \: %5.1lf%s (min)
+	GPRINT:udpOutDatagrams:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:udpInErrors:LAST:UDP In Errors          \: %5.1lf%s (cur)
+	GPRINT:udpInErrors:MAX: \: %5.1lf%s (max)
+	GPRINT:udpInErrors:MIN: \: %5.1lf%s (min)
+	GPRINT:udpInErrors:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat2]
+	TITLE TCP Statistics
+	YAXIS # Events
+	DEF:tcpActiveOpens=netstat.rrd:tcpActiveOpens:AVERAGE
+	DEF:tcpPassiveOpens=netstat.rrd:tcpPassiveOpens:AVERAGE
+	DEF:tcpAttemptFails=netstat.rrd:tcpAttemptFails:AVERAGE
+	DEF:tcpEstabResets=netstat.rrd:tcpEstabResets:AVERAGE
+	LINE2:tcpActiveOpens#0000FF:TCP Active Open
+	LINE2:tcpPassiveOpens#000088:TCP Passive Open
+	LINE2:tcpAttemptFails#FF0000:TCP Attempts Fail
+	LINE2:tcpEstabResets#88FF00:TCP Established Resets
+	COMMENT:\n
+	GPRINT:tcpActiveOpens:LAST:TCP Active Opens            \: %5.1lf%s (cur)
+	GPRINT:tcpActiveOpens:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpActiveOpens:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpActiveOpens:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpPassiveOpens:LAST:TCP Passive Opens           \: %5.1lf%s (cur)
+	GPRINT:tcpPassiveOpens:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpPassiveOpens:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpPassiveOpens:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpAttemptFails:LAST:TCP Failed Attempts         \: %5.1lf%s (cur)
+	GPRINT:tcpAttemptFails:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpAttemptFails:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpAttemptFails:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:tcpEstabResets:LAST:TCP Established Resets      \: %5.1lf%s (cur)
+	GPRINT:tcpEstabResets:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpEstabResets:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpEstabResets:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat3]
+	TITLE Established TCP Connections
+	YAXIS # Connections
+	DEF:tcpCurrEstab=netstat.rrd:tcpCurrEstab:AVERAGE
+	LINE2:tcpCurrEstab#0000FF:TCP Established Connections
+	COMMENT:\n
+	GPRINT:tcpCurrEstab:LAST:TCP Established Connections \: %5.1lf%s (cur)
+	GPRINT:tcpCurrEstab:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpCurrEstab:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpCurrEstab:AVERAGE: \: %5.1lf%s (avg)\n
+
+[netstat3-multi]
+	TITLE Multi-host TCP Connections
+	YAXIS # Connections
+	FNPATTERN netstat.rrd
+	DEF:tcpCurrEstab@RRDIDX@=@RRDFN@:tcpCurrEstab:AVERAGE
+	LINE2:tcpCurrEstab@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:tcpCurrEstab@RRDIDX@:LAST:# Est. \: %5.1lf%s (cur)
+	GPRINT:tcpCurrEstab@RRDIDX@:MAX: \: %5.1lf%s (max)
+	GPRINT:tcpCurrEstab@RRDIDX@:MIN: \: %5.1lf%s (min)
+	GPRINT:tcpCurrEstab@RRDIDX@:AVERAGE: \: %5.1lf%s (avg)\n
+
+[iostat]
+	TITLE I/O Utilization
+	YAXIS Stats
+	FNPATTERN iostat.(.+).rrd
+	DEF:p@RRDIDX@B=@RRDFN@:b:AVERAGE
+	DEF:p@RRDIDX@A=@RRDFN@:asvc_t:AVERAGE
+	DEF:p@RRDIDX@W=@RRDFN@:wsvc_t:AVERAGE
+	CDEF:p@RRDIDX@t=p@RRDIDX@B,5,GT,p@RRDIDX@B,UNKN,IF
+	LINE2:p@RRDIDX@t#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:p@RRDIDX@B:LAST:B       \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@B:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@B:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@B:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:p@RRDIDX@A:LAST:asvc_t  \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@A:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@A:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@A:AVERAGE: \: %5.1lf (avg)\n
+	GPRINT:p@RRDIDX@W:LAST:wsvc_t  \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@W:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@W:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@W:AVERAGE: \: %5.1lf (avg)\n
+	COMMENT:\n
+
+[apache]
+	TITLE Apache Utilization
+	YAXIS Activity
+	DEF:TA=apache.rrd:TA:AVERAGE
+	CDEF:TA1=TA,300,*
+	DEF:TKB=apache.rrd:TKB:AVERAGE
+	CDEF:TKB1=TKB,300,*
+	LINE2:TA1#0000FF:TA (# Accesses)
+	LINE2:TKB1#FF0000:TKB (kBytes Transferred)
+	COMMENT:\n
+	GPRINT:TA1:LAST:TA    \: %5.1lf%s (cur)
+	GPRINT:TA1:MAX: \: %5.1lf%s (max)
+	GPRINT:TA1:MIN: \: %5.1lf%s (min)
+	GPRINT:TA1:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:TKB1:LAST:TKB   \: %5.1lf%s (cur)
+	GPRINT:TKB1:MAX: \: %5.1lf%s (max)
+	GPRINT:TKB1:MIN: \: %5.1lf%s (min)
+	GPRINT:TKB1:AVERAGE: \: %5.1lf%s (avg)\n
+
+[apache1]
+	TITLE Apache Workers
+	YAXIS # Worker Threads/Processes
+	#DEF:BS=apache.rrd:BS:AVERAGE
+	#DEF:IS=apache.rrd:IS:AVERAGE
+	DEF:BW=apache.rrd:BW:AVERAGE
+	DEF:IW=apache.rrd:IW:AVERAGE
+	#LINE2:BS#00CC00:BS
+	#LINE2:IS#FF00FF:IS
+	LINE2:BW#555555:BW Busy Workers
+	LINE2:IW#880000:IW Idle Workers
+	COMMENT:\n
+	GPRINT:BW:LAST:BW   \: %5.1lf%s (cur)
+	GPRINT:BW:MAX: \: %5.1lf%s (max)
+	GPRINT:BW:MIN: \: %5.1lf%s (min)
+	GPRINT:BW:AVERAGE: \: %5.1lf%s (avg)\n
+	GPRINT:IW:LAST:IW   \: %5.1lf%s (cur)
+	GPRINT:IW:MAX: \: %5.1lf%s (max)
+	GPRINT:IW:MIN: \: %5.1lf%s (min)
+	GPRINT:IW:AVERAGE: \: %5.1lf%s (avg)\n
+
+[apache2]
+	TITLE Apache CPU Utilization
+	YAXIS CPU Load
+	DEF:CPU=apache.rrd:CPU:AVERAGE
+	LINE2:CPU#000088:CPU
+	COMMENT:\n
+	GPRINT:CPU:LAST:CPU   \: %5.1lf (cur)
+	GPRINT:CPU:MAX: \: %5.1lf (max)
+	GPRINT:CPU:MIN: \: %5.1lf (min)
+	GPRINT:CPU:AVERAGE: \: %5.1lf (avg)\n
+
+[apache3]
+	TITLE Apache Requests/Second
+	YAXIS # Requests
+	DEF:RPS=apache.rrd:REQPERSEC:AVERAGE
+	LINE2:RPS#000088:RPS
+	COMMENT:\n
+	GPRINT:RPS:LAST:Requests per Second   \: %5.1lf (cur)
+	GPRINT:RPS:MAX: \: %5.1lf (max)
+	GPRINT:RPS:MIN: \: %5.1lf (min)
+	GPRINT:RPS:AVERAGE: \: %5.1lf (avg)\n
+
+[apache3-multi]
+	TITLE Multi-Host Apache Requests/Second
+	FNPATTERN apache.rrd
+	YAXIS # Requests / seconds
+	# --slope-mode
+	DEF:RPS@RRDIDX@=@RRDFN@:REQPERSEC:AVERAGE
+	LINE2:RPS@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:RPS@RRDIDX@:LAST:Requests per Second  \: %5.1lf (cur)
+	GPRINT:RPS@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:RPS@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:RPS@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[bea]
+	FNPATTERN bea.memory.(.+).rrd
+	TITLE BEA/Weblogic % Heap Free
+	YAXIS % Free
+	DEF:free@RRDIDX@=@RRDFN@:freeheap:AVERAGE
+	DEF:used@RRDIDX@=@RRDFN@:usedheap:AVERAGE
+	DEF:total@RRDIDX@=@RRDFN@:totalheap:AVERAGE
+	CDEF:mbfree@RRDIDX@=free@RRDIDX@,1048576,/
+	CDEF:mbused@RRDIDX@=used@RRDIDX@,1048576,/
+	CDEF:mbtotal@RRDIDX@=total@RRDIDX@,1048576,/
+	CDEF:pctfree@RRDIDX@=mbfree@RRDIDX@,100,*,mbtotal@RRDIDX@,/
+	LINE2:pctfree@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:mbused@RRDIDX@:LAST:Used \: %8.1lf MB (cur)
+	GPRINT:mbused@RRDIDX@:MAX: \: %8.1lf MB (max)
+	GPRINT:mbused@RRDIDX@:MIN: \: %8.1lf MB (min)
+	GPRINT:mbused@RRDIDX@:AVERAGE: \: %8.1lf MB (avg)\n
+	GPRINT:mbfree@RRDIDX@:LAST:Free \: %8.1lf MB (cur)
+	GPRINT:mbfree@RRDIDX@:MAX: \: %8.1lf MB (max)
+	GPRINT:mbfree@RRDIDX@:MIN: \: %8.1lf MB (min)
+	GPRINT:mbfree@RRDIDX@:AVERAGE: \: %8.1lf MB (avg)\n
+
+[bea2]
+	FNPATTERN bea.memory.(.+).rrd
+	TITLE BEA/Weblogic % Physical Memory Free
+	YAXIS % Free
+	DEF:free@RRDIDX@=@RRDFN@:freephysmem:AVERAGE
+	DEF:used@RRDIDX@=@RRDFN@:usedphysmem:AVERAGE
+	DEF:total@RRDIDX@=@RRDFN@:totalphysmem:AVERAGE
+	CDEF:mbfree@RRDIDX@=free@RRDIDX@,1048576,/
+	CDEF:mbused@RRDIDX@=used@RRDIDX@,1048576,/
+	CDEF:mbtotal@RRDIDX@=total@RRDIDX@,1048576,/
+	CDEF:pctfree@RRDIDX@=mbfree@RRDIDX@,100,*,mbtotal@RRDIDX@,/
+	LINE2:pctfree@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:mbused@RRDIDX@:LAST:Used \: %8.1lf MB (cur)
+	GPRINT:mbused@RRDIDX@:MAX: \: %8.1lf MB (max)
+	GPRINT:mbused@RRDIDX@:MIN: \: %8.1lf MB (min)
+	GPRINT:mbused@RRDIDX@:AVERAGE: \: %8.1lf MB (avg)\n
+	GPRINT:mbfree@RRDIDX@:LAST:Free \: %8.1lf MB (cur)
+	GPRINT:mbfree@RRDIDX@:MAX: \: %8.1lf MB (max)
+	GPRINT:mbfree@RRDIDX@:MIN: \: %8.1lf MB (min)
+	GPRINT:mbfree@RRDIDX@:AVERAGE: \: %8.1lf MB (avg)\n
+
+[bea3]
+	FNPATTERN bea.threads.(.+).weblogic.kernel.Default.rrd
+	TITLE BEA/Weblogic kernel.Default Idle Threads
+	YAXIS # Idle Threads
+	DEF:threads@RRDIDX@=@RRDFN@:currentidlecount:AVERAGE
+	LINE2:threads@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:threads@RRDIDX@:LAST:Free \: %4.2lf (cur)
+	GPRINT:threads@RRDIDX@:MAX: \: %4.2lf (max)
+	GPRINT:threads@RRDIDX@:MIN: \: %4.2lf (min)
+	GPRINT:threads@RRDIDX@:AVERAGE: \: %4.2lf (avg)\n
+
+[bea4]
+	FNPATTERN bea.threads.(.+).weblogic.kernel.Default.rrd
+	TITLE BEA/Weblogic kernel.Default Requests
+	YAXIS # Requests
+	DEF:reqs@RRDIDX@=@RRDFN@:totalcount:AVERAGE
+	LINE2:reqs@RRDIDX@#@COLOR@:@RRDPARAM@
+	COMMENT:\n
+	GPRINT:reqs@RRDIDX@:LAST:Free \: %4.2lf (cur)
+	GPRINT:reqs@RRDIDX@:MAX: \: %4.2lf (max)
+	GPRINT:reqs@RRDIDX@:MIN: \: %4.2lf (min)
+	GPRINT:reqs@RRDIDX@:AVERAGE: \: %4.2lf (avg)\n
+
+[bind]
+	TITLE BIND Utilization
+	YAXIS Stats
+	DEF:A=bind.rrd:A:AVERAGE
+	DEF:ANY=bind.rrd:ANY:AVERAGE
+	DEF:AXFR=bind.rrd:AXFR:AVERAGE
+	DEF:MX=bind.rrd:MX:AVERAGE
+	DEF:O=bind.rrd:O:AVERAGE
+	DEF:PTR=bind.rrd:PTR:AVERAGE
+	DEF:SOA=bind.rrd:SOA:AVERAGE
+	CDEF:A1=A,300,*
+	CDEF:ANY1=ANY,300,*
+	CDEF:AXFR1=AXFR,300,*
+	CDEF:MX1=MX,300,*
+	CDEF:O1=O,300,*
+	CDEF:PTR1=PTR,300,*
+	CDEF:SOA1=SOA,300,*
+	LINE2:A1#0000FF:A
+	LINE2:ANY1#FF0000:ANY
+	LINE2:AXFR1#00CC00:AXFR
+	LINE2:MX1#FF00FF:MX
+	LINE2:O1#555555:O
+	LINE2:PTR1#880000:PTR
+	LINE2:SOA1#000088:SOA
+	COMMENT:\n
+	GPRINT:A1:LAST:A     \: %5.1lf (cur) 
+	GPRINT:A1:MAX:A    \: %5.1lf (max) 
+	GPRINT:A1:MIN:A     \: %5.1lf (min) 
+	GPRINT:A1:AVERAGE:A     \: %5.1lf (avg)\n
+	GPRINT:ANY1:LAST:ANY   \: %5.1lf (cur) 
+	GPRINT:ANY1:MAX:ANY  \: %5.1lf (max) 
+	GPRINT:ANY1:MIN:ANY   \: %5.1lf (min) 
+	GPRINT:ANY1:AVERAGE:ANY   \: %5.1lf (avg)\n
+	GPRINT:AXFR1:LAST:AXFR  \: %5.1lf (cur) 
+	GPRINT:AXFR1:MAX:AXFR \: %5.1lf (max) 
+	GPRINT:AXFR1:MIN:AXFR  \: %5.1lf (min) 
+	GPRINT:AXFR1:AVERAGE:AXFR  \: %5.1lf (avg)\n
+	GPRINT:MX1:LAST:MX    \: %5.1lf (cur) 
+	GPRINT:MX1:MAX:MX   \: %5.1lf (max) 
+	GPRINT:MX1:MIN:MX    \: %5.1lf (min) 
+	GPRINT:MX1:AVERAGE:MX    \: %5.1lf (avg)\n
+	GPRINT:O1:LAST:O     \: %5.1lf (cur) 
+	GPRINT:O1:MAX:O    \: %5.1lf (max) 
+	GPRINT:O1:MIN:O     \: %5.1lf (min) 
+	GPRINT:O1:AVERAGE:O     \: %5.1lf (avg)\n
+	GPRINT:PTR1:LAST:PTR   \: %5.1lf (cur) 
+	GPRINT:PTR1:MAX:PTR  \: %5.1lf (max) 
+	GPRINT:PTR1:MIN:PTR   \: %5.1lf (min) 
+	GPRINT:PTR1:AVERAGE:PTR   \: %5.1lf (avg)\n
+	GPRINT:SOA1:LAST:SOA   \: %5.1lf (cur) 
+	GPRINT:SOA1:MAX:SOA  \: %5.1lf (max) 
+	GPRINT:SOA1:MIN:SOA   \: %5.1lf (min) 
+	GPRINT:SOA1:AVERAGE:SOA   \: %5.1lf (avg)\n
+
+[sendmail]
+	FNPATTERN sendmail.(.+).rrd
+	TITLE Sendmail Activity
+	YAXIS Messages
+	DEF:p@RRDIDX@IN=@RRDFN@:msgsfr:AVERAGE
+	DEF:p@RRDIDX@OUT=@RRDFN@:msgsto:AVERAGE
+	CDEF:p@RRDIDX@IN1=p@RRDIDX@IN,300,*
+	CDEF:p@RRDIDX@OUT1=p@RRDIDX@OUT,300,*
+	LINE1:p@RRDIDX@IN1#@COLOR@:@RRDPARAM@ IN
+	LINE2:p@RRDIDX@OUT1#@COLOR@:@RRDPARAM@ OUT
+	COMMENT:\n
+	GPRINT:p@RRDIDX@IN1:LAST:@RRDPARAM@ in   %5.1lf (cur)
+	GPRINT:p@RRDIDX@IN1:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@IN1:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@IN1:AVERAGE: \: %5.1lf (avg)
+	COMMENT:\n
+	GPRINT:p@RRDIDX@OUT1:LAST:@RRDPARAM@ out  %5.1lf (cur)
+	GPRINT:p@RRDIDX@OUT1:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@OUT1:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@OUT1:AVERAGE: \: %5.1lf (avg)\n
+	COMMENT:\n
+
+[sendmail1]
+        FNPATTERN sendmail.(.+).rrd
+        TITLE Sendmail Reject/Discards
+        YAXIS Messages
+        DEF:p@RRDIDX@IN=@RRDFN@:msgsrej:AVERAGE
+        DEF:p@RRDIDX@OUT=@RRDFN@:msgsdis:AVERAGE
+        CDEF:p@RRDIDX@IN1=p@RRDIDX@IN,300,*
+        CDEF:p@RRDIDX@OUT1=p@RRDIDX@OUT,300,*
+        LINE1:p@RRDIDX@IN1#@COLOR@:@RRDPARAM@ REJ
+        LINE2:p@RRDIDX@OUT1#@COLOR@:@RRDPARAM@ DIS
+        COMMENT:\n
+        GPRINT:p@RRDIDX@IN1:LAST:@RRDPARAM@ rej  %5.1lf (cur)
+        GPRINT:p@RRDIDX@IN1:MAX: \: %5.1lf (max)
+        GPRINT:p@RRDIDX@IN1:MIN: \: %5.1lf (min)
+        GPRINT:p@RRDIDX@IN1:AVERAGE: \: %5.1lf (avg)
+        COMMENT:\n
+        GPRINT:p@RRDIDX@OUT1:LAST:@RRDPARAM@ dis  %5.1lf (cur)
+        GPRINT:p@RRDIDX@OUT1:MAX: \: %5.1lf (max)
+        GPRINT:p@RRDIDX@OUT1:MIN: \: %5.1lf (min)
+        GPRINT:p@RRDIDX@OUT1:AVERAGE: \: %5.1lf (avg)\n
+        COMMENT:\n
+
+[mailq]
+	# This handles "mailq.rrd", "mailqin.rrd" and "mailqout.rrd"
+	FNPATTERN mailq(.+).rrd
+	TITLE Mail Queue Length
+	YAXIS Queue Length
+	DEF:mailq@RRDIDX@=@RRDFN@:mailq:AVERAGE
+	LINE2:mailq@RRDIDX@#@COLOR@:Queue Length @RRDPARAM@
+	COMMENT:\n
+	GPRINT:mailq@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:mailq@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:mailq@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:mailq@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+
+[iishealth]
+	# Based on the "IIShealth.zip" tool from deadcat
+	FNPATTERN iishealth.(.+).rrd
+	TITLE IIS Utilization
+	YAXIS #
+	# Yes, they really do call it "realmempct". Cut'n'paste programming.
+	DEF:p@RRDIDX@=@RRDFN@:realmempct:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	-u 100
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[temperature]
+	FNPATTERN temperature.(.+).rrd
+	TITLE Temperature
+	YAXIS Celsius
+	DEF:p@RRDIDX@=@RRDFN@:temperature:AVERAGE
+	LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur)
+	GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max)
+	GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min)
+	GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+# If you want your temperature graphs in Fahrenheit,
+# comment out the [temperature] section above, and 
+# uncomment this definition.
+#
+#[temperature]
+#	FNPATTERN temperature.(.+).rrd
+#	TITLE Temperature
+#	YAXIS Fahrenheit
+#	DEF:p@RRDIDX@=@RRDFN@:temperature:AVERAGE
+#	CDEF:tempf@RRDIDX@=9,5,/,p@RRDIDX@,*,32,+
+#	LINE2:tempf@RRDIDX@#@COLOR@:@RRDPARAM@
+#	GPRINT:tempf@RRDIDX@:LAST: \: %5.1lf (cur)
+#	GPRINT:tempf@RRDIDX@:MAX: \: %5.1lf (max)
+#	GPRINT:tempf@RRDIDX@:MIN: \: %5.1lf (min)
+#	GPRINT:tempf@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
+
+[citrix]
+	TITLE Citrix Users
+	YAXIS # Users
+	DEF:u=citrix.rrd:users:AVERAGE
+	LINE2:u#FF0000:Users
+	COMMENT:\n
+	GPRINT:u:LAST: \: %5.1lf (cur)
+	GPRINT:u:MAX: \: %5.1lf (max)
+	GPRINT:u:MIN: \: %5.1lf (min)
+	GPRINT:u:AVERAGE: \: %5.1lf (avg)\n
+
+[bbgen]
+	TITLE bbgen Runtime
+	YAXIS Seconds
+	DEF:rt=bbgen.rrd:runtime:AVERAGE
+	AREA:rt#00CCCC:Run Time
+	COMMENT:\n
+	GPRINT:rt:LAST: \: %5.1lf (cur)
+	GPRINT:rt:MAX: \: %5.1lf (max)
+	GPRINT:rt:MIN: \: %5.1lf (min)
+	GPRINT:rt:AVERAGE: \: %5.1lf (avg)\n
+
+[bbtest]
+	TITLE bbtest Run Time
+	YAXIS Seconds
+	DEF:rt=bbtest.rrd:runtime:AVERAGE
+	AREA:rt#00CCCC:Run Time
+	COMMENT:\n
+	GPRINT:rt:LAST: \: %5.1lf (cur)
+	GPRINT:rt:MAX: \: %5.1lf (max)
+	GPRINT:rt:MIN: \: %5.1lf (min)
+	GPRINT:rt:AVERAGE: \: %5.1lf (avg)\n
+
+[bbproxy]
+	TITLE bbproxy Average Queue Time
+	YAXIS Seconds
+	DEF:rt=bbproxy.rrd:runtime:AVERAGE
+	LINE2:rt#00CCCC:Queue Time
+	COMMENT:\n
+	GPRINT:rt:LAST: \: %5.1lf (cur)
+	GPRINT:rt:MAX: \: %5.1lf (max)
+	GPRINT:rt:MIN: \: %5.1lf (min)
+	GPRINT:rt:AVERAGE: \: %5.1lf (avg)\n
+
+[hobbitd]
+	TITLE hobbitd Incoming Messages
+	YAXIS Messages
+	DEF:in=hobbitd.rrd:inmessages:AVERAGE
+	LINE2:in#00CCCC:Incoming messages
+	COMMENT:\n
+	GPRINT:in:LAST: \: %5.1lf (cur)
+	GPRINT:in:MAX: \: %5.1lf (max)
+	GPRINT:in:MIN: \: %5.1lf (min)
+	GPRINT:in:AVERAGE: \: %5.1lf (avg)\n
+
+[mrtg]
+	FNPATTERN mrtg.*\.(.+).rrd
+	TITLE Network Traffic (MRTG)
+	YAXIS Bits/second
+	DEF:inbytes@RRDIDX@=@RRDFN@:ds0:AVERAGE
+	CDEF:in@RRDIDX@=inbytes@RRDIDX@,8,*
+	DEF:outbytes@RRDIDX@=@RRDFN@:ds1:AVERAGE
+	CDEF:out@RRDIDX@=outbytes@RRDIDX@,8,*
+	LINE2:in@RRDIDX@#@COLOR@:@RRDPARAM@  inbound
+	GPRINT:in@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:in@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:in@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:in@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+	LINE2:out@RRDIDX@#@COLOR@:@RRDPARAM@ outbound
+	GPRINT:out@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:out@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:out@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:out@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[mysqlslow]
+	DEF:slow=mysql.rrd:Slowqueries:AVERAGE
+	TITLE MySQL Slow Queries
+	YAXIS #
+	LINE2:slow#00CCCC:Slow Queries
+	COMMENT:\n
+	GPRINT:slow:LAST: \: %5.1lf (cur)
+	GPRINT:slow:MAX: \: %5.1lf (max)
+	GPRINT:slow:MIN: \: %5.1lf (min)
+	GPRINT:slow:AVERAGE: \: %5.1lf (avg)\n
+
+[mysqlthread]
+	DEF:threads=mysql.rrd:Threads:AVERAGE
+	TITLE MySQL Active Threads
+	YAXIS #
+	AREA:threads#00CCCC:Threads
+	COMMENT:\n
+	GPRINT:threads:LAST: \: %5.1lf (cur)
+	GPRINT:threads:MAX: \: %5.1lf (max)
+	GPRINT:threads:MIN: \: %5.1lf (min)
+	GPRINT:threads:AVERAGE: \: %5.1lf (avg)\n
+
+[ifstat]
+	FNPATTERN ifstat.(.+).rrd
+	TITLE Network Traffic
+	YAXIS Bits/second
+	DEF:inbytes@RRDIDX@=@RRDFN@:bytesReceived:AVERAGE
+	CDEF:in@RRDIDX@=inbytes@RRDIDX@,8,*
+	DEF:outbytes@RRDIDX@=@RRDFN@:bytesSent:AVERAGE
+	CDEF:out@RRDIDX@=outbytes@RRDIDX@,8,*
+	LINE2:in@RRDIDX@#@COLOR@:@RRDPARAM@  inbound
+	GPRINT:in@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:in@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:in@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:in@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+	LINE2:out@RRDIDX@#@COLOR@:@RRDPARAM@ outbound
+	GPRINT:out@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:out@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:out@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:out@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[files]
+	FNPATTERN filesizes.(.+).rrd
+	TITLE File/Directory sizes
+	YAXIS KB
+	DEF:sz@RRDIDX@=@RRDFN@:size:AVERAGE
+	LINE2:sz@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:sz@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:sz@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:sz@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:sz@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[processes]
+	FNPATTERN processes.(.+).rrd
+	TITLE Process counts
+	YAXIS #
+	DEF:cnt@RRDIDX@=@RRDFN@:count:AVERAGE
+	LINE2:cnt@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:cnt@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:cnt@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:cnt@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:cnt@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[ports]
+	FNPATTERN ports.(.+).rrd
+	TITLE Network port counts
+	YAXIS #
+	DEF:cnt@RRDIDX@=@RRDFN@:count:AVERAGE
+	LINE2:cnt@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:cnt@RRDIDX@:LAST: \: %10.1lf (cur)
+	GPRINT:cnt@RRDIDX@:MAX: \: %10.1lf (max)
+	GPRINT:cnt@RRDIDX@:MIN: \: %10.1lf (min)
+	GPRINT:cnt@RRDIDX@:AVERAGE: \: %10.1lf (avg)\n
+
+[lines]
+	FNPATTERN lines.(.+).rrd
+	TITLE Logfile linecounts
+	YAXIS #
+	DEF:cnt@RRDIDX@=@RRDFN@:count:AVERAGE
+	LINE2:cnt@RRDIDX@#@COLOR@:@RRDPARAM@
+	GPRINT:cnt@RRDIDX@:LAST: %6.1lf (cur) \:
+	GPRINT:cnt@RRDIDX@:MAX: %6.1lf (max) \:
+	GPRINT:cnt@RRDIDX@:MIN: %6.1lf (min) \:
+	GPRINT:cnt@RRDIDX@:AVERAGE: %6.1lf (avg)\n
+
+
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg b/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg
new file mode 100644
index 0000000..96e4681
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg
@@ -0,0 +1,240 @@
+#
+# The hobbitlaunch.cfg file is loaded by "hobbitlaunch".
+# It controls which of the Hobbit modules to run, how often, and
+# with which parameters, options and environment variables.
+#
+
+# This is the main Hobbit daemon. This must be running on at least
+# one server in your setup. If you are setting up a server to do
+# just network tests or run bbproxy, it is OK to disable this (then
+# you also need to remove the "NEEDS hobbitd" lines for the tasks
+# you want to run).
+[hobbitd]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	CMD hobbitd --pidfile=$BBSERVERLOGS/hobbitd.pid --restart=$BBTMP/hobbitd.chk --checkpoint-file=$BBTMP/hobbitd.chk --checkpoint-interval=600 --log=$BBSERVERLOGS/hobbitd.log --admin-senders=127.0.0.1,$BBSERVERIP --store-clientlogs=!msgs
+
+
+# "bbstatus" saves status-logs in text- and html-format, like the old Big Brother 
+# daemon does. Unless you are using add-ons that directly access the log-files, you 
+# will not need to run this module, and it is recommended that you keep it disabled
+# since storing the raw logs on disk can cause a significant load on your server.
+
+[bbstatus]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=status --log=$BBSERVERLOGS/status.log hobbitd_filestore --status --html
+
+
+# "bbhistory" keeps track of the status changes that happen, in a manner that is
+# compatible with the Big Brother history logs. You probably do want to run this.
+
+[bbhistory]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=stachg --log=$BBSERVERLOGS/history.log hobbitd_history
+
+
+# "hostdata" stores the Hobbit client messages on disk when some status for a host
+# changes. This lets you access a lot of data collected from a host around the time
+# when a problem occurred. However, it may use a significant amount of disk space
+# if you have lots of Hobbit clients.
+# Note: The --store-clientlogs option for the [hobbitd] provides control over
+#       which status-changes will cause a client message to be stored.
+[hostdata]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=clichg --log=$BBSERVERLOGS/hostdata.log hobbitd_hostdata
+
+
+# "bbdata" saves information sent using the BB "data" protocol, like the old Big Brother 
+# daemon does. Unless you are using add-ons that directly access the data-files, you 
+# will not need to run this module, and it is recommended that you keep it disabled
+# since storing the raw data on disk can cause a significant load on your BB server.
+# RRD graphs uses data-files, but since RRD is handled by the hobbitd_rrd module, you do
+# not need to run the "bbdata" module to get RRD graphs.
+
+[bbdata]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=data   --log=$BBSERVERLOGS/data.log hobbitd_filestore --data
+
+
+# "bbnotes" saves web note-files, that are sent using the BB "notes" protocol. This is
+# disabled by default; if you use the BB "notes" protocol, then you should enable this.
+
+[bbnotes]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=notes  --log=$BBSERVERLOGS/notes.log hobbitd_filestore --notes
+
+
+# "bbenadis" updates the files used to indicate that a host or test has been enabled or disabled.
+# Unless you are running server side scripts that look at these files, you do not need this.
+
+[bbenadis]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=enadis --log=$BBSERVERLOGS/enadis.log hobbitd_filestore --enadis
+
+
+# "bbpage" sends out alerts. Note that this module is NOT compatible with the old Big Brother
+# system - it uses a different configuration file to determine how alerts get sent. If you want
+# alerts to go out via pager, e-mail or some other means, then you must run this module.
+
+[bbpage]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=page  --log=$BBSERVERLOGS/page.log hobbitd_alert --checkpoint-file=$BBTMP/alert.chk --checkpoint-interval=600
+
+
+# "rrdstatus" updates RRD files with information that arrives as "status" messages.
+# If you want RRD graphs of your monitoring data, then you want to run this.
+
+[rrdstatus]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=status --log=$BBSERVERLOGS/rrd-status.log hobbitd_rrd --rrddir=$BBVAR/rrd
+
+# "rrddata" updates RRD files with information that arrives as "data" messages.
+# If you want RRD graphs of your monitoring BB data, then you want to run this.
+
+[rrddata]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=data   --log=$BBSERVERLOGS/rrd-data.log hobbitd_rrd --rrddir=$BBVAR/rrd
+
+# The client back-end module. You need this if you are running the Hobbit client on any system.
+[clientdata]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=client --log=$BBSERVERLOGS/clientdata.log hobbitd_client
+
+
+# "bbproxy" is the Hobbit proxy server that allows you to forward status messages
+# from a protected network to your Hobbit server. It is not enabled by default,
+# since it would conflict with the hobbitd task.
+# If you need to run this, then disabled hobbitd and the hobbitd-modules
+# above, then enable this. Make sure you enter the IP-address of your 
+# Hobbit server in the command-line, so that the proxy knows where to forward
+# status messages.
+[bbproxy]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	CMD $BBHOME/bin/bbproxy --hobbitd --bbdisplay=YOUR.HOBBIT.SERVER.IP --report=$MACHINE.bbproxy --no-daemon --pidfile=$BBSERVERLOGS/bbproxy.pid
+	LOGFILE $BBSERVERLOGS/bbproxy.log
+
+
+# "hobbitfetch" is used when you have clients that cannot connect to your Hobbit server,
+# but the Hobbit server can connect to the client. Normally the clients will initiate
+# a connection to the Hobbit server to deliver the data they collect, but this is
+# forbidden in some firewall setups. By enabling the hobbitfetch task, hosts that have
+# the "pulldata" tag in the bb-hosts file will be polled by hobbitfetch for their data.
+#
+# NOTE: On the clients you must enable the "msgcache" task, since this is what 
+#       hobbitfetch is talking to.
+[hobbitfetch]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	CMD $BBHOME/bin/hobbitfetch --server=YOUR.HOBBIT.SERVER.IP --no-daemon --pidfile=$BBSERVERLOGS/hobbitfetch.pid
+	LOGFILE $BBSERVERLOGS/hobbitfetch.log
+
+
+# "bbdisplay" runs the bbgen tool to generate the Hobbit webpages from the status information that
+# has been received. Big Brother updated the webpages once every 5 minutes. The default here is to
+# run it every minute for faster updates, but you can change it if you have a highly loaded server
+# and dont need updates that often.
+
+[bbdisplay]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	GROUP generators
+	CMD bbgen $BBGENOPTS --report
+	LOGFILE $BBSERVERLOGS/bb-display.log
+	INTERVAL 1m
+
+# bbcombotest is an extension script for the Hobbit display server. It generates
+# status messages that are combined from the status of one or more normal statuses.
+# It is controlled via the bbcombotest.cfg file.
+[bbcombotest]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD $BBHOME/bin/bbcombotest
+	LOGFILE $BBSERVERLOGS/bbcombotest.log
+	INTERVAL 5m
+
+# "bbnet" runs the bbtest-net tool to perform the network based tests - i.e. http, smtp, ssh, dns and
+# all of the various network protocols we need to test.
+
+[bbnet]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD bbtest-net --report --ping --checkresponse
+	LOGFILE $BBSERVERLOGS/bb-network.log
+	INTERVAL 5m
+
+
+# "bbretest" picks up the tests that the normal network test consider "failed", and re-does those
+# tests more often. This enables Big Brother to pick up a recovered network service faster than
+# if it were tested only by the "bbnet" task (which only runs every 5 minutes). So if you have
+# servers with very high availability guarantees, running this task will make your availability
+# reports look much better.
+
+[bbretest]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD $BBHOME/ext/bbretest-net.sh
+	LOGFILE $BBSERVERLOGS/bb-retest.log
+	INTERVAL 1m
+
+
+# "hobbitclient" runs the Hobbit client. The client is installed automatically
+# when you install a Hobbit server (presumably, you do want to monitor the 
+# Hobbit server ?), but there's no need to have two hobbitlaunch instances
+# running at the same time. So we'll just run it from here.
+# Note: If you are using another client package, you should disable this one.
+
+[hobbitclient]
+	ENVFILE /data/srv/hobbit/client/etc/hobbitclient.cfg
+	NEEDS hobbitd
+	CMD /data/srv/hobbit/client/bin/hobbitclient.sh
+	LOGFILE $BBSERVERLOGS/hobbitclient.log
+	INTERVAL 5m
+
+[storage]
+	
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	CMD /data/srv/hobbit/server/ext/hobbitstorage.py
+	LOGFILE $BBSERVERLOGS/bb-storage.log
+	INTERVAL 5m
+[notes]
+       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+       CMD /data/srv/hobbit/server/ext/hbnotes.py
+       LOGFILE $BBSERVERLOGS/bb-notes.log
+       INTERVAL 5m
+[orphan]
+       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+       CMD /data/srv/hobbit/server/ext/hobbit-myth-orphan.sh
+       LOGFILE $BBSERVERLOGS/orphan.log
+       INTERVAL 5m
+ 
+[func]
+       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+       CMD sudo /data/srv/hobbit/server/ext/hbfunc.py
+       LOGFILE $BBSERVERLOGS/hbfunc.log
+       INTERVAL 5m
+
+[memmyth]
+       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+       CMD  /data/srv/hobbit/server/ext/hobbit-mem-myth.sh
+       LOGFILE $BBSERVERLOGS/mythmem.log
+       INTERVAL 5m
+
+[mtc]
+       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+       CMD  /data/srv/hobbit/server/ext/hobbit_myth_data.py
+       LOGFILE $BBSERVERLOGS/mtc
+       INTERVAL 5m
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.diff b/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.diff
new file mode 100644
index 0000000..6239125
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.diff
@@ -0,0 +1,40 @@
+--- hobbitlaunch.cfg.orig	2008-02-10 22:30:16.000000000 +0000
++++ hobbitlaunch.cfg	2008-08-09 07:05:14.000000000 +0000
+@@ -204,3 +204,37 @@
+ 	LOGFILE $BBSERVERLOGS/hobbitclient.log
+ 	INTERVAL 5m
+ 
++[storage]
++	
++	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++	CMD /data/srv/hobbit/server/ext/hobbitstorage.py
++	LOGFILE $BBSERVERLOGS/bb-storage.log
++	INTERVAL 5m
++[notes]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD /data/srv/hobbit/server/ext/hbnotes.py
++       LOGFILE $BBSERVERLOGS/bb-notes.log
++       INTERVAL 5m
++[orphan]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD /data/srv/hobbit/server/ext/hobbit-myth-orphan.sh
++       LOGFILE $BBSERVERLOGS/orphan.log
++       INTERVAL 5m
++ 
++[func]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD sudo /data/srv/hobbit/server/ext/hbfunc.py
++       LOGFILE $BBSERVERLOGS/hbfunc.log
++       INTERVAL 5m
++
++[memmyth]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD  /data/srv/hobbit/server/ext/hobbit-mem-myth.sh
++       LOGFILE $BBSERVERLOGS/mythmem.log
++       INTERVAL 5m
++
++[mtc]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD  /data/srv/hobbit/server/ext/hobbit_myth_data.py
++       LOGFILE $BBSERVERLOGS/mtc
++       INTERVAL 5m
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.orig b/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.orig
new file mode 100644
index 0000000..93c2dd9
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitlaunch.cfg.orig
@@ -0,0 +1,206 @@
+#
+# The hobbitlaunch.cfg file is loaded by "hobbitlaunch".
+# It controls which of the Hobbit modules to run, how often, and
+# with which parameters, options and environment variables.
+#
+
+# This is the main Hobbit daemon. This must be running on at least
+# one server in your setup. If you are setting up a server to do
+# just network tests or run bbproxy, it is OK to disable this (then
+# you also need to remove the "NEEDS hobbitd" lines for the tasks
+# you want to run).
+[hobbitd]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	CMD hobbitd --pidfile=$BBSERVERLOGS/hobbitd.pid --restart=$BBTMP/hobbitd.chk --checkpoint-file=$BBTMP/hobbitd.chk --checkpoint-interval=600 --log=$BBSERVERLOGS/hobbitd.log --admin-senders=127.0.0.1,$BBSERVERIP --store-clientlogs=!msgs
+
+
+# "bbstatus" saves status-logs in text- and html-format, like the old Big Brother 
+# daemon does. Unless you are using add-ons that directly access the log-files, you 
+# will not need to run this module, and it is recommended that you keep it disabled
+# since storing the raw logs on disk can cause a significant load on your server.
+
+[bbstatus]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=status --log=$BBSERVERLOGS/status.log hobbitd_filestore --status --html
+
+
+# "bbhistory" keeps track of the status changes that happen, in a manner that is
+# compatible with the Big Brother history logs. You probably do want to run this.
+
+[bbhistory]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=stachg --log=$BBSERVERLOGS/history.log hobbitd_history
+
+
+# "hostdata" stores the Hobbit client messages on disk when some status for a host
+# changes. This lets you access a lot of data collected from a host around the time
+# when a problem occurred. However, it may use a significant amount of disk space
+# if you have lots of Hobbit clients.
+# Note: The --store-clientlogs option for the [hobbitd] provides control over
+#       which status-changes will cause a client message to be stored.
+[hostdata]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=clichg --log=$BBSERVERLOGS/hostdata.log hobbitd_hostdata
+
+
+# "bbdata" saves information sent using the BB "data" protocol, like the old Big Brother 
+# daemon does. Unless you are using add-ons that directly access the data-files, you 
+# will not need to run this module, and it is recommended that you keep it disabled
+# since storing the raw data on disk can cause a significant load on your BB server.
+# RRD graphs uses data-files, but since RRD is handled by the hobbitd_rrd module, you do
+# not need to run the "bbdata" module to get RRD graphs.
+
+[bbdata]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=data   --log=$BBSERVERLOGS/data.log hobbitd_filestore --data
+
+
+# "bbnotes" saves web note-files, that are sent using the BB "notes" protocol. This is
+# disabled by default; if you use the BB "notes" protocol, then you should enable this.
+
+[bbnotes]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=notes  --log=$BBSERVERLOGS/notes.log hobbitd_filestore --notes
+
+
+# "bbenadis" updates the files used to indicate that a host or test has been enabled or disabled.
+# Unless you are running server side scripts that look at these files, you do not need this.
+
+[bbenadis]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=enadis --log=$BBSERVERLOGS/enadis.log hobbitd_filestore --enadis
+
+
+# "bbpage" sends out alerts. Note that this module is NOT compatible with the old Big Brother
+# system - it uses a different configuration file to determine how alerts get sent. If you want
+# alerts to go out via pager, e-mail or some other means, then you must run this module.
+
+[bbpage]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=page  --log=$BBSERVERLOGS/page.log hobbitd_alert --checkpoint-file=$BBTMP/alert.chk --checkpoint-interval=600
+
+
+# "rrdstatus" updates RRD files with information that arrives as "status" messages.
+# If you want RRD graphs of your monitoring data, then you want to run this.
+
+[rrdstatus]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=status --log=$BBSERVERLOGS/rrd-status.log hobbitd_rrd --rrddir=$BBVAR/rrd
+
+# "rrddata" updates RRD files with information that arrives as "data" messages.
+# If you want RRD graphs of your monitoring BB data, then you want to run this.
+
+[rrddata]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=data   --log=$BBSERVERLOGS/rrd-data.log hobbitd_rrd --rrddir=$BBVAR/rrd
+
+# The client back-end module. You need this if you are running the Hobbit client on any system.
+[clientdata]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD hobbitd_channel --channel=client --log=$BBSERVERLOGS/clientdata.log hobbitd_client
+
+
+# "bbproxy" is the Hobbit proxy server that allows you to forward status messages
+# from a protected network to your Hobbit server. It is not enabled by default,
+# since it would conflict with the hobbitd task.
+# If you need to run this, then disabled hobbitd and the hobbitd-modules
+# above, then enable this. Make sure you enter the IP-address of your 
+# Hobbit server in the command-line, so that the proxy knows where to forward
+# status messages.
+[bbproxy]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	CMD $BBHOME/bin/bbproxy --hobbitd --bbdisplay=YOUR.HOBBIT.SERVER.IP --report=$MACHINE.bbproxy --no-daemon --pidfile=$BBSERVERLOGS/bbproxy.pid
+	LOGFILE $BBSERVERLOGS/bbproxy.log
+
+
+# "hobbitfetch" is used when you have clients that cannot connect to your Hobbit server,
+# but the Hobbit server can connect to the client. Normally the clients will initiate
+# a connection to the Hobbit server to deliver the data they collect, but this is
+# forbidden in some firewall setups. By enabling the hobbitfetch task, hosts that have
+# the "pulldata" tag in the bb-hosts file will be polled by hobbitfetch for their data.
+#
+# NOTE: On the clients you must enable the "msgcache" task, since this is what 
+#       hobbitfetch is talking to.
+[hobbitfetch]
+	DISABLED
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	CMD $BBHOME/bin/hobbitfetch --server=YOUR.HOBBIT.SERVER.IP --no-daemon --pidfile=$BBSERVERLOGS/hobbitfetch.pid
+	LOGFILE $BBSERVERLOGS/hobbitfetch.log
+
+
+# "bbdisplay" runs the bbgen tool to generate the Hobbit webpages from the status information that
+# has been received. Big Brother updated the webpages once every 5 minutes. The default here is to
+# run it every minute for faster updates, but you can change it if you have a highly loaded server
+# and dont need updates that often.
+
+[bbdisplay]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	GROUP generators
+	CMD bbgen $BBGENOPTS --report
+	LOGFILE $BBSERVERLOGS/bb-display.log
+	INTERVAL 1m
+
+# bbcombotest is an extension script for the Hobbit display server. It generates
+# status messages that are combined from the status of one or more normal statuses.
+# It is controlled via the bbcombotest.cfg file.
+[bbcombotest]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD $BBHOME/bin/bbcombotest
+	LOGFILE $BBSERVERLOGS/bbcombotest.log
+	INTERVAL 5m
+
+# "bbnet" runs the bbtest-net tool to perform the network based tests - i.e. http, smtp, ssh, dns and
+# all of the various network protocols we need to test.
+
+[bbnet]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD bbtest-net --report --ping --checkresponse
+	LOGFILE $BBSERVERLOGS/bb-network.log
+	INTERVAL 5m
+
+
+# "bbretest" picks up the tests that the normal network test consider "failed", and re-does those
+# tests more often. This enables Big Brother to pick up a recovered network service faster than
+# if it were tested only by the "bbnet" task (which only runs every 5 minutes). So if you have
+# servers with very high availability guarantees, running this task will make your availability
+# reports look much better.
+
+[bbretest]
+	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
+	NEEDS hobbitd
+	CMD $BBHOME/ext/bbretest-net.sh
+	LOGFILE $BBSERVERLOGS/bb-retest.log
+	INTERVAL 1m
+
+
+# "hobbitclient" runs the Hobbit client. The client is installed automatically
+# when you install a Hobbit server (presumably, you do want to monitor the 
+# Hobbit server ?), but there's no need to have two hobbitlaunch instances
+# running at the same time. So we'll just run it from here.
+# Note: If you are using another client package, you should disable this one.
+
+[hobbitclient]
+	ENVFILE /data/srv/hobbit/client/etc/hobbitclient.cfg
+	NEEDS hobbitd
+	CMD /data/srv/hobbit/client/bin/hobbitclient.sh
+	LOGFILE $BBSERVERLOGS/hobbitclient.log
+	INTERVAL 5m
+
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg b/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg
new file mode 100644
index 0000000..42fc4c7
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg
@@ -0,0 +1,226 @@
+# NB : Even though it might look like a shell-script, it is NOT.
+#
+BBSERVERROOT="/data/srv/hobbit"		# Where Hobbit is installed - holds the server and bbvar sub-dirs.
+BBSERVERLOGS="/var/log/hobbit"		# Directory for server logs. The hobbit user must have write-access here.
+HOBBITCLIENTHOME="/data/srv/hobbit/client"    # BBHOME directory for the client
+
+
+BBSERVERHOSTNAME="localhost"		# The hostname of your server
+BBSERVERIP="127.0.0.1"			# The IP-address of your server. Use the real one, not 127.0.0.1 .
+BBSERVEROS="linux"			# The operating system of your server. linux,freebsd,solaris,hpux,aix,osf
+
+BBSERVERWWWNAME="localhost"		# The name used for this hosts' webserver
+BBSERVERWWWURL="/hobbit"		# The top URL for the Hobbit webpages
+BBSERVERCGIURL="/hobbit/hobbit-cgi"		# The URL for the Hobbit CGI scripts.
+BBSERVERSECURECGIURL="/hobbit/hobbit-seccgi"	# The URL for the secured Hobbit CGI scripts.
+
+# BBLOCATION="foo"			# The network location, makes bbtest-net test only hosts with NET:foo
+					# You only need to set this if you have multiple network test servers with
+					# a shared bb-hosts file.
+
+# Make sure the path includes the directories where you have fping, mail and (optionally) ntpdate installed,
+# as well as the BBHOME/bin directory where all of the Hobbit programs reside.
+PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/data/srv/hobbit/server/bin"
+
+# Some systems need extra settings e.g. to locate run-time libraries.
+# You can add these extra settings here:
+
+
+
+##### Normally you do not need to modify anything below this point #####
+
+# General settings
+BBPORT="1984"			# Portnumber where hobbitd/bbd listens
+BBDISP="$BBSERVERIP"		# IP of a single hobbit/bbd server
+BBDISPLAYS=""			# IP of multiple hobbit/bbd servers. If used, BBDISP must be 0.0.0.0
+FQDN="TRUE"			# Use fully-qualified hostnames internally. Keep it TRUE unless you know better.
+BBGHOSTS="1"                    # How to handle status messages from unknown hosts.
+                                # 0=accept message, 1=discard message, 2=discard message and log the event
+BBLOGSTATUS="DYNAMIC"		# Are HTML status logs statically or dynamically generated?
+				# Use DYNAMIC with Hobbit, unless you run hobbitd_filestore --status --html
+
+PINGCOLUMN="conn"		# Column where the ping-test reports results.
+INFOCOLUMN="info"		# Column where the info-pages are reported.
+TRENDSCOLUMN="trends"		# Column where the RRD graphs are reported.
+
+BBMAXMSGSPERCOMBO="100"         # How many individual messages to combine in a combo-message. 0=unlimited.
+BBSLEEPBETWEENMSGS="0"          # Delay between sending each combo message, in milliseconds.
+
+
+# Specific to this host
+BBOSTYPE="$BBSERVEROS"		# Hosttype (operating system). Not used by server-side, but clients use this.
+MACHINEDOTS="$BBSERVERHOSTNAME"	# This systems hostname
+MACHINEADDR="$BBSERVERIP"	# This systems IP-address
+
+# URL's generated/used by bbgen
+BBWEBHOST="http://$BBSERVERWWWNAME"		# Just the host part of the URL - http://www.foo.com
+BBWEBHOSTURL="$BBWEBHOST$BBSERVERWWWURL"	# Prefix for all static Hobbit pages - http://www.foo.com/bb
+BBWEBHTMLLOGS="$BBWEBHOSTURL/html"		# Prefix for the Hobbit HTML logs (only if BBLOGSTATUS=STATIC)
+BBWEB="$BBSERVERWWWURL"				# Hobbit URL prefix without the host part
+BBSKIN="$BBSERVERWWWURL/gifs"			# Hobbit URL prefix for the GIF files
+BBHELPSKIN="$BBSERVERWWWURL/help"               # Hobbit URL prefix for the online help files.
+BBNOTESSKIN="$BBSERVERWWWURL/notes"             # Hobbit URL prefix for the online notes-files.
+BBMENUSKIN="$BBSERVERWWWURL/menu"               # Hobbit URL prefix for the webpage menu files.
+BBREPURL="$BBSERVERWWWURL/rep"			# Hobbit URL prefix for the Hobbit availability reports
+BBSNAPURL="$BBSERVERWWWURL/snap"		# Hobbit URL prefix for the Hobbit snapshots
+BBWAP="$BBSERVERWWWURL/wml"			# Hobbit URL prefix for the WAP/WML files.
+CGIBINURL="$BBSERVERCGIURL"			# URL prefix for the Hobbit CGI-scripts - /cgi-bin
+SECURECGIBINURL="$BBSERVERSECURECGIURL"		# URL prefix for the secured Hobbit CGI-scripts - /cgi-secure
+
+# Locations of system-wide files and directories
+BBHOME="/data/srv/hobbit/server"				# The Hobbit server directory, where programs and configurations go. 
+BBTMP="$BBHOME/tmp"				# Directory used for temporary files.
+BBHOSTS="$BBHOME/etc/bb-hosts"			# The bb-hosts file
+BB="$BBHOME/bin/bb"				# The 'bb' client program
+BBGEN="$BBHOME/bin/bbgen"			# The bbgen program
+
+# Server specific directories
+BBVAR="/data/srv/hobbit/var"					# The bbvar directory holds all monitoring data
+BBACKS="$BBVAR/acks"				# Acknowledge event info stored here (hobbitd_alert)
+BBDATA="$BBVAR/data"				# Data files go here (hobbitd_filestore --data)
+BBDISABLED="$BBVAR/disabled"			# Enabled/disabled flags are stored here (hobbitd_filestore --enadis)
+BBHIST="$BBVAR/hist"				# History logs are stored here (hobbitd_history)
+BBHISTLOGS="$BBVAR/histlogs"			# Historical detail status-loge are stored here (hobbitd_history)
+BBLOGS="$BBVAR/logs"				# Status logs go here (hobbitd_filestore --status). Not needed by Hobbit.
+BBWWW="$BBHOME/www"				# The directory for Hobbit webpage files.
+BBHTML="$BBWWW/html"				# HTML status logs go here (hobbitd_filestore --status --html)
+BBNOTES="$BBWWW/notes"				# For notes-files (hobbitd_filestore --notes)
+BBREP="$BBWWW/rep"				# Top-level directory for Hobbit reports.
+BBSNAP="$BBWWW/snap"				# Top-level directory for Hobbit snapshots.
+
+# For the hobbitd_history module
+BBALLHISTLOG="TRUE"				# Save a common log of all events (used for the bb2 webpage)
+BBHOSTHISTLOG="TRUE"				# Save a log of all events for a host (not used by any tool currently)
+SAVESTATUSLOG="TRUE"				# Save the detailed status log each time the status changes.
+
+# For the hobbitd_alert module
+MAILC="mail"				# Command used to send an e-mail with no subject
+MAIL="$MAILC -s"				# Command used to send an e-mail with a subject
+SVCCODES="disk:100,cpu:200,procs:300,svcs:350,msgs:400,conn:500,http:600,dns:800,smtp:725,telnet:723,ftp:721,pop:810,pop3:810,pop-3:810,ssh:722,imap:843,ssh1:722,ssh2:722,imap2:843,imap3:843,imap4:843,pop2:809,pop-2:809,nntp:819,test:901"
+ALERTCOLORS="red,yellow,purple"			# Colors that may trigger an alert message
+OKCOLORS="green,blue,clear"			# Colors that may trigger a recovery message
+ALERTREPEAT="30"				# The default interval between repeated alert-messages (in minutes)
+
+# For bbtest-net
+CONNTEST="TRUE"					# Should we 'ping' hosts ?
+IPTEST_2_CLEAR_ON_FAILED_CONN="TRUE"		# If TRUE, then failing network tests go CLEAR if conn-test fails.
+NONETPAGE=""					# Network tests that go YELLOW upon failure
+FPING="hobbitping"					# Path and options for the ping program.
+NTPDATE="ntpdate"				# Path to the 'ntpdate' program
+TRACEROUTE="traceroute"                         # How to do traceroute on failing ping tests. Requires "trace" in bb-hosts.
+BBROUTERTEXT="router"				# What to call a failing intermediate network device.
+NETFAILTEXT="not OK"				# Text indicating a network test failed
+
+
+# Settings for the RRD graphs
+
+# Top level directory for the RRD files
+BBRRDS="$BBVAR/rrd"
+
+# Size of the generated graph images
+RRDHEIGHT="120"
+RRDWIDTH="576"		# The RRD's contain 576 data points, so this is a good value
+NCV_storage="*:GAUGE"
+NCV_memmbe="*:GAUGE"
+NCV_memmfe="*:GAUGE"
+# TEST2RRD defines the status- and data-messages you want to collect RRD data
+# about. You will normally not need to modify this, unless you have added a
+# script to pick up RRD data from custom tests (the hobbitd_larrd --extra-script
+# and --extra-tests options).
+# Note that network tests defined in the bb-services file are automatically
+# included.
+# The format here is "COLUMN=RRDSERVICE". If you leave out the "=RRDSERVICE"
+# part, it is assumed to be the same as the COLUMN value.
+#
+# This is also used by the bb-hostsvc.cgi script to determine if the detailed
+# status view of a test should include a graph.
+TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines,storage=ncv,memmbe=ncv,memmfe=ncv"
+
+# This defines which RRD files to include on the "trends" column webpage,
+# and the order in which they appear.
+GRAPHS="la,disk,inode,qtree,files,processes,memory,users,vmstat,iostat,tcp.http,tcp,ncv,netstat,ifstat,mrtg::1,ports,temperature,ntpstat,apache,bind,sendmail,mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,clock,lines,storage,memmbe,memmfe"
+
+# These two settings can be used to restrict what filesystems are being
+# tracked (i.e. have their utilisation graphed) by Hobbit.
+# NORRDDISKS=""		# Filesystems that will NOT be tracked
+# RRDDISKS=""		# Only track these filesystems
+
+
+############################################################
+# These determine some parts of how bbgen generates webpages
+############################################################
+BBGENOPTS="--recentgifs --subpagecolumns=2"     # Standard options for bbgen.
+SUMMARY_SET_BKG="FALSE"				# Do summaries affect the background color of the BB webpage ?
+BBMKBB2EXT="eventlog.sh acklog.sh"		# What extensions to have on the BB2 page.
+DOTHEIGHT="16"					# Height (in pixels) of the color GIF's
+DOTWIDTH="16"					# Width (in pixels) of the color GIF's
+COLUMNDOCURL="$CGIBINURL/hobbitcolumn.sh?%s"	# URL formatting string for column-links
+
+# HTML content
+HTMLCONTENTTYPE="text/html"                     # You can add charset options here.
+
+# Fonts and texts
+HOBBITLOGO=""                             # HTML inserted on all header pages at top-left corner.
+MKBBLOCAL="<B><I>Pages Hosted Locally</I></B>"
+MKBBREMOTE="<B><I>Remote Status Display</I></B>"
+MKBBSUBLOCAL="<B><I>Subpages Hosted Locally</I></B>"
+MKBBACKFONT="COLOR=\"#33ebf4\" SIZE=\"-1\""	# Size and color of the 'Current acknowledgement...' text in the html log.
+MKBBCOLFONT="COLOR=\"#87a9e5\" SIZE=\"-1\""	# Size and color of the column headings text
+MKBBROWFONT="SIZE=\"+1\" COLOR=\"#FFFFCC\" FACE=\"Tahoma, Arial, Helvetica\""   # Size,color,font of text in each row (hostname)
+MKBBTITLE="COLOR=\"#FFFFF0\" SIZE=\"+1\""	# Size and color of the BB titles (the old "ivory" is invalid HTML)
+BBDATEFORMAT="%a %b %d %H:%M:%S %Y"		# Date format
+BBRSSTITLE="Hobbit Alerts"			# Title for the RSS and WML outputs.
+ACKUNTILMSG="Next update at: %H:%M %Y-%m-%d"    # strftime format for the acknowledgement status display.
+
+# For WML output
+WMLMAXCHARS="1500"				# Max number of bytes in a WAP message
+
+# For BB reports
+BBREPWARN="97"					# Default availability causing yellow status on availability report.
+BBREPGREEN="99.995"				# Default availability causing green status on availability report.
+BBGENREPOPTS="$BBGENOPTS"			# bbgen(1) options used when generating availability reports.
+BBREPEXT=""					# What extensions to run on report pages.
+
+# For BB snapshots
+BBGENSNAPOPTS="$BBGENOPTS"			# bbgen(1) options used when generating snapshots.
+
+# For the bb-hist CGI 
+BBHISTEXT=""					# What extensions to run on history pages.
+
+
+# The following defines a bunch of commands that BB extensions expect to be present.
+# Hobbit does not use them, but they are provided here so if you use BB extension
+# scripts, then they will hopefully run without having to do a lot of tweaking.
+
+UPTIME=""
+AWK="/bin/awk"
+CAT="/bin/cat"
+CP="/bin/cp"
+CUT="/bin/cut"
+DATE="/bin/date"
+EGREP="/bin/egrep"
+EXPR="/usr/bin/expr"
+FIND="/usr/bin/find"
+GREP="/bin/grep"
+HEAD="/usr/bin/head"
+ID="/usr/bin/id"
+LN="/bin/ln"
+LS="/bin/ls"
+MV="/bin/mv"
+RM="/bin/rm"
+SED="/bin/sed"
+SORT="/usr/bin/sort"
+TAIL="/usr/bin/tail"
+TOUCH="/bin/touch"
+TR="/bin/tr"
+UNIQ="/usr/bin/uniq"
+WHO="/usr/bin/who"
+TOP=""
+WC="/usr/bin/wc -l"
+WCC="/usr/bin/wc"
+# DF,DFCMD and PS are for compatibility only, NOT USED by the Hobbit client
+DF="/bin/df -Pk"
+DFCMD="/bin/df -Pk"
+PS="ps ax"
+
+MAXLINE="32768"
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.diff b/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.diff
new file mode 100644
index 0000000..7c829fe
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.diff
@@ -0,0 +1,45 @@
+--- hobbitserver.cfg.orig	2008-01-08 15:25:34.000000000 +0000
++++ hobbitserver.cfg	2008-01-08 16:22:56.000000000 +0000
+@@ -105,7 +105,7 @@
+ CONNTEST="TRUE"					# Should we 'ping' hosts ?
+ IPTEST_2_CLEAR_ON_FAILED_CONN="TRUE"		# If TRUE, then failing network tests go CLEAR if conn-test fails.
+ NONETPAGE=""					# Network tests that go YELLOW upon failure
+-FPING="/usr/sbin/fping"					# Path and options for the ping program.
++FPING="hobbitping"					# Path and options for the ping program.
+ NTPDATE="ntpdate"				# Path to the 'ntpdate' program
+ TRACEROUTE="traceroute"                         # How to do traceroute on failing ping tests. Requires "trace" in bb-hosts.
+ BBROUTERTEXT="router"				# What to call a failing intermediate network device.
+@@ -120,7 +120,9 @@
+ # Size of the generated graph images
+ RRDHEIGHT="120"
+ RRDWIDTH="576"		# The RRD's contain 576 data points, so this is a good value
+-
++NCV_storage="*:GAUGE"
++NCV_memmbe="*:GAUGE"
++NCV_memmfe="*:GAUGE"
+ # TEST2RRD defines the status- and data-messages you want to collect RRD data
+ # about. You will normally not need to modify this, unless you have added a
+ # script to pick up RRD data from custom tests (the hobbitd_larrd --extra-script
+@@ -132,11 +134,11 @@
+ #
+ # This is also used by the bb-hostsvc.cgi script to determine if the detailed
+ # status view of a test should include a graph.
+-TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines"
++TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines,storage=ncv,memmbe=ncv,memmfe=ncv"
+ 
+ # This defines which RRD files to include on the "trends" column webpage,
+ # and the order in which they appear.
+-GRAPHS="la,disk,inode,qtree,files,processes,memory,users,vmstat,iostat,tcp.http,tcp,ncv,netstat,ifstat,mrtg::1,ports,temperature,ntpstat,apache,bind,sendmail,mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,clock,lines"
++GRAPHS="la,disk,inode,qtree,files,processes,memory,users,vmstat,iostat,tcp.http,tcp,ncv,netstat,ifstat,mrtg::1,ports,temperature,ntpstat,apache,bind,sendmail,mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,clock,lines,storage,memmbe,memmfe"
+ 
+ # These two settings can be used to restrict what filesystems are being
+ # tracked (i.e. have their utilisation graphed) by Hobbit.
+@@ -158,7 +160,7 @@
+ HTMLCONTENTTYPE="text/html"                     # You can add charset options here.
+ 
+ # Fonts and texts
+-HOBBITLOGO="Hobbit"                             # HTML inserted on all header pages at top-left corner.
++HOBBITLOGO=""                             # HTML inserted on all header pages at top-left corner.
+ MKBBLOCAL="<B><I>Pages Hosted Locally</I></B>"
+ MKBBREMOTE="<B><I>Remote Status Display</I></B>"
+ MKBBSUBLOCAL="<B><I>Subpages Hosted Locally</I></B>"
diff --git a/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.orig b/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.orig
new file mode 100644
index 0000000..2ba56f5
--- /dev/null
+++ b/abs/mv-core/hobbitmon/diffs/hobbitserver.cfg.orig
@@ -0,0 +1,224 @@
+# NB : Even though it might look like a shell-script, it is NOT.
+#
+BBSERVERROOT="/data/srv/hobbit"		# Where Hobbit is installed - holds the server and bbvar sub-dirs.
+BBSERVERLOGS="/var/log/hobbit"		# Directory for server logs. The hobbit user must have write-access here.
+HOBBITCLIENTHOME="/data/srv/hobbit/client"    # BBHOME directory for the client
+
+
+BBSERVERHOSTNAME="localhost"		# The hostname of your server
+BBSERVERIP="127.0.0.1"			# The IP-address of your server. Use the real one, not 127.0.0.1 .
+BBSERVEROS="linux"			# The operating system of your server. linux,freebsd,solaris,hpux,aix,osf
+
+BBSERVERWWWNAME="localhost"		# The name used for this hosts' webserver
+BBSERVERWWWURL="/hobbit"		# The top URL for the Hobbit webpages
+BBSERVERCGIURL="/hobbit/hobbit-cgi"		# The URL for the Hobbit CGI scripts.
+BBSERVERSECURECGIURL="/hobbit/hobbit-seccgi"	# The URL for the secured Hobbit CGI scripts.
+
+# BBLOCATION="foo"			# The network location, makes bbtest-net test only hosts with NET:foo
+					# You only need to set this if you have multiple network test servers with
+					# a shared bb-hosts file.
+
+# Make sure the path includes the directories where you have fping, mail and (optionally) ntpdate installed,
+# as well as the BBHOME/bin directory where all of the Hobbit programs reside.
+PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/data/srv/hobbit/server/bin"
+
+# Some systems need extra settings e.g. to locate run-time libraries.
+# You can add these extra settings here:
+
+
+
+##### Normally you do not need to modify anything below this point #####
+
+# General settings
+BBPORT="1984"			# Portnumber where hobbitd/bbd listens
+BBDISP="$BBSERVERIP"		# IP of a single hobbit/bbd server
+BBDISPLAYS=""			# IP of multiple hobbit/bbd servers. If used, BBDISP must be 0.0.0.0
+FQDN="TRUE"			# Use fully-qualified hostnames internally. Keep it TRUE unless you know better.
+BBGHOSTS="1"                    # How to handle status messages from unknown hosts.
+                                # 0=accept message, 1=discard message, 2=discard message and log the event
+BBLOGSTATUS="DYNAMIC"		# Are HTML status logs statically or dynamically generated?
+				# Use DYNAMIC with Hobbit, unless you run hobbitd_filestore --status --html
+
+PINGCOLUMN="conn"		# Column where the ping-test reports results.
+INFOCOLUMN="info"		# Column where the info-pages are reported.
+TRENDSCOLUMN="trends"		# Column where the RRD graphs are reported.
+
+BBMAXMSGSPERCOMBO="100"         # How many individual messages to combine in a combo-message. 0=unlimited.
+BBSLEEPBETWEENMSGS="0"          # Delay between sending each combo message, in milliseconds.
+
+
+# Specific to this host
+BBOSTYPE="$BBSERVEROS"		# Hosttype (operating system). Not used by server-side, but clients use this.
+MACHINEDOTS="$BBSERVERHOSTNAME"	# This systems hostname
+MACHINEADDR="$BBSERVERIP"	# This systems IP-address
+
+# URL's generated/used by bbgen
+BBWEBHOST="http://$BBSERVERWWWNAME"		# Just the host part of the URL - http://www.foo.com
+BBWEBHOSTURL="$BBWEBHOST$BBSERVERWWWURL"	# Prefix for all static Hobbit pages - http://www.foo.com/bb
+BBWEBHTMLLOGS="$BBWEBHOSTURL/html"		# Prefix for the Hobbit HTML logs (only if BBLOGSTATUS=STATIC)
+BBWEB="$BBSERVERWWWURL"				# Hobbit URL prefix without the host part
+BBSKIN="$BBSERVERWWWURL/gifs"			# Hobbit URL prefix for the GIF files
+BBHELPSKIN="$BBSERVERWWWURL/help"               # Hobbit URL prefix for the online help files.
+BBNOTESSKIN="$BBSERVERWWWURL/notes"             # Hobbit URL prefix for the online notes-files.
+BBMENUSKIN="$BBSERVERWWWURL/menu"               # Hobbit URL prefix for the webpage menu files.
+BBREPURL="$BBSERVERWWWURL/rep"			# Hobbit URL prefix for the Hobbit availability reports
+BBSNAPURL="$BBSERVERWWWURL/snap"		# Hobbit URL prefix for the Hobbit snapshots
+BBWAP="$BBSERVERWWWURL/wml"			# Hobbit URL prefix for the WAP/WML files.
+CGIBINURL="$BBSERVERCGIURL"			# URL prefix for the Hobbit CGI-scripts - /cgi-bin
+SECURECGIBINURL="$BBSERVERSECURECGIURL"		# URL prefix for the secured Hobbit CGI-scripts - /cgi-secure
+
+# Locations of system-wide files and directories
+BBHOME="/data/srv/hobbit/server"				# The Hobbit server directory, where programs and configurations go. 
+BBTMP="$BBHOME/tmp"				# Directory used for temporary files.
+BBHOSTS="$BBHOME/etc/bb-hosts"			# The bb-hosts file
+BB="$BBHOME/bin/bb"				# The 'bb' client program
+BBGEN="$BBHOME/bin/bbgen"			# The bbgen program
+
+# Server specific directories
+BBVAR="/data/srv/hobbit/var"					# The bbvar directory holds all monitoring data
+BBACKS="$BBVAR/acks"				# Acknowledge event info stored here (hobbitd_alert)
+BBDATA="$BBVAR/data"				# Data files go here (hobbitd_filestore --data)
+BBDISABLED="$BBVAR/disabled"			# Enabled/disabled flags are stored here (hobbitd_filestore --enadis)
+BBHIST="$BBVAR/hist"				# History logs are stored here (hobbitd_history)
+BBHISTLOGS="$BBVAR/histlogs"			# Historical detail status-loge are stored here (hobbitd_history)
+BBLOGS="$BBVAR/logs"				# Status logs go here (hobbitd_filestore --status). Not needed by Hobbit.
+BBWWW="$BBHOME/www"				# The directory for Hobbit webpage files.
+BBHTML="$BBWWW/html"				# HTML status logs go here (hobbitd_filestore --status --html)
+BBNOTES="$BBWWW/notes"				# For notes-files (hobbitd_filestore --notes)
+BBREP="$BBWWW/rep"				# Top-level directory for Hobbit reports.
+BBSNAP="$BBWWW/snap"				# Top-level directory for Hobbit snapshots.
+
+# For the hobbitd_history module
+BBALLHISTLOG="TRUE"				# Save a common log of all events (used for the bb2 webpage)
+BBHOSTHISTLOG="TRUE"				# Save a log of all events for a host (not used by any tool currently)
+SAVESTATUSLOG="TRUE"				# Save the detailed status log each time the status changes.
+
+# For the hobbitd_alert module
+MAILC="mail"				# Command used to send an e-mail with no subject
+MAIL="$MAILC -s"				# Command used to send an e-mail with a subject
+SVCCODES="disk:100,cpu:200,procs:300,svcs:350,msgs:400,conn:500,http:600,dns:800,smtp:725,telnet:723,ftp:721,pop:810,pop3:810,pop-3:810,ssh:722,imap:843,ssh1:722,ssh2:722,imap2:843,imap3:843,imap4:843,pop2:809,pop-2:809,nntp:819,test:901"
+ALERTCOLORS="red,yellow,purple"			# Colors that may trigger an alert message
+OKCOLORS="green,blue,clear"			# Colors that may trigger a recovery message
+ALERTREPEAT="30"				# The default interval between repeated alert-messages (in minutes)
+
+# For bbtest-net
+CONNTEST="TRUE"					# Should we 'ping' hosts ?
+IPTEST_2_CLEAR_ON_FAILED_CONN="TRUE"		# If TRUE, then failing network tests go CLEAR if conn-test fails.
+NONETPAGE=""					# Network tests that go YELLOW upon failure
+FPING="/usr/sbin/fping"					# Path and options for the ping program.
+NTPDATE="ntpdate"				# Path to the 'ntpdate' program
+TRACEROUTE="traceroute"                         # How to do traceroute on failing ping tests. Requires "trace" in bb-hosts.
+BBROUTERTEXT="router"				# What to call a failing intermediate network device.
+NETFAILTEXT="not OK"				# Text indicating a network test failed
+
+
+# Settings for the RRD graphs
+
+# Top level directory for the RRD files
+BBRRDS="$BBVAR/rrd"
+
+# Size of the generated graph images
+RRDHEIGHT="120"
+RRDWIDTH="576"		# The RRD's contain 576 data points, so this is a good value
+
+# TEST2RRD defines the status- and data-messages you want to collect RRD data
+# about. You will normally not need to modify this, unless you have added a
+# script to pick up RRD data from custom tests (the hobbitd_larrd --extra-script
+# and --extra-tests options).
+# Note that network tests defined in the bb-services file are automatically
+# included.
+# The format here is "COLUMN=RRDSERVICE". If you leave out the "=RRDSERVICE"
+# part, it is assumed to be the same as the COLUMN value.
+#
+# This is also used by the bb-hostsvc.cgi script to determine if the detailed
+# status view of a test should include a graph.
+TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines"
+
+# This defines which RRD files to include on the "trends" column webpage,
+# and the order in which they appear.
+GRAPHS="la,disk,inode,qtree,files,processes,memory,users,vmstat,iostat,tcp.http,tcp,ncv,netstat,ifstat,mrtg::1,ports,temperature,ntpstat,apache,bind,sendmail,mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,clock,lines"
+
+# These two settings can be used to restrict what filesystems are being
+# tracked (i.e. have their utilisation graphed) by Hobbit.
+# NORRDDISKS=""		# Filesystems that will NOT be tracked
+# RRDDISKS=""		# Only track these filesystems
+
+
+############################################################
+# These determine some parts of how bbgen generates webpages
+############################################################
+BBGENOPTS="--recentgifs --subpagecolumns=2"     # Standard options for bbgen.
+SUMMARY_SET_BKG="FALSE"				# Do summaries affect the background color of the BB webpage ?
+BBMKBB2EXT="eventlog.sh acklog.sh"		# What extensions to have on the BB2 page.
+DOTHEIGHT="16"					# Height (in pixels) of the color GIF's
+DOTWIDTH="16"					# Width (in pixels) of the color GIF's
+COLUMNDOCURL="$CGIBINURL/hobbitcolumn.sh?%s"	# URL formatting string for column-links
+
+# HTML content
+HTMLCONTENTTYPE="text/html"                     # You can add charset options here.
+
+# Fonts and texts
+HOBBITLOGO="Hobbit"                             # HTML inserted on all header pages at top-left corner.
+MKBBLOCAL="<B><I>Pages Hosted Locally</I></B>"
+MKBBREMOTE="<B><I>Remote Status Display</I></B>"
+MKBBSUBLOCAL="<B><I>Subpages Hosted Locally</I></B>"
+MKBBACKFONT="COLOR=\"#33ebf4\" SIZE=\"-1\""	# Size and color of the 'Current acknowledgement...' text in the html log.
+MKBBCOLFONT="COLOR=\"#87a9e5\" SIZE=\"-1\""	# Size and color of the column headings text
+MKBBROWFONT="SIZE=\"+1\" COLOR=\"#FFFFCC\" FACE=\"Tahoma, Arial, Helvetica\""   # Size,color,font of text in each row (hostname)
+MKBBTITLE="COLOR=\"#FFFFF0\" SIZE=\"+1\""	# Size and color of the BB titles (the old "ivory" is invalid HTML)
+BBDATEFORMAT="%a %b %d %H:%M:%S %Y"		# Date format
+BBRSSTITLE="Hobbit Alerts"			# Title for the RSS and WML outputs.
+ACKUNTILMSG="Next update at: %H:%M %Y-%m-%d"    # strftime format for the acknowledgement status display.
+
+# For WML output
+WMLMAXCHARS="1500"				# Max number of bytes in a WAP message
+
+# For BB reports
+BBREPWARN="97"					# Default availability causing yellow status on availability report.
+BBREPGREEN="99.995"				# Default availability causing green status on availability report.
+BBGENREPOPTS="$BBGENOPTS"			# bbgen(1) options used when generating availability reports.
+BBREPEXT=""					# What extensions to run on report pages.
+
+# For BB snapshots
+BBGENSNAPOPTS="$BBGENOPTS"			# bbgen(1) options used when generating snapshots.
+
+# For the bb-hist CGI 
+BBHISTEXT=""					# What extensions to run on history pages.
+
+
+# The following defines a bunch of commands that BB extensions expect to be present.
+# Hobbit does not use them, but they are provided here so if you use BB extension
+# scripts, then they will hopefully run without having to do a lot of tweaking.
+
+UPTIME=""
+AWK="/bin/awk"
+CAT="/bin/cat"
+CP="/bin/cp"
+CUT="/bin/cut"
+DATE="/bin/date"
+EGREP="/bin/egrep"
+EXPR="/usr/bin/expr"
+FIND="/usr/bin/find"
+GREP="/bin/grep"
+HEAD="/usr/bin/head"
+ID="/usr/bin/id"
+LN="/bin/ln"
+LS="/bin/ls"
+MV="/bin/mv"
+RM="/bin/rm"
+SED="/bin/sed"
+SORT="/usr/bin/sort"
+TAIL="/usr/bin/tail"
+TOUCH="/bin/touch"
+TR="/bin/tr"
+UNIQ="/usr/bin/uniq"
+WHO="/usr/bin/who"
+TOP=""
+WC="/usr/bin/wc -l"
+WCC="/usr/bin/wc"
+# DF,DFCMD and PS are for compatibility only, NOT USED by the Hobbit client
+DF="/bin/df -Pk"
+DFCMD="/bin/df -Pk"
+PS="ps ax"
+
+MAXLINE="32768"
diff --git a/abs/mv-core/hobbitmon/hbfunc.py b/abs/mv-core/hobbitmon/hbfunc.py
new file mode 100755
index 0000000..9cb66df
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hbfunc.py
@@ -0,0 +1,167 @@
+#!/usr/bin/python
+#checks that the MBE can connect to the minions
+
+# ===============================================
+import sys
+import os
+import string
+import time
+import func.overlord.client as fc
+BBLINE = ''
+BBCOLOR="green"
+DATE = time.strftime("%a %b %d %H:%M:%S %Z %Y", time.localtime(time.time()))
+if os.environ['BB']:
+    #print os.environ['BB']
+    BB=os.environ['BB']
+if os.environ['BBDISP']:
+    #print os.environ['BBDISP']
+    BBDISP=os.environ['BBDISP']
+if os.environ['MACHINE']:
+     #print os.environ['MACHINE']
+     MACHINE=os.environ['MACHINE']
+
+
+
+def readbb():
+        global hostlist
+        global mythtype
+
+        try:
+                infile = open('/data/srv/hobbit/etc/bb-hosts', 'r')
+        except(IOError), e:
+          print "couldn't open bb-hosts file"
+          sys.exit(1)
+        else:
+                bbhostlist = infile.readlines()
+                infile.close()
+		for line in bbhostlist:
+			cline=line.strip()
+			if not cline.startswith("#") and cline != '' and cline.find("bbd") == -1 and cline.find("func") != -1  :
+				host=cline.split("#")
+				host=host[0].split()
+				hostlist.append(host[1].strip())
+		infile.close()
+        try:
+                infile = open('/usr/local/share/mythtv/.releasetype')
+                mythtype= infile.readline()
+                infile.close()
+        except(IOError), e:
+            print "couldn't open mythfile "
+            mythtype='unkown'
+
+def find_local_myth_version():
+    global mythtype
+    local_pkg_name="not_found"
+    pkgname="mythtv"
+    pkgname+=mythtype
+    cmd="/usr/bin/pacman -Q %s " %pkgname
+    result = os.popen2(cmd)[1].readlines()
+    for list in result:
+        l=list.strip()
+        if l.startswith('mythtv') :
+            local_pkg_name=l.strip()
+            break
+    return local_pkg_name
+
+
+def  mythversion_check(currentclient,local_myth_version):
+    global mythtype
+    pkgname="mythtv"
+    pkgname+=mythtype
+    remote_pkg_name="remote_pkg_not_found"
+    client = (fc.Client( currentclient ))
+    results=client.pacman.pkgversion(pkgname)
+    #print currentclient
+    #print local_myth_version
+    #print results[currentclient][1]
+    try:
+        for pkg in results[currentclient][1] :
+            p=pkg.strip()
+            if p.startswith('mythtv'):
+                remote_pkg_name=p
+                break
+        if (remote_pkg_name != local_myth_version):
+            BBLINE="Myth version MBE: %s does not match %s  %s \n " %(local_myth_version,currentclient,remote_pkg_name)
+            LINE = "status " + currentclient  + ".myth_version yellow" + " " + DATE + " " + BBLINE
+
+        if (remote_pkg_name == local_myth_version):
+            BBLINE="%s:  success (green) Myth version match %s \n " %(currentclient,remote_pkg_name)
+            LINE = "status " + currentclient  + ".myth_version green" + " " + DATE + " " + BBLINE
+    except:
+        BBLINE="Something went wrong! \n "
+        LINE = "status " + currentclient  + ".myth_version red" + " " + DATE + " " + BBLINE
+
+
+    cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
+    os.system(cmd)
+    return
+
+#-------------------------
+global hostlist
+global mythtype
+mythtype=""
+hostlist = []
+readbb()
+local_myth_version=find_local_myth_version()
+
+for currentclient in hostlist:
+    client = (fc.Client( currentclient ))
+    cmd='/data/srv/hobbit/server/bin/bb 127.0.0.1  "query '
+    cmd+=currentclient
+    cmd+='.conn"'
+    bbresults=os.popen(cmd,'r'	).readline().strip().split()
+    bbstate=bbresults[0]
+    if bbstate == 'green':
+        results=client.test.add("1","2")
+        try:
+            #print currentclient
+            #print results[currentclient]
+            #print type(results[currentclient])
+            #print "----------"
+            if  type(results[currentclient]) == str:
+                if results[currentclient] == '12':
+                    BBLINE="%s:  success (green) \n " %currentclient
+                    LINE = "status " + currentclient  + ".func green" + " " + DATE + " " + BBLINE
+                    cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
+                    os.system(cmd)
+                    #REMOVE HOST FROM FAILED_FUNC
+                    cmd='sed -i "/' +  currentclient + '/d" /data/srv/httpd/htdocs/failed_func_hosts'
+                    os.system(cmd)
+                    mythversion_check(currentclient,local_myth_version)
+                else:
+                    BBLINE="%s:  connected but wtf  (yellow)  \n " %currentclient
+                    LINE = "status " + currentclient  + ".func yellow" + " " + DATE + " " + BBLINE
+                    cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
+                    os.system(cmd)
+                    if BBCOLOR != "red":
+                        BBCOLOR="yellow"
+            else:
+                BBLINE="%s: %s  (red)  \n "  %(currentclient,results[currentclient])
+                LINE = "status " + currentclient  + ".func red" + " " + DATE + " " + BBLINE
+                cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
+                cmd2= "echo " + currentclient + " >> /data/srv/httpd/htdocs/failed_func_hosts"
+                cmd3="sudo /usr/bin/certmaster-ca -c " + currentclient
+                os.system(cmd2)
+                os.system(cmd3)
+                os.system(cmd)
+                BBCOLOR="red"
+        except:
+            BBLINE="%s had an error : %s (red) \n "   % (currentclient,str(results))
+            LINE = "status " + currentclient  + ".func red" + " " + DATE + " " + BBLINE
+            cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
+            cmd2= "echo " + currentclient + " >> /data/srv/httpd/htdocs/failed_func_hosts"
+            os.system(cmd)
+            os.system(cmd2)
+            cmd3="sudo /usr/bin/certmaster-ca -c " + currentclient
+            os.system(cmd3)
+            BBCOLOR="red"
+    else:
+        BBLINE+= "not testing %s \n "  % currentclient
+
+
+#LINE = "status " + MACHINE + ".func green" + " " + DATE + " " + BBLINE
+#cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
+#os.system(cmd)
+
+#print BBLINE
+#print BBCOLOR
diff --git a/abs/mv-core/hobbitmon/hbnotes.py b/abs/mv-core/hobbitmon/hbnotes.py
new file mode 100755
index 0000000..b7ef16b
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hbnotes.py
@@ -0,0 +1,357 @@
+#!/usr/bin/python
+# import MySQL module
+
+import MySQLdb
+import sys
+import getopt
+import socket
+import os
+global ignorehostlist
+try:
+    import  ignoreclient
+    ignorehostlist=ignoreclient.ignorehosts
+except:
+    print "could not find the ignore list"
+    ignorehostlist="'ignoreme'"
+
+
+
+
+
+def createdropdown():
+    dropdown='''
+     <input name="param2" type="radio"  value="Restore" />Restore database </>
+     <select name="param1">
+    '''
+    dir = "/data/database_backup"
+    files = os.listdir(dir)
+    for file in os.listdir(dir):
+        if (file.endswith(".tgz")):
+            dropdown+='<option value="' + file + '">' + file + '</option> '
+    dropdown+='</select> <br><input name="param2" type="radio" value="Backup" checked="checked" />Backup database<br />  '
+    dropdown+='<input name="param2" type="radio" value="Optimize"  />Optimize database<br />  '
+    dropdown+='<input name="param2" type="radio" value="ShutdownAll"  />Shutdown All Systems (expect MBE)<br />  '
+    dropdown+='''<input name="param2" type="radio"  value="UpdateAll" />Update All Systems </>           <select name="param5">
+                   <option value="Myth_only">Myth only</option>
+                   <option value="All"> Full System</option>
+           </select>
+	   </br>
+	   </br>
+           </br>'''
+    return dropdown
+
+def main(argv):
+    db = MySQLdb.connect(host="localhost", user="mythtv", passwd="[REDACTED] db="mythconverg")
+
+    # create a cursor
+    cursor = db.cursor()
+#------------------------------write client-config------------------------------------------------
+    SQL="SELECT DISTINCT(hostname) from settings where hostname not in(%s)"
+    cursor.execute(SQL %ignorehostlist)
+    result = cursor.fetchall()
+    frontonly="_FRONTEND_"
+    masterbackend="_MASTERBACKEND_"
+    masterbacked_w_fe="_MASTERFE_"
+    slave_w_fe="_SLAVEFE_"
+    slave="_SLAVEBACKEND_"
+    stand_alone="_STANDALONE_"
+    dotMBE=""
+    dotfrontend=list()
+    dotslave=list()
+    dotslavefe=list()
+    tunerdict = {}
+    for row in result:
+  #     print row[0]
+   #Find the system type
+       cursor.execute("select value,data  from settings where hostname=%s and value in ('HostSystemType','HostRunFrontend');",(row))
+       hostvalues=cursor.fetchall()
+       if  len(hostvalues) == 2:
+          if hostvalues[1][1] == 'Frontend_only':
+             frontonly+=","+row[0]
+             dotfrontend.append(row[0])
+
+          elif hostvalues[1][1] == 'Standalone':
+             stand_alone+=","+row[0]
+             dotMBE="MBE" + " [ label=\"" + row[0]  + "  \\n Standalone  \" shapefile=\"/data/srv/httpd/htdocs/hobbit/gifs/be.png\"  fontcolor=\"white\"  color=blue4 style=filled   ] "
+             dotfrontend.append(row[0])
+             cursor.execute("select cardtype,defaultinput  from capturecard  where hostname=%s;",(row))
+             tuners=cursor.fetchall()
+             tstring=""
+
+             if len(tuners) == 0:
+                 tunerdict["MBE"]="no tuners \\n"
+             else:
+                for t in tuners:
+                    tstring+=t[0]
+                    tstring+=t[1]
+                    tstring+='\\n'
+                    tunerdict["MBE"]=tstring
+
+          elif hostvalues[1][1] == 'Master_backend':
+              if hostvalues[0][1]=='0':
+                  masterbackend+=","+row[0]
+                  dotMBE=row[0] + "\\n Master Backend"
+              else:
+                  masterbacked_w_fe+=","+row[0]
+                  dotMBE="MBE" + " [ label=\"" + row[0]  + "  \\n Master Backend with frontend  \" shapefile=\"/data/srv/httpd/htdocs/hobbit/gifs/be.png\"  fontcolor=\"white\"  color=blue4 style=filled   ] "
+                  cursor.execute("select cardtype,defaultinput  from capturecard  where hostname=%s;",(row))
+                  tuners=cursor.fetchall()
+                  tstring=""
+
+                  if len(tuners) == 0:
+                    tunerdict["MBE"]="no tuners \\n"
+                  else:
+                    for t in tuners:
+                            tstring+=t[0]
+                            tstring+=t[1]
+                            tstring+='\\n'
+                            tunerdict["MBE"]=tstring
+                  dotfrontend.append(row[0])
+
+          elif hostvalues[1][1] == 'Slave_backend':
+              if hostvalues[0][1]=='0':
+                  slave+=","+row[0]
+                  dotslave.append(row[0])
+                  cursor.execute("select cardtype,defaultinput  from capturecard  where hostname=%s;",(row))
+                  tuners=cursor.fetchall()
+                  tstring=""
+                  for t in tuners:
+                        tstring+=t[0]
+                        tstring+=t[1]
+                        tstring+='\\n'
+                  tunerdict["STUNER"+row[0]]=tstring
+                  #dotfrontend.append(row[0])
+              else:
+                  cursor.execute("select cardtype,defaultinput  from capturecard  where hostname=%s;",(row))
+                  tuners=cursor.fetchall()
+                  tstring=""
+                  for t in tuners:
+                        tstring+=t[0]
+                        tstring+=t[1]
+                        tstring+='\\n'
+                  tunerdict["STUNER"+row[0]]=tstring
+                  print tstring
+
+                  slave_w_fe+=","+row[0]
+                  dotslave.append(row[0])
+                  dotfrontend.append(row[0])
+
+#----------------------------------Create graphviz dot files
+    dotfilename="/data/srv/hobbit/server/etc/mythdot"
+
+    dotfile=open(dotfilename,'w')
+    dotfile.write("digraph G {   " + "\n" )
+    dotfile.write("graph [bgcolor=transparent]" + "\n" )
+
+
+#define the nodes
+    dotfile.write( dotMBE + "  \n" )
+
+    dotfile.write("tunermbe"+   " [ label= \"" + tunerdict["MBE"] +     "\" , shapefile=\"/data/srv/httpd/htdocs/hobbit/gifs/tuner.png\"   fontcolor=\"white\"  color=red ]  \n" )
+
+    for fe in dotfrontend:
+        dotfile.write("FEND"+fe + "[ label=\"frontend \\n " + fe +     "\" ,shapefile=\"/data/srv/httpd/htdocs/hobbit/gifs/tv.png\" , fontcolor=\"white\" , imagescale=\"true\"  color=\"gold2\" ]   \n" )
+
+    for fe in dotslave:
+        cslave="STUNER"+fe
+        if tunerdict[cslave] != "" :
+    	    dotfile.write(cslave+   " [ label= \"" + tunerdict[cslave] +     "\" ,  shape=box ]     \n" )
+        dotfile.write("SLAVE"+fe + "[ label=\"slave backend \\n " + fe +     "\" shapefile=\"/data/srv/httpd/htdocs/hobbit/gifs/be.png\"  fontcolor=\"white\"  color=green ]   \n" )
+
+
+#connect up the nodes!
+    dotfile.write("tunermbe -> MBE  [color=\"red\"] \n  "  )
+
+    for fe in dotfrontend:
+        dotfile.write("MBE  -> FEND" + fe + "[color=\"gold2\"]   \n  "  )
+
+    for fe in dotslave:
+        cslave="STUNER"+fe
+        dotfile.write("SLAVE" + fe + "-> MBE [color=\"green\"]  \n  "  )
+        if tunerdict[cslave] != "" :
+            dotfile.write(cslave + "-> SLAVE"+fe + "\n"  )
+
+
+
+    dotfile.write("}  " + "\n"   )
+    dotfile.close()
+
+
+    cmd="/usr/bin/unflatten -l6 -c3 -f " + dotfilename + " |/usr/bin/dot -Tpng  -o/data/srv/httpd/htdocs/hobbit/gifs/network.png "
+ #   cmd="/usr/bin/circo -Tpng  -o/data/srv/httpd/htdocs/hobbit/gifs/network.png " + dotfilename
+
+    results=os.popen(cmd,'r')
+
+ #--------------------------------------------------
+    hobbitfile="/data/srv/hobbit/server/etc/hobbit-clients.cfg"
+    hobbitf=open(hobbitfile,'r')
+    hobbitconfig=hobbitf.readlines()
+    hobbitf.close()
+    hobbitf=open(hobbitfile,'w')
+#    print "FE",frontonly
+ #   print "MBE",masterbackend
+  #  print "MBEwFW",masterbacked_w_fe
+   # print "SLAVEwFW",slave_w_fe
+    #print "SLAVE",slave
+    #print "STD",stand_alone
+
+    for line in hobbitconfig:
+        if line.startswith("HOST"):
+            cline=line.split("=")
+            if cline[1].startswith("_FRONTEND_"):
+                pline="HOST="
+                pline+=frontonly.strip()
+                hobbitf.write(pline + "\n")
+            elif cline[1].startswith("_MASTERBACKEND_"):
+                pline="HOST="
+                pline+=masterbackend.strip()
+                #print pline
+                hobbitf.write(pline+ "\n")
+            elif cline[1].startswith("_MASTERFRONTEND_"):
+                pline="HOST="
+                pline+=masterbacked_w_fe.strip()
+                #print pline
+                hobbitf.write(pline+ "\n")
+            elif cline[1].startswith("_SLAVEBACKEND_"):
+                pline="HOST="
+                pline+=slave.strip()
+                #print pline
+                hobbitf.write(pline+ "\n")
+            elif cline[1].startswith("_SLAVEFE_"):
+                pline="HOST="
+                pline+=slave_w_fe.strip()
+                #print pline
+                hobbitf.write(pline+ "\n")
+            else:
+                #print line
+                hobbitf.write(line)
+        else:
+            #print line
+            hobbitf.write(line)
+
+
+
+
+
+#-----------------------------------------------------------END CLIENT CONFIG
+
+
+
+
+
+
+
+
+
+
+
+
+
+    # execute SQL statement
+    cursor.execute("SELECT DISTINCT(hostname) from settings")
+    result = cursor.fetchall()
+
+    for row in result:
+       cursor.execute("select value,data  from settings where hostname=%s and value in ('HostSystemType','HostHwuuid');",(row))
+       hostvalues=cursor.fetchall()
+       found_uuid="false"
+       filename="/data/srv/hobbit/server/www/notes/"
+       filename+=str(row[0])
+       filename+=(".html")
+
+       file = open(filename,'w')
+       string='''
+        <html>
+        <head>
+            <style type="text/css">@import "/frame.css";</style>
+        </head>
+       '''
+       file.write(string)
+
+
+       for i in range( 0 , len(hostvalues)):
+            value=hostvalues[i][0]
+            data=hostvalues[i][1]
+            currenthostype=''
+            currenthostname=''
+            if  value == "HostHwuuid" :
+                if data != "blank" :
+                    found_uuid="true"
+                    uuid=data
+            if value == "HostSystemType" :
+
+                currenthostname= str(row[0]).strip()
+                currenthostype=str(data).strip()
+                header="<h1>" + currenthostname + "(" + currenthostype + ") </h1>"
+                file.write(header + '\n')
+
+
+       if found_uuid == "true" :
+            string=str("http://smolt.mythvantage.com/client/show?uuid=")
+            string+=str(uuid)
+            file.write("<A href=\""  )
+            file.write(string)
+            file.write("\" >" +  str(uuid)   + "</A>")
+       else:
+            file.write( "uuid  not found, please submit a hardware profile" )
+
+
+
+       buttonform_top='''
+         <div class="content" style="solid #aaa; width:500px; height:350px; overflow:auto; color:#FFF;text-align:left;">
+	     <form action="/process.py" method="get">
+         '''
+
+
+       buttonform_bottom='''
+           <input name="param2" type="radio"  value="Update" />Update System </>
+           <select name="param3">
+                   <option value="Myth_only">Myth only</option>
+                   <option value="All"> Full System</option>
+           </select>
+           </br>
+           <input name="param2" type="radio"  value="Shutdown" />Shutdown System<br />
+           <input name="param2" type="radio"  value="Reboot" />Reboot System<br />
+           <input name="param2" type="radio"  value="WOL" />Wake on Lan<br />
+           <input name="hiddenparam" type="hidden" value="
+            '''
+       oldurlform='''
+                   "/>
+            <input name="param4" type="hidden" value="
+            '''
+
+
+       closetag='''
+           "/>
+            </br>
+            <input id="submitbutton" type="submit" />
+        </form>
+        </div>
+        '''
+
+       #ordurlform='''
+            #"/>
+            #<input name="param4" type="hidden" value="
+            #'''
+
+       if currenthostype == "Master_backend" :
+            mbeoptions=createdropdown()
+       else:
+            mbeoptions=''
+       returnurl="/hobbit/notes/"
+       returnurl+=str(row[0])
+       returnurl+=(".html")
+       file.write('</br> </br>  ')
+       file.write(buttonform_top)
+       file.write(mbeoptions)
+       file.write(buttonform_bottom)
+       file.write(str(row[0]))
+       file.write(oldurlform)
+       file.write(returnurl)
+       file.write(closetag)
+
+       string=(' </html>')
+       file.write(string)
+
+if __name__ == "__main__":
+    main(sys.argv[1:])
diff --git a/abs/mv-core/hobbitmon/hobbit-alerts.cfg b/abs/mv-core/hobbitmon/hobbit-alerts.cfg
new file mode 100644
index 0000000..66ac7e6
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbit-alerts.cfg
@@ -0,0 +1,124 @@
+#
+# The hobbit-alerts.cfg file controls who receives alerts
+# when a status in the BB system goes into a critical
+# state (usually: red, yellow or purple).
+#
+# This file is made up from RULES and RECIPIENTS.
+#
+# A RULE is a filter made from the PAGE where a host
+# is located in BB; the HOST name, the SERVICE name,
+# the COLOR of the status, the TIME of day, and the
+# DURATION of the event.
+#
+# A RECIPIENT can be a MAIL address, or a SCRIPT.
+#
+# Recipients can also have rules associated with them,
+# that modify the rules for a single recipient, e.g.
+# you can define a rule for alerting, then add an
+# extra criteria e.g. so a single recipient does not get
+# alerted until after 20 minutes.
+#
+# A sample rule:
+#
+# HOST=www.foo.com SERVICE=http
+#      MAIL webadmin@foo.com REPEAT=20 RECOVERED
+#      MAIL cio@foo.com DURATION>60 COLOR=red
+#      SCRIPT /usr/local/bin/sendsms 1234567890 FORMAT=SMS
+#
+# The first line sets up a rule that catches alerts
+# for the host "www.foo.com" and the "http" service.
+# There are three recipients for these alerts: The first
+# one is the "webadmin@foo.com" - they get alerted 
+# immediately when the status goes into an alert state,
+# and the alert is repeated every 20 minutes until it
+# recovers. When it recovers, a message is sent about
+# the recovery.
+#
+# The second recipient is "cio@foo.com". He gets alerted
+# only when the service goes "red" for more than 60 minutes.
+#
+# The third recipient is a script, "/usr/local/bin/sendsms".
+# The real recipient is "1234567890", but it is handled
+# by the script - the script receives a set of environment
+# variables with the details about the alert, including the
+# real recipient. The alert message is preformatted for 
+# an SMS recipient.
+#
+# You can use Perl-compatible "regular expressions" for
+# the PAGE, HOST and SERVICE definitions, by putting a "%"
+# in front of the regex. E.g.
+#
+# HOST=%^www.*
+#      MAIL webadmin@foo.com EXHOST=www.testsite.foo.com
+#
+# This sets up a rule so that alerts from any hostname 
+# beginning with "www" goes to "webadmin@foo.com", EXCEPT
+# alerts from "www.testsite.foo.com"
+#
+# The following keywords are recognized:
+#    PAGE      - rule matching an alert by the name of the
+#                page in BB. This is the name following
+#                the "page", "subpage" or "subparent" keyword
+#                in the bb-hosts file.
+#    EXPAGE    - rule excluding an alert if the pagename matches.
+#    HOST      - rule matching an alert by the hostname.
+#    EXHOST    - rule excluding an alert by matching the hostname.
+#    SERVICE   - rule matching an alert by the service name.
+#    EXSERVICE - rule excluding an alert by matching the hostname.
+#    GROUP     - rule matching an alert by the group ID.
+#                (Group ID's are associated with a status through the
+#                 hobbit-clients.cfg configuration).
+#    EXGROUP   - rule excluding an alert by matching the group ID.
+#    COLOR     - rule matching an alert by color. Can be "red",
+#                "yellow", or "purple".
+#    TIME      - rule matching an alert by the time-of-day. This
+#                is specified as the DOWNTIME timespecification
+#                in the bb-hosts file (see bb-hosts(5)).
+#    DURATION  - Rule matcing an alert if the event has lasted
+#                longer/shorter than the given duration. E.g.
+#                DURATION>10 (lasted longer than 10 minutes) or
+#                DURARION<30 (only sends alerts the first 30 minutes).
+#    RECOVERED - Rule matches if the alert has recovered from an 
+#                alert state.
+#    NOTICE    - Rule matches if the message is a "notify" message
+#                (typically sent when a status is enabled or disabled).
+#    MAIL      - Recipient who receives an e-mail alert. This takes
+#                one parameter, the e-mail address.
+#    SCRIPT    - Recipient that invokes a script. This takes two
+#                parameters: The script filename, and the recipient
+#                that gets passed to the script.
+#    FORMAT    - format of the text message with the alert. Default
+#                is "TEXT" (suitable for e-mail alerts). "SMS" is
+#                a short message with no subject for SMS alerts.
+#                "SCRIPT" is a brief message template for scripts.
+#    REPEAT    - How often an alert gets repeated, in minutes.
+#    STOP      - Valid for a recipient: If this recipient gets an
+#                alert, recipients further down in hobbit-alerts.cfg
+#                are ignored.
+#    UNMATCHED - Matches if no alerts have been sent so far.
+#
+#
+# Script get the following environment variables pre-defined so
+# that they can send a meaningful alert:
+#
+#    BBCOLORLEVEL  - The color of the alert: "red", "yellow" or "purple"
+#    BBALPHAMSG    - The full text of the status log triggering the alert
+#    ACKCODE       - The "cookie" that can be used to acknowledge the alert
+#    RCPT          - The recipient, from the SCRIPT entry
+#    BBHOSTNAME    - The name of the host that the alert is about
+#    MACHIP        - The IP-address of the host that has a problem
+#    BBSVCNAME     - The name of the service that the alert is about
+#    BBSVCNUM      - The numeric code for the service. From SVCCODES definition.
+#    BBHOSTSVC     - HOSTNAME.SERVICE that the alert is about.
+#    BBHOSTSVCCOMMAS - As BBHOSTSVC, but dots in the hostname replaced with commas
+#    BBNUMERIC     - A 22-digit number made by BBSVCNUM, MACHIP and ACKCODE.
+#    RECOVERED     - Is "1" if the service has recovered.
+#    DOWNSECS      - Number of seconds the service has been down.
+#    DOWNSECSMSG   - When recovered, holds the text "Event duration : N" where
+#                    N is the DOWNSECS value.
+
+HOST=* SERVICE=disk
+      SCRIPT /data/srv/hobbit/server/bin/hobbit_notify.sh  1234567890 FORMAT=SMS REPEAT=10h COLOR=yellow
+      SCRIPT /data/srv/hobbit/server/bin/hobbit_notify.sh  1234567890 FORMAT=SMS REPEAT=1h COLOR=red
+
+
diff --git a/abs/mv-core/hobbitmon/hobbit-clients.cfg b/abs/mv-core/hobbitmon/hobbit-clients.cfg
new file mode 100755
index 0000000..c77fce8
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbit-clients.cfg
@@ -0,0 +1,427 @@
+# hobbit-clients.cfg - configuration file for clients reporting to Hobbit
+#
+# This file is used by the hobbitd_client module, when it builds the
+# cpu, disk, files, memory, msgs and procs status messages from the 
+# information reported by clients running on the monitored systems.
+#
+# This file must be installed on the Hobbit server - client installations
+# do not need this file.
+#
+# The file defines a series of rules:
+#    UP     : Changes the "cpu" status when the system has rebooted recently,
+#             or when it has been running for too long.
+#    LOAD   : Changes the "cpu" status according to the system load.
+#    CLOCK  : Changes the "cpu" status if the client system clock is
+#             not synchronized with the clock of the Hobbit server.
+#    DISK   : Changes the "disk" status, depending on the amount of space
+#             used of filesystems.
+#    MEMPHYS: Changes the "memory" status, based on the percentage of real
+#             memory used.
+#    MEMACT : Changes the "memory" status, based on the percentage of "actual"
+#             memory used. Note: Not all systems report an "actual" value.
+#    MEMSWAP: Changes the "memory" status, based on the percentage of swap
+#             space used.
+#    PROC   : Changes the "procs" status according to which processes were found
+#             in the "ps" listing from the client.
+#    LOG    : Changes the "msgs" status according to entries in text-based logfiles.
+#             Note: The "client-local.cfg" file controls which logfiles the client will report.
+#    FILE   : Changes the "files" status according to meta-data for files.
+#             Note: The "client-local.cfg" file controls which files the client will report.
+#    DIR    : Changes the "files" status according to the size of a directory.
+#             Note: The "client-local.cfg" file controls which directories the client will report.
+#    PORT   : Changes the "ports" status according to which tcp ports were found
+#             in the "netstat" listing from the client.
+#    DEFAULT: Set the default values that apply if no other rules match.
+#
+# All rules can be qualified so they apply only to certain hosts, or on certain
+# times of the day (see below).
+#
+# Each type of rule takes a number of parameters:
+#    UP bootlimit toolonglimit
+#             The cpu status goes yellow if the system has been up for less than
+#             "bootlimit" time, or longer than "toolonglimit". The time is in
+#             minutes, or you can add h/d/w for hours/days/weeks - eg. "2h" for
+#             two hours, or "4w" for 4 weeks.
+#             Defaults: bootlimit=1h, toolonglimit=-1 (infinite).
+#
+#    LOAD warnlevel paniclevel
+#             If the system load exceeds "warnlevel" or "paniclevel", the "cpu"
+#             status will go yellow or red, respectively. These are decimal
+#             numbers.
+#             Defaults: warnlevel=5.0, paniclevel=10.0
+#
+#    CLOCK maximum-offset
+#             If the system clock of the client differs from that of the Hobbit
+#             server by more than "maximum-offset" seconds, then the CPU status
+#             column will go yellow. Note that the accuracy of this test is limited,
+#             since it is affected by the time it takes a client status report to
+#             go from the client to the Hobbit server and be processed. You should
+#             therefore allow for a few seconds (5-10) of slack when you define
+#             your max. offset.
+#             It is not wise to use this test, unless your servers are synchronized
+#             to a common clock, e.g. through NTP.
+#
+#    DISK filesystem warnlevel paniclevel
+#    DISK filesystem IGNORE
+#             If the utilization of "filesystem" is reported to exceed "warnlevel"
+#             or "paniclevel", the "disk" status will go yellow or red, respectively.
+#             "warnlevel" and "paniclevel" are either the percentage used, or the
+#             space available as reported by the local "df" command on the host.
+#             For the latter type of check, the "warnlevel" must be followed by the
+#             letter "U", e.g. "1024U".
+#             The special keyword "IGNORE" causes this filesystem to be ignored
+#             completely, i.e. it will not appear in the "disk" status column and
+#             it will not be tracked in a graph. This is useful for e.g. removable
+#             devices, backup-disks and similar hardware.
+#             "filesystem" is the mount-point where the filesystem is mounted, e.g.
+#             "/usr" or "/home". A filesystem-name that begins with "%" is interpreted
+#             as a Perl-compatible regular expression; e.g. "%^/oracle.*/" will match
+#             any filesystem whose mountpoint begins with "/oracle".
+#             Defaults: warnlevel=90%, paniclevel=95%
+#
+#    MEMPHYS warnlevel paniclevel
+#    MEMACT warnlevel paniclevel
+#    MEMSWAP warnlevel paniclevel
+#             If the memory utilization exceeds the "warnlevel" or "paniclevel", the
+#             "memory" status will change to yellow or red, respectively.
+#             Note: The words "PHYS", "ACT" and "SWAP" are also recognized.
+#             Defaults: MEMPHYS warnlevel=100 paniclevel=101 (i.e. it will never go red)
+#                       MEMSWAP warnlevel=50 paniclevel=80
+#                       MEMACT  warnlevel=90 paniclevel=97
+#
+#    PROC processname minimumcount maximumcount color [TRACK=id] [TEXT=displaytext]
+#             The "ps" listing sent by the client will be scanned for how many
+#             processes containing "processname" are running, and this is then
+#             matched against the min/max settings defined here. If the running
+#             count is outside the thresholds, the color of the "procs" status
+#             changes to "color".
+#             To check for a process that must NOT be running: Set minimum and 
+#             maximum to 0.
+#
+#             "processname" can be a simple string, in which case this string must
+#             show up in the "ps" listing as a command. The scanner will find
+#             a ps-listing of e.g. "/usr/sbin/cron" if you only specify "processname"
+#             as "cron".
+#             "processname" can also be a Perl-compatiable regular expression, e.g.
+#             "%java.*inst[0123]" can be used to find entries in the ps-listing for
+#             "java -Xmx512m inst2" and "java -Xmx256 inst3". In that case, 
+#             "processname" must begin with "%" followed by the reg.expression.
+#             If "processname" contains whitespace (blanks or TAB), you must enclose
+#             the full string in double quotes - including the "%" if you use regular
+#             expression matching. E.g.
+#                 PROC "%hobbitd_channel --channel=data.*hobbitd_rrd" 1 1 yellow
+#             or
+#                 PROC "java -DCLASSPATH=/opt/java/lib" 2 5
+#
+#             You can have multiple "PROC" entries for the same host, all of the
+#             checks are merged into the "procs" status and the most severe
+#             check defines the color of the status.
+#
+#             The TRACK=id option causes the number of processes found to be recorded
+#             in an RRD file, with "id" as part of the filename. This graph will then
+#             appear on the "procs" page as well as on the "trends" page. Note that
+#             "id" must be unique among the processes tracked for each host.
+#
+#             The TEXT=displaytext option affects how the process appears on the
+#             "procs" status page. By default, the process is listed with the
+#             "processname" as identification, but if this is a regular expression
+#             it may be a bit difficult to understand. You can then use e.g.
+#             "TEXT=Apache" to make these processes appear with the name "Apache"
+#             instead.
+#
+#             Defaults: mincount=1, maxcount=-1 (unlimited), color="red".
+#                       Note: No processes are checked by default.
+#
+#             Example: Check that "cron" is running:
+#                 PROC cron
+#             Example: Check that at least 5 "httpd" processes are running, but
+#             not more than 20:
+#                 PROC httpd 5 20
+#
+#    LOG filename match-pattern [COLOR=color] [IGNORE=ignore-pattern] [TEXT=displaytext]
+#             In the "client-local.cfg" file, you can list any number of files
+#             that the client will collect log data from. These are sent to the
+#             Hobbit server together with the other client data, and you can then
+#             choose how to analyze the log data with LOG entries.
+#
+#                             ************ IMPORTANT ***************
+#             To monitor a logfile, you *MUST* configure both client-local.cfg
+#             and hobbit-clients.cfg. If you configure only the client-local.cfg
+#             file, the client will collect the log data and you can view it in 
+#             the "client data" display, but it will not affect the color of the
+#             "msgs" status. On the other hand, if you configure only the
+#             hobbit-clients.cfg file, then there will be no log data to inspect,
+#             and you will not see any updates of the "msgs" status either.
+#
+#             "filename" is a filename or pattern. The set of files reported by
+#             the client is matched against "filename", and if they match then
+#             this LOG entry is processed against the data from a file.
+#
+#             "match-pattern": The log data is matched against this pattern. If
+#             there is a match, this log file causes a status change to "color".
+#
+#             "ignore-pattern": The log data that matched "match-pattern" is also
+#             matched against "ignore-pattern". If the data matches the "ignore-pattern",
+#             this line of data does not affect the status color. In other words,
+#             the "ignore-pattern" can be used to refine the strings which cause
+#             a match.
+#             Note: The "ignore-pattern" is optional.
+#
+#             "color": The color which this match will trigger.
+#             Note: "color" is optional, if omitted then "red" will be used.
+#
+#             Example: Go yellow if the text "WARNING" shows up in any logfile.
+#                 LOG %.* WARNING COLOR=yellow
+#
+#             Example: Go red if the text "I/O error" or "read error" appears.
+#                 LOG %/var/(adm|log)/messages %(I/O|read).error COLOR=red
+#
+#    FILE filename [color] [things to check] [TRACK]
+#             NB: The files you wish to monitor must be listed in a "file:..."
+#             entry in the client-local.cfg file, in order for the client to 
+#             report any data about them.
+#
+#             "filename" is a filename or pattern. The set of files reported by
+#             the client is matched against "filename", and if they match then
+#             this FILE entry is processed against the data from that file.
+#
+#             [things to check] can be one or more of the following:
+#             - "NOEXIST" triggers a warning if the file exists. By default,
+#               a warning is triggered for files that have a FILE entry, but
+#               which do not exist.
+#             - "TYPE=type" where "type" is one of "file", "dir", "char", "block", 
+#               "fifo", or "socket". Triggers warning if the file is not of the
+#               specified type.
+#             - "OWNERID=owner" and "GROUPID=group" triggers a warning if the owner
+#               or group does not match what is listed here. "owner" and "group" is
+#               specified either with the numeric uid/gid, or the user/group name.
+#             - "MODE=mode" triggers a warning if the file permissions are not
+#               as listed. "mode" is written in the standard octal notation, e.g.
+#               "644" for the rw-r--r-- permissions.
+#             - "SIZE<max.size" and "SIZE>min.size" triggers a warning it the file
+#               size is greater than "max.size" or less than "min.size", respectively.
+#               You can append "K" (KB), "M" (MB), "G" (GB) or "T" (TB) to the size.
+#               If there is no such modifier, KB is assumed.
+#               E.g. to warn if a file grows larger than 1MB (1024 KB): "SIZE<1M".
+#             - "SIZE=size" triggers a warning it the file size is not what is listed.
+#             - "MTIME>min.mtime" and "MTIME<max.mtime" checks how long ago the file
+#               was last modified (in seconds). E.g. to check if a file was updated
+#               within the past 10 minutes (600 seconds): "MTIME<600". Or to check 
+#               that a file has NOT been updated in the past 24 hours: "MTIME>86400".
+#             - "MTIME=timestamp" checks if a file was last modified at "timestamp".
+#               "timestamp" is a unix epoch time (seconds since midnight Jan 1 1970 UTC).
+#             - "CTIME>min.ctime", "CTIME<max.ctime", "CTIME=timestamp" acts as the
+#               mtime checks, but for the ctime timestamp (when the files' directory
+#               entry was last changed, eg. by chown, chgrp or chmod).
+#             - "MD5=md5sum", "SHA1=sha1sum", "RMD160=rmd160sum" trigger a warning 
+#               if the file checksum using the MD5, SHA1 or RMD160 message digest
+#               algorithms do not match the one configured here. Note: The "file"
+#               entry in the client-local.cfg file must specify which algorithm to use.
+#
+#             "TRACK" causes the size of this file to be tracked in an RRD file, and
+#             shown on the graph on the "files" display.
+#
+#             Example: Check that the /var/log/messages file is not empty and was updated
+#                      within the past 10 minutes, and go yellow if either fails:
+#                 FILE /var/log/messages SIZE>0 MTIME<600 yellow
+#
+#             Example: Check the timestamp, size and SHA-1 hash of the /bin/sh program:
+#                 FILE /bin/sh MTIME=1128514608 SIZE=645140 SHA1=5bd81afecf0eb93849a2fd9df54e8bcbe3fefd72
+#
+#    DIR directory [color] [SIZE<maxsize] [SIZE>minsize] [TRACK]
+#             NB: The directories you wish to monitor must be listed in a "dir:..."
+#             entry in the client-local.cfg file, in order for the client to 
+#             report any data about them.
+#
+#             "directory" is a filename or pattern. The set of directories reported by
+#             the client is matched against "directory", and if they match then
+#             this DIR entry is processed against the data for that directory.
+#
+#             "SIZE<maxsize" and "SIZE>minsize" defines the size limits that the
+#             directory must stay within. If it goes outside these limits, a warning
+#             will trigger. Note the Hobbit uses the raw number reported by the
+#             local "du" command on the client. This is commonly KB, but it may be
+#             disk blocks which are often 512 bytes.
+#
+#             "TRACK" causes the size of this directory to be tracked in an RRD file, 
+#             and shown on the graph on the "files" display.
+#
+#    PORT [LOCAL=addr] [EXLOCAL=addr] [REMOTE=addr] [EXREMOTE=addr] [STATE=state] [EXSTATE=state] [MIN=mincount] [MAX=maxcount] [COLOR=color] [TRACK=id] [TEXT=displaytext]
+#             The "netstat" listing sent by the client will be scanned for how many
+#             sockets match the criteria listed.
+#             "addr" is a (partial) address specification in the format used on 
+#             the output from netstat. This is typically "10.0.0.1:80" for the IP 
+#             10.0.0.1, port 80. Or "*:80" for any local address, port 80.
+#             NB: The Hobbit clients normally report only the numeric data for
+#                 IP-adresses and port-numbers, so you must specify the port
+#                 number (e.g. "80") instead of the service name ("www").
+#             "state" causes only the sockets in the specified state to be included;
+#             it is usually LISTEN or ESTABLISHED.
+#             The socket count is then matched against the min/max settings defined 
+#             here. If the count is outside the thresholds, the color of the "ports" 
+#             status changes to "color".
+#             To check for a socket that must NOT exist: Set minimum and
+#             maximum to 0.
+#
+#             "addr" and "state" can be a simple strings, in which case these string must 
+#             show up in the "netstat" at the appropriate column.
+#             "addr" and "state" can also be a Perl-compatiable regular expression, e.g.
+#             "LOCAL=%(:80|:443)" can be used to find entries in the netstat local port for
+#             both http (port 80) and https (port 443). In that case, portname or state must 
+#             begin with "%" followed by the reg.expression.
+#
+#             The TRACK=id option causes the number of sockets found to be recorded
+#             in an RRD file, with "id" as part of the filename. This graph will then
+#             appear on the "ports" page as well as on the "trends" page. Note that
+#             "id" must be unique among the ports tracked for each host.
+#
+#             The TEXT=displaytext option affects how the port appears on the
+#             "ports" status page. By default, the port is listed with the
+#             local/remote/state rules as identification, but this may be somewhat
+#             difficult to understand. You can then use e.g. "TEXT=Secure Shell" to make 
+#             these ports appear with the name "Secure Shell" instead.
+#
+#             Defaults: state="LISTEN", mincount=1, maxcount=-1 (unlimited), color="red".
+#                       Note: No ports are checked by default.
+#
+#             Example: Check that there is someone listening on the https port:
+#                 PORT "LOCAL=%([.:]443)$" state=LISTEN TEXT=https
+#
+#             Example: Check that at least 5 "ssh" connections are established, but
+#             not more than 10; warn but do not error; graph the connection count:
+#                 PORT "LOCAL=%([.:]22)$" state=ESTABLISHED min=5 max=20 color=yellow TRACK=ssh "TEXT=SSH logins"
+#
+#             Example: Check that ONLY ports 22, 80 and 443 are open for incoming connections:
+#                 PORT STATE=LISTEN LOCAL=%0.0.0.0[.:].* EXLOCAL=%[.:](22|80|443)$ MAX=0 "TEXT=Bad listeners"
+#
+#
+# To apply rules to specific hosts, you can use the "HOST=", "EXHOST=", "PAGE=" 
+# "EXPAGE=", "CLASS=" or "EXCLASS=" qualifiers.  (These act just as in the 
+# hobbit-alerts.cfg file).
+#
+# Hostnames are either a comma-separated list of hostnames (from the bb-hosts file), 
+# "*" to indicate "all hosts", or a Perl-compatible regular expression.
+# E.g. "HOST=dns.foo.com,www.foo.com" identifies two specific hosts; 
+# "HOST=%www.*.foo.com EXHOST=www-test.foo.com" matches all hosts with a name
+# beginning with "www", except the "www-test" host.
+# "PAGE" and "EXPAGE" match the hostnames against the page on where they are
+# located in the bb-hosts file, via the bb-hosts' page/subpage/subparent
+# directives. This can be convenient to pick out all hosts on a specific page.
+#
+# Rules can be dependant on time-of-day, using the standard Hobbit syntax 
+# (the bb-hosts(5) about the NKTIME parameter). E.g. "TIME=W:0800:2200"
+# applied to a rule will make this rule active only on week-days between
+# 8AM and 10PM.
+#
+# You can also associate a GROUP id with a rule. The group-id is passed to
+# the alert module, which can then use it to control who gets an alert when
+# a failure occurs. E.g. the following associates the "httpd" process check 
+# with the "web" group, and the "sshd" check with the "admins" group:
+#    PROC httpd 5 GROUP=web
+#    PROC sshd 1 GROUP=admins
+# In the hobbit-alerts.cfg file, you could then have rules like
+#    GROUP=web
+#       MAIL webmaster@foo.com
+#    GROUP=admins
+#       MAIL root@foo.com
+#
+# Qualifiers must be placed after each rule, e.g.
+#    LOAD 8.0 12.0  HOST=db.foo.com TIME=*:0800:1600
+#
+# If you have multiple rules that you want to apply the same qualifiers to,
+# you can write the qualifiers *only* on one line, followed by the rules. E.g.
+#    HOST=%db.*.foo.com TIME=W:0800:1600
+#       LOAD 8.0 12.0
+#       DISK /db  98 100
+#       PROC mysqld 1
+# will apply the three rules to all of the "db" hosts on week-days between 8AM
+# and 4PM. This can be combined with per-rule qualifiers, in which case the
+# per-rule qualifier overrides the general qualifier; e.g.
+#    HOST=%.*.foo.com
+#       LOAD 7.0 12.0 HOST=bax.foo.com
+#       LOAD 3.0 8.0
+# will result in the load-limits being 7.0/12.0 for the "bax.foo.com" host,
+# and 3.0/8.0 for all other foo.com hosts.
+#
+# The special DEFAULT section can modify the built-in defaults - this must
+# be placed at the end of the file.
+
+HOST=_MASTERBACKEND_
+	PROC sshd 1 
+	PROC lighttpd  
+	PROC hobbitd
+   	PROC crond
+	PROC mysql
+	PROC mythbackend
+        DISK  *  95 99
+        PORT "LOCAL=%([.:]80)$" state=LISTEN TEXT=http
+	PORT "LOCAL=%([.:]1337)$" state=LISTEN TEXT=cgi
+        PORT "LOCAL=%([.:]22)$" state=LISTEN TEXT=ssh
+
+HOST=_MASTERFRONTEND_
+	PROC mythfrontend
+	PROC sshd 1 
+	PROC lighttpd  
+	PROC hobbitd
+   	PROC crond
+	PROC mysql
+	PROC mythbackend
+       DISK  *  95 99
+        PORT "LOCAL=%([.:]80)$" state=LISTEN TEXT=http
+	PORT "LOCAL=%([.:]1337)$" state=LISTEN TEXT=cgi
+        PORT "LOCAL=%([.:]22)$" state=LISTEN TEXT=ssh
+        PORT "LOCAL=%([.:]5000)$" state=LISTEN TEXT=ghosd
+        PORT "LOCAL=%([.:]5001)$" state=LISTEN TEXT=ghosd
+
+
+HOST=_FRONTEND_
+	PROC sshd 1 
+   	PROC crond
+	PROC mythfrontend
+        PORT "LOCAL=%([.:]22)$" state=LISTEN TEXT=ssh
+        PORT "LOCAL=%([.:]5000)$" state=LISTEN TEXT=ghosd
+        PORT "LOCAL=%([.:]5001)$" state=LISTEN TEXT=ghosd
+
+HOST=_SLAVEBACKEND_
+	PROC sshd 1 
+	PROC crond
+	PROC mythbackend
+       DISK  *  95 99
+        PORT "LOCAL=%([.:]22)$" state=LISTEN TEXT=ssh
+
+HOST=_SLAVEFRONTEND_
+	PROC sshd 1 
+	PROC lighttpd  
+	PROC hobbitd
+   	PROC crond
+	PROC mythbackend
+	PROC mythfrontend
+       DISK  *  95 99
+        PORT "LOCAL=%([.:]22)$" state=LISTEN TEXT=ssh
+        PORT "LOCAL=%([.:]5000)$" state=LISTEN TEXT=ghosd
+        PORT "LOCAL=%([.:]5001)$" state=LISTEN TEXT=ghosd
+
+HOST=_STANDALONE_
+	PROC sshd 1 
+	PROC lighttpd  
+	PROC hobbitd
+   	PROC crond
+	PROC mysql
+	PROC mythbackend
+       DISK  *  95 99
+        PORT "LOCAL=%([.:]22)$" state=LISTEN TEXT=ssh
+        PORT "LOCAL=%([.:]5000)$" state=LISTEN TEXT=ghosd
+        PORT "LOCAL=%([.:]5001)$" state=LISTEN TEXT=ghosd
+        PORT "LOCAL=%([.:]80)$" state=LISTEN TEXT=http
+	PORT "LOCAL=%([.:]1337)$" state=LISTEN TEXT=cgi
+        PORT "LOCAL=%([.:]22)$" state=LISTEN TEXT=ssh
+
+DEFAULT
+	# These are the built-in defaults.
+	UP      1h
+	LOAD    5.0 10.0
+	DISK    * 99 100
+	MEMPHYS 100 101
+	MEMSWAP 50 80
+	MEMACT  90 97
+
diff --git a/abs/mv-core/hobbitmon/hobbit-mem-myth.sh b/abs/mv-core/hobbitmon/hobbit-mem-myth.sh
new file mode 100755
index 0000000..642672f
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbit-mem-myth.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+MBEPID=`ps -ef|grep mythbackend |grep -v runsv|grep -v grep|grep -v logger|awk '{print $2 }'`
+MFEPID=`ps -ef|grep mythfrontend |grep -v runsv|grep -v grep|grep -v logger|awk '{print $2 }'`
+
+
+
+COLOR=green      # By default, everything is OK
+
+   # Do whatever you need to test for something
+if [ ! x$MBEPID = x ]
+then
+VmSize=`cat /proc/$MBEPID/status|grep -i vmsize|awk '{print $2 }'`
+VmPeak=`cat /proc/$MBEPID/status|grep -i vmpeak|awk '{print $2 }'`
+VmRSS=`cat /proc/$MBEPID/status|grep -i vmrss |awk '{print $2 }'`
+MSGMBE="
+	VmSize:$VmSize
+	VmPeak:$VmPeak
+	VmRSS:$VmRSS
+	"
+#	echo $MSGMBE
+ # Tell Hobbit about it
+   $BB $BBDISP "data $MACHINE.memmbe $COLOR `date`
+
+   ${MSGMBE}
+
+   " 
+fi
+   
+
+
+if [ ! x$MFEPID = x ]
+then
+VmSize=`cat /proc/$MFEPID/status|grep -i vmsize|awk '{print $2 }'`
+VmPeak=`cat /proc/$MFEPID/status|grep -i vmpeak|awk '{print $2 }'`
+VmRSS=`cat /proc/$MFEPID/status|grep -i vmrss |awk '{print $2 }'`
+MSGMBE="
+	VmSize:$VmSize
+	VmPeak:$VmPeak
+	VmRSS:$VmRSS
+	"
+#	echo $MSGMBE
+ # Tell Hobbit about it
+   $BB $BBDISP "data $MACHINE.memmfe $COLOR `date`
+
+   ${MSGMBE}
+
+   " 
+fi
+   
+
+
+
diff --git a/abs/mv-core/hobbitmon/hobbit-myth-orphan.sh b/abs/mv-core/hobbitmon/hobbit-myth-orphan.sh
new file mode 100755
index 0000000..f9f7d54
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbit-myth-orphan.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+TMPFILE=/tmp/oprhan.result
+/usr/local/bin/myth.find_orphans.pl > $TMPFILE
+
+
+   COLUMN=orphan    # Name of the column
+   COLOR=green      # By default, everything is OK
+
+   # Do whatever you need to test for something
+   # As an example, go red if /tmp/badstuff exists.
+
+thumbs=`grep -A 4 "Summary:" $TMPFILE  |tail -n 1  |  cut  -d" "   -f3 `
+if [ !  x$thumbs  = x0 ]
+then
+    MSG="$thumbs orphaned thumbnails with no corresponding recording"
+    COLOR='yellow'
+fi
+
+missing=`grep -A 2 "Summary:" $TMPFILE  |tail -n 1 | cut -d, -f2 | cut  -d" "  -f2 `
+if [ !  x$missing  = x0 ]
+then
+	COLOR='red'
+MSG="${MSG}
+   `grep -A 2 "Summary:" $TMPFILE  |tail -n 1 ` "
+fi
+
+unkown=`grep -A 5 "Summary:" $TMPFILE  |tail -n 1  |  cut  -d" "   -f3 `
+if [ !  x$unkown  = x0 ]
+then
+	COLOR='red'
+MSG="${MSG}
+`grep -A 5 "Summary:" $TMPFILE  |tail -n 1  `"
+fi
+
+
+MSG="${MSG}
+	
+
+	`cat $TMPFILE`
+	"
+
+   # Tell Hobbit about it
+   $BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date`
+/usr/local/bin/myth.find_orphans.pl
+
+   ${MSG}
+
+   " 
+
+   exit 0
+
+
+
+
diff --git a/abs/mv-core/hobbitmon/hobbit.install b/abs/mv-core/hobbitmon/hobbit.install
new file mode 100755
index 0000000..a39308d
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbit.install
@@ -0,0 +1,32 @@
+post_install() {
+	. /etc/systemconfig
+	if  [ ! -f   /data/srv/hobbit/server/ext/ignoreclient.py ]
+	then
+		echo "#this is a list of hosts to ignore" >  /data/srv/hobbit/server/ext/ignoreclient.py 
+		echo ignorehosts=\"\'ignoreme1\',\'ignoreme2\'\" >> /data/srv/hobbit/server/ext/ignoreclient.py 
+	fi
+	sed -i -e "s/localhost/$hostname/" /data/srv/hobbit/server/etc/bb-hosts
+	sed -i -e "s/localhost/$hostname/" /data/srv/hobbit/server/etc/hobbitserver.cfg
+	chown -R nobody /data/srv/hobbit
+	chown -R nobody /data/srv/httpd/htdocs/hobbit
+	chown -R nobody /var/log/hobbit
+	chown root /data/srv/hobbit/server/bin/hobbitping
+	chmod +s /data/srv/hobbit/server/bin/hobbitping
+
+}
+
+post_upgrade() {
+  post_install $1
+}
+
+post_remove() {
+ rm -f /data/srv/httpd/htdocs/hobbit/index.html
+}
+
+pre_remove() {
+ rm -f /data/srv/httpd/htdocs/hobbit/index.html
+}
+op=$1
+shift
+$op $*
+# vim: ft=sh ts=2
diff --git a/abs/mv-core/hobbitmon/hobbit_myth_data.py b/abs/mv-core/hobbitmon/hobbit_myth_data.py
new file mode 100755
index 0000000..14e3304
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbit_myth_data.py
@@ -0,0 +1,91 @@
+#!/usr/bin/python
+# checks for the number of days of guide data left
+# make sure myth_mtc ran ok
+
+
+import urllib2
+import string
+import time
+import sys,os
+BBLINE = ''
+BBCOLOR="green"
+DATE = time.strftime("%a %b %d %H:%M:%S %Z %Y", time.localtime(time.time()))
+if os.environ['BB']:
+    #print os.environ['BB']
+    BB=os.environ['BB']
+if os.environ['BBDISP']:
+    #print os.environ['BBDISP']
+    BBDISP=os.environ['BBDISP']
+if os.environ['MACHINE']:
+     #print os.environ['MACHINE']
+     MACHINE=os.environ['MACHINE']
+
+
+
+
+def check_mtc():
+    try:
+        infile = open('/var/log/myth_mtc.log', 'r')
+    except(IOError), e:
+        print "couldn't open myth_mtc.log file"
+        return False
+    else:
+        mtc = infile.readlines()
+        for i in mtc:
+           line=i
+        infile.close()
+    if line.strip() == "Finished":
+        return True
+    else:
+        return False
+
+def find_data_left():
+	try:
+		f = urllib2.urlopen("http://localhost:6544")
+	except urllib2.HTTPError, e:
+		if e.code != 200:
+			print 'error: could not find Masterbackend'
+			days_left=-100
+	else:
+		MBE_data = f.readlines()
+		f.close()
+        for line in MBE_data:
+            if line.find("guide data") != -1:
+                if line.find("no guide data") != -1:
+                    days_left = 0
+                else:
+                    line=line.split("(")
+                    line=line[1].split(")")
+                    days_left=line[0].split()[0]
+                return days_left
+
+
+mtc=check_mtc()
+num_days=find_data_left()
+
+if mtc:
+    BBCOLOR="green"
+    msg="\n Maintenace script ran ok \n "
+else:
+    BBCOLOR ="yellow"
+    msg="\n Maintenance script didn't run \n"
+
+if num_days ==  1 :
+    BBCOLOR="yellow"
+    msg+="Only 1 day of guide data left"
+elif num_days == 0 :
+    BBCOLOR="yellow"
+    msg+="No guide data available"
+else:
+    data_check = True
+    BBCOLOR="green"
+    msg+="%s days of guide data" %(num_days)
+
+BBLINE=msg
+LINE = "status " + MACHINE  + ".myth_mtc" + " " + BBCOLOR +  " " + DATE + " " + BBLINE
+cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
+os.system(cmd)
+
+sys.exit(0)
+
+
diff --git a/abs/mv-core/hobbitmon/hobbit_notify.sh b/abs/mv-core/hobbitmon/hobbit_notify.sh
new file mode 100755
index 0000000..7569e2a
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbit_notify.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+#    BBCOLORLEVEL  - The color of the alert: "red", "yellow" or "purple"
+#    BBALPHAMSG    - The full text of the status log triggering the alert
+#    ACKCODE       - The "cookie" that can be used to acknowledge the alert
+#    RCPT          - The recipient, from the SCRIPT entry
+#    BBHOSTNAME    - The name of the host that the alert is about
+#    MACHIP        - The IP-address of the host that has a problem
+#    BBSVCNAME     - The name of the service that the alert is about
+#    BBSVCNUM      - The numeric code for the service. From SVCCODES definition.
+#    BBHOSTSVC     - HOSTNAME.SERVICE that the alert is about.
+#    BBHOSTSVCCOMMAS - As BBHOSTSVC, but dots in the hostname replaced with commas
+#    BBNUMERIC     - A 22-digit number made by BBSVCNUM, MACHIP and ACKCODE.
+#    RECOVERED     - Is "1" if the service has recovered.
+#    DOWNSECS      - Number of seconds the service has been down.
+#    DOWNSECSMSG   - When recovered, holds the text "Event duration : N" where
+echo $BBCOLORLEVEL  > /tmp/hobbitout
+echo $BBALPHAMSG >>/tmp/hobbitout
+echo $RCPT >>/tmp/hobbitout
+echo $BBHOSTNAME >>/tmp/hobbitout
+echo $BBSVCNAME >>/tmp/hobbitout
+echo $BBHOSTSVC >>/tmp/hobbitout
+
+#BBCOLORLEVEL=red
+#BBCOLORLEVEL=yellow
+#BBALPHAMSG="vmtest:disk red [751147]"
+#BBHOSTNAME="vmtest"
+#BBSVCNAME="disk"
+#BBHOSTSVC="vmtest.disk"
+
+if  [ x$BBSVCNAME = xdisk ]
+then
+	case $BBCOLORLEVEL in 
+		red )	
+			/usr/bin/notify.py ALT "$BBHOSTNAME disk is full"
+		;;
+		yellow )
+
+			/usr/bin/notify.py PHN "$BBHOSTNAME disk almost full "
+		;;
+	esac
+fi
+
+
+
+
+
+
diff --git a/abs/mv-core/hobbitmon/hobbitadd.py b/abs/mv-core/hobbitmon/hobbitadd.py
new file mode 100755
index 0000000..b8ae15d
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbitadd.py
@@ -0,0 +1,87 @@
+#!/usr/bin/python
+#polls the hobbit server for ghost clients.  If it finds ghosts it will make a new bb-hosts file 
+#with the new clients. 
+#Will not add duplicate clients
+#return code of 0 means a new file was written, anything else is an error or no inserts occured
+import urllib2
+import string
+import sys
+
+
+def readbb():
+	global bblist
+	try:
+		infile = open('/data/srv/hobbit/etc/bb-hosts', 'r')
+	except(IOError), e:
+	  print "couldn't open bb-hosts file"
+       	  sys.exit(1)
+    	else:
+    		bblist = infile.readlines()
+		infile.close()
+
+
+def findghosts():
+	global infile
+	global bblist
+	global ghostitems
+	global numberitems
+	try:
+		f = urllib2.urlopen("http://localhost/hobbit/hobbit-cgi/hobbit-ghosts.sh?SORT=name&MAXAGE=300&TEXT")
+	except urllib2.HTTPError, e:
+		if e.code != 200:
+			print 'error find ghost list'
+			sys.exit(1)
+	else:
+		ghostitems = f.readlines()
+		f.close()
+		numberitems = len(ghostitems)
+		
+
+def makenewbb():
+	global bblist
+	global ghostitems
+	global numberitems
+	global numinserts
+	numinserts=0
+	outlist = []
+	for item in bblist:
+		if item not in outlist:
+			outlist.append(item)
+	
+	for item in ghostitems:
+		line = item.rstrip()
+		nline = "%s #func" % (line)
+		nline = nline + '\n'
+		if nline not in outlist:
+			outlist.append(nline)
+			print "adding: " + nline
+			numinserts = numinserts + 1
+	if numinserts > 0:
+		outfile = open("/data/srv/hobbit/etc/bb-hosts","w")
+		#outfile = open("/tmp/new-bb","w")
+		for i in outlist:
+			outfile.write(i + '\n' )
+		outfile.close
+
+
+global infile
+global bblist
+global ghostitems
+global numberitems
+global numinserts
+
+readbb()
+findghosts()
+print numberitems
+if numberitems > 0:
+	makenewbb()
+else:
+	print "nothing to add"
+	
+	
+if numinserts < 1:
+	sys.exit(1)
+else:
+	sys.exit(0)
+	
+	
diff --git a/abs/mv-core/hobbitmon/hobbitcheck.sh b/abs/mv-core/hobbitmon/hobbitcheck.sh
new file mode 100755
index 0000000..70f6508
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbitcheck.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+su nobody -c /data/srv/hobbit/server/bin/hobbitadd.py
+#if [ $? = 0 ]
+#then
+#	sv restart hobbit
+#fi
diff --git a/abs/mv-core/hobbitmon/hobbitgraph.cfg.diff b/abs/mv-core/hobbitmon/hobbitgraph.cfg.diff
new file mode 100644
index 0000000..1ca4caf
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbitgraph.cfg.diff
@@ -0,0 +1,42 @@
+--- hobbitgraph.cfg.orig	2008-01-08 09:24:59.000000000 -0600
++++ hobbitgraph.cfg	2008-01-08 09:12:51.000000000 -0600
+@@ -1135,4 +1135,39 @@
+ 	GPRINT:cnt@RRDIDX@:MIN: %6.1lf (min) \:
+ 	GPRINT:cnt@RRDIDX@:AVERAGE: %6.1lf (avg)\n
+ 
++[storage]
++	TITLE Storage Groups 
++	YAXIS  recordings
++	DEF:storage1=storage.rrd:rectvtotal:AVERAGE
++	LINE2:storage1#00CCCC:current recorded
+ 
++	DEF:rectime=storage.rrd:rectvtime:AVERAGE
++	LINE2:rectime#000000:current recorded time
++
++	DEF:livetime=storage.rrd:livetvtime:AVERAGE
++	LINE2:livetime#00CC11:current live  time
++
++
++[memmbe]
++	TITLE Memory usage for MythBackend
++	YAXIS mythbackend
++	DEF:vmsize=memmbe.rrd:VmSize:AVERAGE
++	LINE2:vmsize#00CCCC:vmsize
++
++	DEF:vmpeak=memmbe.rrd:VmPeak:AVERAGE
++	LINE2:vmpeak#000000:vmpeak
++
++	DEF:vmrss=memmbe.rrd:VmRSS:AVERAGE
++	LINE2:vmrss#00CC11:vmrss
++
++[memmfe]
++	TITLE Memory usage for MythFrontend
++	YAXIS mythfrontend
++	DEF:vmsize=memmfe.rrd:VmSize:AVERAGE
++	LINE2:vmsize#00CCCC:vmsize
++
++	DEF:vmpeak=memmfe.rrd:VmPeak:AVERAGE
++	LINE2:vmpeak#000000:vmpeak
++
++	DEF:vmrss=memmfe.rrd:VmRSS:AVERAGE
++	LINE2:vmrss#00CC11:vmrss
diff --git a/abs/mv-core/hobbitmon/hobbitlaunch.cfg.diff b/abs/mv-core/hobbitmon/hobbitlaunch.cfg.diff
new file mode 100644
index 0000000..6239125
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbitlaunch.cfg.diff
@@ -0,0 +1,40 @@
+--- hobbitlaunch.cfg.orig	2008-02-10 22:30:16.000000000 +0000
++++ hobbitlaunch.cfg	2008-08-09 07:05:14.000000000 +0000
+@@ -204,3 +204,37 @@
+ 	LOGFILE $BBSERVERLOGS/hobbitclient.log
+ 	INTERVAL 5m
+ 
++[storage]
++	
++	ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++	CMD /data/srv/hobbit/server/ext/hobbitstorage.py
++	LOGFILE $BBSERVERLOGS/bb-storage.log
++	INTERVAL 5m
++[notes]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD /data/srv/hobbit/server/ext/hbnotes.py
++       LOGFILE $BBSERVERLOGS/bb-notes.log
++       INTERVAL 5m
++[orphan]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD /data/srv/hobbit/server/ext/hobbit-myth-orphan.sh
++       LOGFILE $BBSERVERLOGS/orphan.log
++       INTERVAL 5m
++ 
++[func]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD sudo /data/srv/hobbit/server/ext/hbfunc.py
++       LOGFILE $BBSERVERLOGS/hbfunc.log
++       INTERVAL 5m
++
++[memmyth]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD  /data/srv/hobbit/server/ext/hobbit-mem-myth.sh
++       LOGFILE $BBSERVERLOGS/mythmem.log
++       INTERVAL 5m
++
++[mtc]
++       ENVFILE /data/srv/hobbit/server/etc/hobbitserver.cfg
++       CMD  /data/srv/hobbit/server/ext/hobbit_myth_data.py
++       LOGFILE $BBSERVERLOGS/mtc
++       INTERVAL 5m
diff --git a/abs/mv-core/hobbitmon/hobbitserver.cfg.diff b/abs/mv-core/hobbitmon/hobbitserver.cfg.diff
new file mode 100644
index 0000000..7c829fe
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbitserver.cfg.diff
@@ -0,0 +1,45 @@
+--- hobbitserver.cfg.orig	2008-01-08 15:25:34.000000000 +0000
++++ hobbitserver.cfg	2008-01-08 16:22:56.000000000 +0000
+@@ -105,7 +105,7 @@
+ CONNTEST="TRUE"					# Should we 'ping' hosts ?
+ IPTEST_2_CLEAR_ON_FAILED_CONN="TRUE"		# If TRUE, then failing network tests go CLEAR if conn-test fails.
+ NONETPAGE=""					# Network tests that go YELLOW upon failure
+-FPING="/usr/sbin/fping"					# Path and options for the ping program.
++FPING="hobbitping"					# Path and options for the ping program.
+ NTPDATE="ntpdate"				# Path to the 'ntpdate' program
+ TRACEROUTE="traceroute"                         # How to do traceroute on failing ping tests. Requires "trace" in bb-hosts.
+ BBROUTERTEXT="router"				# What to call a failing intermediate network device.
+@@ -120,7 +120,9 @@
+ # Size of the generated graph images
+ RRDHEIGHT="120"
+ RRDWIDTH="576"		# The RRD's contain 576 data points, so this is a good value
+-
++NCV_storage="*:GAUGE"
++NCV_memmbe="*:GAUGE"
++NCV_memmfe="*:GAUGE"
+ # TEST2RRD defines the status- and data-messages you want to collect RRD data
+ # about. You will normally not need to modify this, unless you have added a
+ # script to pick up RRD data from custom tests (the hobbitd_larrd --extra-script
+@@ -132,11 +134,11 @@
+ #
+ # This is also used by the bb-hostsvc.cgi script to determine if the detailed
+ # status view of a test should include a graph.
+-TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines"
++TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines,storage=ncv,memmbe=ncv,memmfe=ncv"
+ 
+ # This defines which RRD files to include on the "trends" column webpage,
+ # and the order in which they appear.
+-GRAPHS="la,disk,inode,qtree,files,processes,memory,users,vmstat,iostat,tcp.http,tcp,ncv,netstat,ifstat,mrtg::1,ports,temperature,ntpstat,apache,bind,sendmail,mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,clock,lines"
++GRAPHS="la,disk,inode,qtree,files,processes,memory,users,vmstat,iostat,tcp.http,tcp,ncv,netstat,ifstat,mrtg::1,ports,temperature,ntpstat,apache,bind,sendmail,mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,clock,lines,storage,memmbe,memmfe"
+ 
+ # These two settings can be used to restrict what filesystems are being
+ # tracked (i.e. have their utilisation graphed) by Hobbit.
+@@ -158,7 +160,7 @@
+ HTMLCONTENTTYPE="text/html"                     # You can add charset options here.
+ 
+ # Fonts and texts
+-HOBBITLOGO="Hobbit"                             # HTML inserted on all header pages at top-left corner.
++HOBBITLOGO=""                             # HTML inserted on all header pages at top-left corner.
+ MKBBLOCAL="<B><I>Pages Hosted Locally</I></B>"
+ MKBBREMOTE="<B><I>Remote Status Display</I></B>"
+ MKBBSUBLOCAL="<B><I>Subpages Hosted Locally</I></B>"
diff --git a/abs/mv-core/hobbitmon/hobbitstorage.py b/abs/mv-core/hobbitmon/hobbitstorage.py
new file mode 100755
index 0000000..e79f8d1
--- /dev/null
+++ b/abs/mv-core/hobbitmon/hobbitstorage.py
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+# import MySQL module
+
+import MySQLdb
+import sys
+import getopt
+import socket
+import os
+import time
+import string
+
+def LIVETV():
+    grandtotal=0
+    global rectv_total
+    global rectv_time
+    global livetv_total
+    global livetv_time
+    # create a cursor
+    cursor = db.cursor()
+    # execute SQL statement
+
+    cursor.execute("SELECT unix_timestamp(starttime),unix_timestamp(endtime),title FROM recorded where recgroup=(%s) ORDER by starttime;" , ("livetv"))
+    result = cursor.fetchall()
+
+    for row in result:
+      #  print row[0], row[1] ,row [2]
+        start=row[0]
+        end=row[1]
+        if ( end  > start ):
+            total = (end - start) /60
+            grandtotal+=total
+    hours = grandtotal / 60.0
+    days = hours / 24.0
+
+    livetv_total=len(result)
+    livetv_time=hours
+
+
+
+def RECORDTV():
+    grandtotal=0
+    global rectv_total
+    global rectv_time
+    global livetv_total
+    global livetv_time
+    # create a cursor
+    cursor = db.cursor()
+    # execute SQL statement
+
+    cursor.execute("SELECT unix_timestamp(starttime),unix_timestamp(endtime),title FROM recorded where not recgroup=(%s) ORDER by starttime;" , ("livetv"))
+    result = cursor.fetchall()
+
+    for row in result:
+      #  print row[0], row[1] ,row [2]
+        start=row[0]
+        end=row[1]
+        if ( end  > start ):
+            total = (end - start) /60
+            grandtotal+=total
+    hours = grandtotal / 60.0
+    days = hours / 24.0
+
+    rectv_total=len(result)
+    rectv_time=hours
+
+
+
+def printvars():
+    print rectv_time
+    print rectv_total
+    print livetv_time
+    print livetv_total
+
+def sendTObb():
+    DATE = time.strftime("%a %b %d %H:%M:%S %Z %Y", time.localtime(time.time()))
+    if os.environ['BB']:
+        #print os.environ['BB']
+        BB=os.environ['BB']
+    if os.environ['BBDISP']:
+        #print os.environ['BBDISP']
+        BBDISP=os.environ['BBDISP']
+    if os.environ['MACHINE']:
+       # print os.environ['MACHINE']
+        MACHINE=os.environ['MACHINE']
+
+  #  MACHINE = socket.gethostname()
+  #  MACHINE = string.replace(MACHINE, '.', ',')
+    INFOLINE= "\n rectv_total:" + str(rectv_total)
+    INFOLINE= INFOLINE + "\n rectv_time:" + str(rectv_time)
+    INFOLINE= INFOLINE + "\n livetv_total:" + str(livetv_total)
+    INFOLINE= INFOLINE + "\n livetv_time:" + str(livetv_time)
+    INFOLINE= INFOLINE + "\n "
+
+
+
+    LINE = "status " + MACHINE + ".storage green" + " " + DATE + " " + INFOLINE
+
+    cmd = BB + ' ' + BBDISP + ' "' + LINE + '"'
+    os.system(cmd)
+    #print LINE
+
+def main(argv):
+    global db
+    global rectv_total
+    global rectv_time
+    global livetv_total
+    global livetv_time
+
+    rectv_total=0
+    rectv_time=0
+    livetv_total=0
+    livetv_time=0
+
+    db = MySQLdb.connect(host="localhost", user="mythtv", passwd="[REDACTED] db="mythconverg")
+
+    LIVETV()
+    RECORDTV()
+    #printvars()
+    sendTObb()
+if __name__ == "__main__":
+    main(sys.argv[1:])
diff --git a/abs/mv-core/hobbitmon/tuner.png b/abs/mv-core/hobbitmon/tuner.png
new file mode 100644
index 0000000..e4ca198
Binary files /dev/null and b/abs/mv-core/hobbitmon/tuner.png differ
diff --git a/abs/mv-core/hobbitmon/tv.png b/abs/mv-core/hobbitmon/tv.png
new file mode 100644
index 0000000..9c4490c
Binary files /dev/null and b/abs/mv-core/hobbitmon/tv.png differ
-- 
cgit v0.12

