[Orca-checkins] rev 201 - in trunk/orca: . packages packages/rrdtool-1.0.41 packages/rrdtool-1.0.41/src packages/rrdtool-1.0.41/contrib/rrdfetchnames packages/rrdtool-1.0.41/contrib/rrdlastds packages/rrdtool-1.0.41/contrib/add_ds packages/rrdtool-1.0.41/perl-piped packages/rrdtool-1.0.41/doc packages/rrdtool-1.0.41/perl-shared packages/rrdtool-1.0.41/gd1.3
blair at orcaware.com
blair at orcaware.com
Thu Feb 20 15:24:05 PST 2003
Author: blair
Date: 2003-02-20 12:13:18 -0800 (Thu, 20 Feb 2003)
New Revision: 201
Added:
trunk/orca/packages/rrdtool-1.0.41/
Removed:
trunk/orca/packages/rrdtool-1.0.40/
Modified:
trunk/orca/INSTALL
trunk/orca/configure.in
trunk/orca/packages/rrdtool-1.0.41/CHANGES
trunk/orca/packages/rrdtool-1.0.41/CONTRIBUTORS
trunk/orca/packages/rrdtool-1.0.41/Makefile.am
trunk/orca/packages/rrdtool-1.0.41/Makefile.in
trunk/orca/packages/rrdtool-1.0.41/configure
trunk/orca/packages/rrdtool-1.0.41/configure.in
trunk/orca/packages/rrdtool-1.0.41/contrib/add_ds/batch.pl
trunk/orca/packages/rrdtool-1.0.41/contrib/rrdfetchnames/rrdfetchnames.pl
trunk/orca/packages/rrdtool-1.0.41/contrib/rrdlastds/rrdlastds.pl
trunk/orca/packages/rrdtool-1.0.41/doc/RRDp.html
trunk/orca/packages/rrdtool-1.0.41/doc/RRDp.txt
trunk/orca/packages/rrdtool-1.0.41/doc/RRDs.html
trunk/orca/packages/rrdtool-1.0.41/doc/RRDs.txt
trunk/orca/packages/rrdtool-1.0.41/doc/bin_dec_hex.html
trunk/orca/packages/rrdtool-1.0.41/doc/bin_dec_hex.txt
trunk/orca/packages/rrdtool-1.0.41/doc/cdeftutorial.html
trunk/orca/packages/rrdtool-1.0.41/doc/cdeftutorial.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rpntutorial.html
trunk/orca/packages/rrdtool-1.0.41/doc/rpntutorial.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdcgi.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdcgi.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.pod
trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrddump.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrddump.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdfetch.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdfetch.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.pod
trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdinfo.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdinfo.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdlast.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdlast.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdresize.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdresize.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdrestore.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdrestore.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.pod
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtune.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtune.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.pod
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdupdate.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdupdate.txt
trunk/orca/packages/rrdtool-1.0.41/doc/rrdxport.html
trunk/orca/packages/rrdtool-1.0.41/doc/rrdxport.txt
trunk/orca/packages/rrdtool-1.0.41/gd1.3/gd.c
trunk/orca/packages/rrdtool-1.0.41/perl-piped/RRDp.pm
trunk/orca/packages/rrdtool-1.0.41/perl-shared/RRDs.pm
trunk/orca/packages/rrdtool-1.0.41/rrdtool.spec
trunk/orca/packages/rrdtool-1.0.41/src/gdpng.c
trunk/orca/packages/rrdtool-1.0.41/src/gifsize.c
trunk/orca/packages/rrdtool-1.0.41/src/parsetime.c
trunk/orca/packages/rrdtool-1.0.41/src/pngsize.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd.h
trunk/orca/packages/rrdtool-1.0.41/src/rrd_cgi.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_create.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_diff.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_dump.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_error.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_fetch.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_format.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_format.h
trunk/orca/packages/rrdtool-1.0.41/src/rrd_graph.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_graph.h
trunk/orca/packages/rrdtool-1.0.41/src/rrd_info.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_last.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_open.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_resize.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_restore.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_tool.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_tool.h
trunk/orca/packages/rrdtool-1.0.41/src/rrd_tune.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_update.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_xport.c
trunk/orca/packages/rrdtool-1.0.41/src/rrd_xport.h
Log:
Update rrdtool from 1.0.40 to 1.0.41. This should fix the problem
seen on Solaris systems where rrdtool's configure script cannot handle
when Perl's C compiler is set to 'gcc -B/usr/ccs/bin'.
* configure.in:
Bump the required RRDs Perl VERSION number from 1.000401 to 1.000411
and update the directory to find rrdtool in from rrdtool-1.0.40 to
rrdtool-1.0.41.
* INSTALL (Determine which Perl modules need compiling and installing):
Bump the required RRDs Perl VERSION number from 1.000401 to 1.000411
and update the RRDs package version from 1.0.40 to 1.0.41.
* packages/rrdtool-1.0.41:
Renamed from packages/rrdtool-1.0.40. Directory contents updated
from rrdtool-1.0.41.tar.gz.
Modified: trunk/orca/configure.in
==============================================================================
--- trunk/orca/configure.in (original)
+++ trunk/orca/configure.in 2003-02-20 15:23:56.000000000 -0800
@@ -37,8 +37,8 @@
DIGEST_MD5_VER=2.23
MATH_INTERVALSEARCH_DIR=Math-Interpolate-1.05
MATH_INTERVALSEARCH_VER=1.05
-RRDTOOL_DIR=rrdtool-1.0.40
-RRDTOOL_VER=1.000401
+RRDTOOL_DIR=rrdtool-1.0.41
+RRDTOOL_VER=1.000411
STORABLE_DIR=Storable-2.06
STORABLE_VER=2.06
TIME_HIRES_DIR=Time-HiRes-1.42
Modified: trunk/orca/INSTALL
==============================================================================
--- trunk/orca/INSTALL (original)
+++ trunk/orca/INSTALL 2003-02-20 15:23:56.000000000 -0800
@@ -174,7 +174,7 @@
Devel::DProf Not required by Orca 19990108
Digest::MD5 >= 2.23 >= 2.23 2.23
Math::IntervalSearch >= 1.05 >= 1.05 1.05
- RRDs >= 1.000401 >= 1.0.40 1.0.40
+ RRDs >= 1.000411 >= 1.0.41 1.0.41
Storable >= 2.06 >= 2.06 2.06
Time::HiRes Not required by Orca 1.42
Copied: rrdtool-1.0.41 (from rev 200, trunk/orca/packages/rrdtool-1.0.40)
Modified: trunk/orca/packages/rrdtool-1.0.41/configure
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/configure (original)
+++ trunk/orca/packages/rrdtool-1.0.41/configure 2003-02-20 15:23:56.000000000 -0800
@@ -11,7 +11,7 @@
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
-ac_default_prefix=/usr/local/rrdtool-1.0.40
+ac_default_prefix=/usr/local/rrdtool-1.0.41
ac_help="$ac_help
--with-tcllib=DIR location of the tclConfig.sh"
ac_help="$ac_help
@@ -799,7 +799,7 @@
PACKAGE=rrdtool
-VERSION=1.0.40
+VERSION=1.0.41
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
{ echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -948,7 +948,7 @@
echo "$ac_t""$SO_EXT" 1>&6
echo $ac_n "checking for the C compiler perl wants to use to build its modules""... $ac_c" 1>&6
echo "configure:951: checking for the C compiler perl wants to use to build its modules" >&5
- PROBLEMCC=`$PERL -e 'use Config; exit 0 if -x $Config{cc}; map {if (-x "$_/$Config{cc}"){exit 0}} split /:/, $ENV{PATH};print $Config{cc}'`
+ PROBLEMCC=`$PERL -e 'use Config; ($cc = $Config{cc}) =~ s/\s.*//; exit 0 if -x $cc; map {if (-x "$_/$cc"){exit 0}} split /:/, $ENV{PATH};print $Config{cc}'`
if test x$PROBLEMCC != x; then
echo "$ac_t""no" 1>&6
echo Could not find the Compiler: '"'$PROBLEMCC'"'
@@ -3421,10 +3421,10 @@
else
echo "$ac_t""no" 1>&6
- CFLAGS="$_cflags -OPT:IEEE_comparisons=ON"
- echo $ac_n "checking if IEEE math works with the -OPT:IEEE_comparisons=ON switch""... $ac_c" 1>&6
-echo "configure:3427: checking if IEEE math works with the -OPT:IEEE_comparisons=ON switch" >&5
-if eval "test \"`echo '$''{'rd_cv_ieee_ieeecmpswitch'+set}'`\" = set"; then
+ CFLAGS="$_cflags -OPT:IEEE_NaN_inf=ON"
+ echo $ac_n "checking if IEEE math works with the -OPT:IEEE_NaN_inf=ON switch""... $ac_c" 1>&6
+echo "configure:3427: checking if IEEE math works with the -OPT:IEEE_NaN_inf=ON switch" >&5
+if eval "test \"`echo '$''{'rd_cv_ieee_ieeenaninfswitch'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
@@ -3501,6 +3501,103 @@
EOF
if { (eval echo configure:3503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
+ rd_cv_ieee_ieeenaninfswitch=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ rd_cv_ieee_ieeenaninfswitch=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+if test x${rd_cv_ieee_ieeenaninfswitch} = "xyes"; then
+ echo "$ac_t""yes" 1>&6
+
+else
+ echo "$ac_t""no" 1>&6
+ CFLAGS="$_cflags -OPT:IEEE_comparisons=ON"
+ echo $ac_n "checking if IEEE math works with the -OPT:IEEE_comparisons=ON switch""... $ac_c" 1>&6
+echo "configure:3524: checking if IEEE math works with the -OPT:IEEE_comparisons=ON switch" >&5
+if eval "test \"`echo '$''{'rd_cv_ieee_ieeecmpswitch'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3532 "configure"
+#include "confdefs.h"
+
+
+#if HAVE_MATH_H
+# include <math.h>
+#endif
+
+#if HAVE_FLOAT_H
+# include <float.h>
+#endif
+
+#if HAVE_IEEEFP_H
+# include <ieeefp.h>
+#endif
+
+#if HAVE_FP_CLASS_H
+# include <fp_class.h>
+#endif
+
+/* Solaris */
+#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASS))
+# define HAVE_ISINF 1
+# define isinf(a) (fpclass(a) == FP_NINF || fpclass(a) == FP_PINF)
+#endif
+
+/* Digital UNIX */
+#if (! defined(HAVE_ISINF) && defined(HAVE_FP_CLASS) && defined(HAVE_FP_CLASS_H))
+# define HAVE_ISINF 1
+# define isinf(a) (fp_class(a) == FP_NEG_INF || fp_class(a) == FP_POS_INF)
+#endif
+
+/* AIX */
+#if (! defined(HAVE_ISINF) && defined(HAVE_CLASS))
+# define HAVE_ISINF 1
+# define isinf(a) (class(a) == FP_MINUS_INF || class(a) == FP_PLUS_INF)
+#endif
+
+#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_PLUS_INF) && defined(FP_MINUS_INF))
+# define HAVE_ISINF 1
+# define isinf(a) (fpclassify(a) == FP_MINUS_INF || fpclassify(a) == FP_PLUS_INF)
+#endif
+
+#if (! defined(HAVE_ISINF) && defined(HAVE_FPCLASSIFY) && defined(FP_INFINITE))
+# define HAVE_ISINF 1
+# define isinf(a) (fpclassify(a) == FP_INFINITE)
+#endif
+
+#include <stdio.h>
+int main(void){
+ double nan,inf,c,zero;
+ ;
+ /* some math to see if we get a floating point exception */
+ zero=sin(0.0); /* don't let the compiler optimize us away */
+ nan=0.0/zero; /* especially here */
+ inf=1.0/zero; /* and here. I want to know if it can do the magic */
+ /* at run time without sig fpe */
+ c = inf + nan;
+ c = inf / nan;
+ if (! isnan(nan)) {printf ("not isnan(NaN) ... "); return 1;}
+ if (nan == nan) {printf ("nan == nan ... "); return 1;}
+ if (! isinf(inf)) {printf ("not isinf(oo) ... "); return 1;}
+ if (! isinf(-inf)) {printf ("not isinf(-oo) ... "); return 1;}
+ if (! inf > 0) {printf ("not inf > 0 ... "); return 1;}
+ if (! -inf < 0) {printf ("not -inf < 0 ... "); return 1;}
+ return 0;
+ }
+EOF
+if { (eval echo configure:3600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
rd_cv_ieee_ieeecmpswitch=yes
else
echo "configure: failed program was:" >&5
@@ -3519,8 +3616,8 @@
else
echo "$ac_t""no" 1>&6
CFLAGS=$_cflags
- echo $ac_n "checking if IEEE math works with fpsetmask(0)""... $ac_c" 1>&6
-echo "configure:3524: checking if IEEE math works with fpsetmask(0)" >&5
+ echo $ac_n "checking if IEEE math works with fpsetmask(0)""... $ac_c" 1>&6
+echo "configure:3621: checking if IEEE math works with fpsetmask(0)" >&5
if eval "test \"`echo '$''{'rd_cv_ieee_mask'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3528,7 +3625,7 @@
:
else
cat > conftest.$ac_ext <<EOF
-#line 3532 "configure"
+#line 3629 "configure"
#include "confdefs.h"
#include <floatingpoint.h>
@@ -3596,7 +3693,7 @@
return 0;
}
EOF
-if { (eval echo configure:3600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
rd_cv_ieee_mask=yes
else
@@ -3616,11 +3713,11 @@
#define MUST_DISABLE_FPMASK 1
EOF
- PERLFLAGS="CCFLAGS=-DMUST_DISABLE_FPMASK"
+ PERLFLAGS="CCFLAGS=-DMUST_DISABLE_FPMASK"
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking if IEEE math works with signal(SIGFPE,SIG_IGN)""... $ac_c" 1>&6
-echo "configure:3624: checking if IEEE math works with signal(SIGFPE,SIG_IGN)" >&5
+echo "configure:3721: checking if IEEE math works with signal(SIGFPE,SIG_IGN)" >&5
if eval "test \"`echo '$''{'rd_cv_ieee_sigfpe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3628,7 +3725,7 @@
:
else
cat > conftest.$ac_ext <<EOF
-#line 3632 "configure"
+#line 3729 "configure"
#include "confdefs.h"
#include <signal.h>
@@ -3696,7 +3793,7 @@
return 0;
}
EOF
-if { (eval echo configure:3700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
rd_cv_ieee_sigfpe=yes
else
@@ -3716,7 +3813,7 @@
#define MUST_DISABLE_SIGFPE 1
EOF
- PERLFLAGS="CCFLAGS=-DMUST_DISABLE_SIGFPE"
+ PERLFLAGS="CCFLAGS=-DMUST_DISABLE_SIGFPE"
else
echo "$ac_t""no" 1>&6
{ echo "configure: error:
@@ -3751,6 +3848,9 @@
fi
+fi
+
+
trap '' 1 2 15
@@ -4209,7 +4309,7 @@
echo $ac_n "checking in""... $ac_c" 1>&6
-echo "configure:4213: checking in" >&5
+echo "configure:4313: checking in" >&5
echo "$ac_t""and out again" 1>&6
echo $ac_n "ordering CD from http://people.ee.ethz.ch/~oetiker/wish $ac_c" 1>&6
Modified: trunk/orca/packages/rrdtool-1.0.41/Makefile.in
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/Makefile.in (original)
+++ trunk/orca/packages/rrdtool-1.0.41/Makefile.in 2003-02-20 15:23:57.000000000 -0800
@@ -92,7 +92,7 @@
# the following files are not mentioned in any other Makefile
-EXTRA_DIST = COPYRIGHT CHANGES NT-BUILD-TIPS.txt TODO CONTRIBUTORS rrdtool.spec perl-piped/MANIFEST perl-piped/README perl-piped/rrdpl.ds? perl-piped/RRDp.pm perl-piped/Makefile.PL perl-piped/t/base.t perl-shared/MANIFEST perl-shared/README perl-shared/RRDs.xs perl-shared/ntmake.pl perl-shared/Makefile.PL.in perl-shared/t/base.t perl-shared/rrdpl.ds? perl-shared/RRDs.pm
+EXTRA_DIST = COPYRIGHT CHANGES NT-BUILD-TIPS.txt TODO CONTRIBUTORS rrdtool.spec perl-piped/MANIFEST perl-piped/README perl-piped/rrdpl.ds? perl-piped/RRDp.pm perl-piped/Makefile.PL perl-piped/t/base.t perl-shared/MANIFEST perl-shared/README perl-shared/RRDs.xs perl-shared/ntmake.pl perl-shared/Makefile.PL.in perl-shared/t/base.t perl-shared/rrdpl.ds? perl-shared/RRDs.pm rrdtool.spec
CLEANFILES = config.cache
@@ -427,7 +427,7 @@
(cd website && wmk-1.7.4 -f manual tutorial contributors.wml && ./site-sync )
to-versync:
- perl -i -p -e '"$(VERSION)" =~ /(\d+)\.(\d+)\.(\d+)/; $$v=sprintf("%1d.%02d0%02d1" ,$${1},$${2},$${3}); s|VERSION\s*=\s*[\d.]+|VERSION = $$v|' perl-*/RRD?.pm
+ perl -i -p -e '"$(VERSION)" =~ /(\d+)\.(\d+)\.(\d+)/; $$v=sprintf("%1d.%02d0%02d1" ,$${1},$${2},$${3}); s|VERSION\s*=\s*[\d.]+|VERSION = $$v|' perl-*/RRD?.pm rrdtool.spec
perl -i -p -e 's|RRDtool\s+\d+\.\d+\.\d+ |RRDtool $(VERSION) |' src/*.[ch]
to-dist: to-docs dist
@@ -435,7 +435,7 @@
to-scp: to-dist
cp CHANGES archive/$(PACKAGE)-$(VERSION).tar.gz /home/oetiker/public_html/webtools/rrdtool/pub/
- (cd /home/oetiker/public_html/webtools/rrdtool/pub; rm $(PACKAGE).tar.gz; ln -s $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE).tar.gz)
+ (cd /home/oetiker/public_html/webtools/rrdtool/pub; rm $(PACKAGE).tar.gz; ln -s $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE).tar.gz;gmd5sum $(PACKAGE).tar.gz >$(PACKAGE).tar.gz.md5; pgps $(PACKAGE).tar.gz.md5)
# $(RSYNC) CHANGES archive/$(PACKAGE)-$(VERSION).tar.gz tobi at ipn.caida.org:/ipn/web/Tools/RRDtool/pub/
Modified: trunk/orca/packages/rrdtool-1.0.41/configure.in
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/configure.in (original)
+++ trunk/orca/packages/rrdtool-1.0.41/configure.in 2003-02-20 15:23:57.000000000 -0800
@@ -5,6 +5,14 @@
dnl
dnl
+dnl Disable user's CDPATH, otherwise expressions of the form:
+dnl cd $var && pwd
+dnl generate double output, ie. cd command reports the new
+dnl directory location in addition to the pwd command. See
+dnl missing_dir= below. This in turn generates an unterminated
+dnl 's' command for sed when generating the Makefiles.
+unset CDPATH
+
dnl make sure we are being executed in the right place
AC_INIT(src/rrd_tool.c)
@@ -16,11 +24,11 @@
AC_CANONICAL_SYSTEM
dnl tell automake the this script is for rrdtool
-AM_INIT_AUTOMAKE(rrdtool, 1.0.40)
+AM_INIT_AUTOMAKE(rrdtool, 1.0.41)
AC_SUBST(VERSION)
dnl where we install our stuff ...
-AC_PREFIX_DEFAULT( /usr/local/rrdtool-1.0.40 )
+AC_PREFIX_DEFAULT( /usr/local/rrdtool-1.0.41 )
dnl tell automake which file to use as config header
AM_CONFIG_HEADER(config/config.h)
@@ -51,7 +59,7 @@
SO_EXT=`$PERL -e 'use Config; if (defined $Config{so} and $Config{so} ne 'a') {print "$Config{so}\n"} else {print "so\n"};'`
AC_MSG_RESULT($SO_EXT)
AC_MSG_CHECKING(for the C compiler perl wants to use to build its modules)
- PROBLEMCC=`$PERL -e 'use Config; exit 0 if -x $Config{cc}; map {if (-x "$_/$Config{cc}"){exit 0}} split /:/, $ENV{PATH};print $Config{cc}'`
+ PROBLEMCC=`$PERL -e 'use Config; ($cc = $Config{cc}) =~ s/\s.*//; exit 0 if -x $cc; map {if (-x "$_/$cc"){exit 0}} split /:/, $ENV{PATH};print $Config{cc}'`
if test x$PROBLEMCC != x; then
AC_MSG_RESULT(no)
echo Could not find the Compiler: '"'$PROBLEMCC'"'
@@ -299,22 +307,24 @@
AC_IEEE([with the -mieee switch], mswitch, , , ,
[CFLAGS="$_cflags -q float=rndsngl"
AC_IEEE([with the -q float=rndsngl switch], qswitch, , , ,
- [CFLAGS="$_cflags -OPT:IEEE_comparisons=ON"
- AC_IEEE([with the -OPT:IEEE_comparisons=ON switch], ieeecmpswitch, , , ,
- [CFLAGS=$_cflags
- AC_IEEE([with fpsetmask(0)], mask,
- [#include <floatingpoint.h>], [fpsetmask(0)],
- [AC_DEFINE(MUST_DISABLE_FPMASK)
- PERLFLAGS="CCFLAGS=-DMUST_DISABLE_FPMASK"],
- [AC_IEEE([with signal(SIGFPE,SIG_IGN)], sigfpe,
- [#include <signal.h>], [signal(SIGFPE,SIG_IGN)],
- [AC_DEFINE(MUST_DISABLE_SIGFPE)
- PERLFLAGS="CCFLAGS=-DMUST_DISABLE_SIGFPE"],
- AC_MSG_ERROR([
+ [CFLAGS="$_cflags -OPT:IEEE_NaN_inf=ON"
+ AC_IEEE([with the -OPT:IEEE_NaN_inf=ON switch], ieeenaninfswitch, , , ,
+ [CFLAGS="$_cflags -OPT:IEEE_comparisons=ON"
+ AC_IEEE([with the -OPT:IEEE_comparisons=ON switch], ieeecmpswitch, , , ,
+ [CFLAGS=$_cflags
+ AC_IEEE([with fpsetmask(0)], mask,
+ [#include <floatingpoint.h>], [fpsetmask(0)],
+ [AC_DEFINE(MUST_DISABLE_FPMASK)
+ PERLFLAGS="CCFLAGS=-DMUST_DISABLE_FPMASK"],
+ [AC_IEEE([with signal(SIGFPE,SIG_IGN)], sigfpe,
+ [#include <signal.h>], [signal(SIGFPE,SIG_IGN)],
+ [AC_DEFINE(MUST_DISABLE_SIGFPE)
+ PERLFLAGS="CCFLAGS=-DMUST_DISABLE_SIGFPE"],
+ AC_MSG_ERROR([
Your Compiler does not do propper IEEE math ... Please find out how to
make IEEE math work with your compiler and let me know (oetiker at ee.ethz.ch).
Check config.log to see what went wrong ...
-]))])])])])])])])])
+]))])])])])])])])])])
AC_OUTPUT(cgilib-0.4/Makefile \
Modified: trunk/orca/packages/rrdtool-1.0.41/src/gifsize.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/gifsize.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/gifsize.c 2003-02-20 15:23:57.000000000 -0800
@@ -1,5 +1,5 @@
/****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
****************************************************************************
* gifsize.c provides the function gifsize which determines the size of a gif
****************************************************************************/
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_info.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_info.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_info.c 2003-02-20 15:23:57.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_info Get Information about the configuration of an RRD
*****************************************************************************/
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_last.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_last.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_last.c 2003-02-20 15:23:57.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_last.c
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_dump.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_dump.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_dump.c 2003-02-20 15:23:57.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_dump Display a RRD
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_diff.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_diff.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_diff.c 2003-02-20 15:23:57.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1999
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1999
* This code is stolen from rateup (mrtg-2.x) by Dave Rand
*****************************************************************************
* diff calculate the difference between two very long integers available as
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_xport.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_xport.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_xport.c 2003-02-20 15:23:57.000000000 -0800
@@ -1,5 +1,5 @@
/****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
****************************************************************************
* rrd_xport.c export RRD data
****************************************************************************/
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_tool.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_tool.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_tool.c 2003-02-20 15:23:57.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2001
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2001
*****************************************************************************
* rrd_tool.c Startup wrapper
*****************************************************************************/
@@ -20,7 +20,7 @@
{
char help_main[] =
- "RRDtool 1.0.40 Copyright 1997-2001 by Tobias Oetiker <tobi at oetiker.ch>\n\n"
+ "RRDtool 1.0.41 Copyright 1997-2001 by Tobias Oetiker <tobi at oetiker.ch>\n\n"
"Usage: rrdtool [options] command command_options\n\n";
char help_list[] =
@@ -319,7 +319,7 @@
strcmp("v", argv[1]) == 0 ||
strcmp("-v", argv[1]) == 0 ||
strcmp("-version", argv[1]) == 0 )
- printf("RRDtool 1.0.40 Copyright (C) 1997-2001 by Tobias Oetiker <tobi at oetiker.ch>\n");
+ printf("RRDtool 1.0.41 Copyright (C) 1997-2001 by Tobias Oetiker <tobi at oetiker.ch>\n");
else if (strcmp("restore", argv[1]) == 0)
rrd_restore(argc-1, &argv[1]);
else if (strcmp("resize", argv[1]) == 0)
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_xport.h
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_xport.h (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_xport.h 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
****************************************************************************
* rrd_xport.h contains XML related constants
****************************************************************************/
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_update.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_update.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_update.c 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_update.c RRD Update Function
*****************************************************************************
@@ -32,7 +32,7 @@
main(int argc, char **argv){
rrd_update(argc,argv);
if (rrd_test_error()) {
- printf("RRDtool 1.0.40 Copyright 1997-2000 by Tobias Oetiker <tobi at oetiker.ch>\n\n"
+ printf("RRDtool 1.0.41 Copyright 1997-2000 by Tobias Oetiker <tobi at oetiker.ch>\n\n"
"Usage: rrdupdate filename\n"
"\t\t\t[--template|-t ds-name:ds-name:...]\n"
"\t\t\ttime|N:value[:value...]\n\n"
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_tool.h
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_tool.h (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_tool.h 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_tool.h Common Header File
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd.h
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd.h (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd.h 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997,1998, 1999
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997,1998, 1999
*****************************************************************************
* rrdlib.h Public header file for librrd
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_format.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_format.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_format.c 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1999
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1999
*****************************************************************************
* rrd_format.c RRD Database Format helper functions
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/gdpng.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/gdpng.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/gdpng.c 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* gdpng.c add PNG output routine to gd library
*****************************************************************************/
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_fetch.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_fetch.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_fetch.c 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_fetch.c read date from an rrd to use for further processing
*****************************************************************************
@@ -179,12 +179,13 @@
* rrd.rra_def[i].row_cnt
* rrd.stat_head->pdp_step));
+ /* we need step difference in either full or partial case */
+ tmp_step_diff = labs(*step - (rrd.stat_head->pdp_step
+ * rrd.rra_def[i].pdp_cnt));
full_match = *end -*start;
/* best full match */
if(cal_end >= *end
&& cal_start <= *start){
- tmp_step_diff = labs(*step - (rrd.stat_head->pdp_step
- * rrd.rra_def[i].pdp_cnt));
if (first_full || (tmp_step_diff < best_step_diff)){
first_full=0;
best_step_diff = tmp_step_diff;
@@ -198,9 +199,13 @@
tmp_match -= (cal_start-*start);
if (cal_end<*end)
tmp_match -= (*end-cal_end);
- if (first_part || best_match < tmp_match){
+ if (first_part ||
+ (best_match < tmp_match) ||
+ (best_match == tmp_match &&
+ tmp_step_diff < best_step_diff)){
first_part=0;
best_match = tmp_match;
+ best_step_diff = tmp_step_diff;
best_part_rra =i;
}
}
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_error.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_error.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_error.c 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_error.c Common Header File
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_format.h
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_format.h (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_format.h 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997, 1998, 1999
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997, 1998, 1999
*****************************************************************************
* rrd_format.h RRD Database Format header
*****************************************************************************/
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_open.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_open.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_open.c 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_open.c Open an RRD File
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_resize.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_resize.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_resize.c 2003-02-20 15:23:58.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_resize.c Alters size of an RRA
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_graph.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_graph.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_graph.c 2003-02-20 15:23:58.000000000 -0800
@@ -1,6 +1,6 @@
/****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
****************************************************************************
* rrd__graph.c make creates ne rrds
****************************************************************************/
@@ -967,7 +967,7 @@
} else {
int rpi_ptr = im->gdes[gdi].rpnp[rpi].ptr;
int ds_cnt = im->gdes[gdi].rpnp[rpi].ds_cnt;
- stack[++stptr] = im->gdes[rpi_ptr].data[dataidx*ds_cnt+rpi_ptr];
+ stack[++stptr] = im->gdes[rpi_ptr].data[dataidx*ds_cnt+im->gdes[rpi_ptr].ds];
}
break;
case OP_UNKN:
@@ -1478,7 +1478,6 @@
readability. I could thus not use the normal gd functions to write,
but had to embed a slightly compressed bitmap version into the code.
*/
-
int li[]={0,0,1, 0,4,5, 0,8,9, 0,12,14, 0,17,17, 0,21,21,
0,24,24, 0,34,34, 0,40,42, 0,45,45, 0,48,49, 0,52,54,
0,61,61, 0,64,66, 0,68,70, 0,72,74, 0,76,76, 0,78,78,
@@ -1647,16 +1646,16 @@
int leg_c = 0;
int leg_x = border, leg_y = im->ygif;
int leg_cc;
- int glue = 0;
+ int glue = 0, useglue = 1;
int i,ii, mark = 0;
char prt_fctn; /*special printfunctions */
int *legspace;
- if( !(im->extra_flags & NOLEGEND) ) {
- if ((legspace = malloc(im->gdes_c*sizeof(int)))==NULL){
- rrd_set_error("malloc for legspace");
- return -1;
- }
+ if( !(im->extra_flags & NOLEGEND) ) {
+ if ((legspace = malloc(im->gdes_c*sizeof(int)))==NULL){
+ rrd_set_error("malloc for legspace");
+ return -1;
+ }
for(i=0;i<im->gdes_c;i++){
fill_last = fill;
@@ -1695,9 +1694,13 @@
legspace[i]=0;
}
/* who said there was a special tag ... ?*/
- if (prt_fctn=='g') {
+ if (prt_fctn=='J') {
+ useglue = 0;
+ prt_fctn = '\0';
+ } else if (prt_fctn=='g') {
prt_fctn = '\0';
- }
+ }
+
if (prt_fctn == '\0') {
if (i == im->gdes_c -1 ) prt_fctn ='l';
@@ -1719,9 +1722,9 @@
if (prt_fctn != '\0'){
leg_x = border;
- if (leg_c >= 2 && prt_fctn == 'j') {
- glue = (im->xgif - fill - 2* border) / (leg_c-1);
- /* if (glue > 2 * SmallFont->w) glue = 0; */
+ if (leg_c >= 2 && prt_fctn == 'j' && useglue) {
+ glue = (im->xgif - fill - 2* border) / (leg_c-1);
+ /* if (glue > 2 * SmallFont->w) glue = 0; */
} else {
glue = 0;
}
@@ -1849,7 +1852,6 @@
gridstep = im->ygridstep;
labfact = im->ylabfact;
}
-
polyPoints[0].x=im->xorigin;
polyPoints[1].x=im->xorigin+im->xsize;
@@ -1892,15 +1894,18 @@
polyPoints[0].x+2,polyPoints[0].y,graph_col[GRC_MGRID].i);
gdImageLine(gif, polyPoints[1].x-2,polyPoints[0].y,
polyPoints[1].x+2,polyPoints[0].y,graph_col[GRC_MGRID].i);
- } else {
+
+ gdImageLine(gif, polyPoints[0].x,polyPoints[0].y,
+ polyPoints[1].x,polyPoints[0].y,gdStyled);
+ } else if ( !(im->extra_flags & NOMINOR) ) {
gdImageSetStyle(gif, styleMinor, 2);
gdImageLine(gif, polyPoints[0].x-1,polyPoints[0].y,
polyPoints[0].x+1,polyPoints[0].y,graph_col[GRC_GRID].i);
gdImageLine(gif, polyPoints[1].x-1,polyPoints[0].y,
polyPoints[1].x+1,polyPoints[0].y,graph_col[GRC_GRID].i);
+ gdImageLine(gif, polyPoints[0].x,polyPoints[0].y,
+ polyPoints[1].x,polyPoints[0].y,gdStyled);
}
- gdImageLine(gif, polyPoints[0].x,polyPoints[0].y,
- polyPoints[1].x,polyPoints[0].y,gdStyled);
}
}
/* if(im->minval * im->maxval < 0){
@@ -2090,6 +2095,8 @@
polyPoints[1].y = im->yorigin-im->ysize;
/* paint the minor grid */
+ if ( !(im->extra_flags & NOMINOR ))
+ {
for(ti = find_first_time(im->start,
im->xlab_user.gridtm,
im->xlab_user.gridst);
@@ -2111,6 +2118,7 @@
gdImageLine(gif, polyPoints[0].x,polyPoints[1].y-1,
polyPoints[0].x,polyPoints[1].y+1,graph_col[GRC_GRID].i);
}
+ }
/* paint the major grid */
for(ti = find_first_time(im->start,
@@ -2841,12 +2849,13 @@
{"imgformat", required_argument, 0, 'a'},
{"lazy", no_argument, 0, 'z'},
{"no-legend", no_argument, 0, 'g'},
- {"alt-y-grid", no_argument, 0, 257 },
- {"alt-autoscale", no_argument, 0, 258 },
- {"alt-autoscale-max", no_argument, 0, 259 },
- {"units-exponent",required_argument, 0, 260},
- {"step", required_argument, 0, 261},
- {"alt-y-mrtg", no_argument, 0, 262 },
+ {"alt-y-grid", no_argument, 0, 'Y'},
+ {"no-minor", no_argument, 0, 'N'},
+ {"alt-autoscale", no_argument, 0, 'A'},
+ {"alt-autoscale-max", no_argument, 0, 'M'},
+ {"units-exponent",required_argument, 0, 'X'},
+ {"step", required_argument, 0, 'S'},
+ {"alt-y-mrtg", no_argument, 0, 'R'},
{"background", required_argument, 0, 'B'},
{"overlay", required_argument, 0, 'O'},
{"unit", required_argument, 0, 'U'},
@@ -2856,32 +2865,35 @@
opt = getopt_long(argc, argv,
- "s:e:x:y:v:w:h:iu:l:rb:oc:t:f:a:zgB:O:U:",
+ "s:e:x:y:v:w:h:iu:l:rb:oc:t:f:a:zgYAMX:S:RB:O:U:",
long_options, &option_index);
if (opt == EOF)
break;
switch(opt) {
- case 257:
+ case 'Y':
im.extra_flags |= ALTYGRID;
break;
- case 258:
+ case 'N':
+ im.extra_flags |= NOMINOR;
+ break;
+ case 'A':
im.extra_flags |= ALTAUTOSCALE;
break;
- case 259:
+ case 'M':
im.extra_flags |= ALTAUTOSCALE_MAX;
break;
case 'g':
im.extra_flags |= NOLEGEND;
break;
- case 260:
+ case 'X':
im.unitsexponent = atoi(optarg);
break;
- case 261:
+ case 'S':
im.step = atoi(optarg);
break;
- case 262:
+ case 'R':
im.extra_flags |= ALTYMRTG;
break;
case 's':
@@ -3358,9 +3370,9 @@
if (*ptr == '.') ptr++;
while (*ptr >= '0' && *ptr <= '9') ptr++;
- /* Either 'le' or 'lf' must follow here */
+ /* Either 'le', 'lf' or 'lg' must follow here */
if (*ptr++ != 'l') return 1;
- if (*ptr == 'e' || *ptr == 'f') ptr++;
+ if (*ptr == 'e' || *ptr == 'f' || *ptr == 'g') ptr++;
else return 1;
n++;
}
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_cgi.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_cgi.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_cgi.c 2003-02-20 15:23:59.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_cgi.c RRD Web Page Generator
*****************************************************************************/
@@ -128,9 +128,9 @@
server_url = getenv("SERVER_URL");
}
- if (optind != argc-1) {
- fprintf(stderr, "ERROR: expected a filename\n");
- exit(1);
+if ( (optind != argc-2 && strstr( getenv("SERVER_SOFTWARE"),"Apache/2") != NULL) && optind != argc-1) {
+ fprintf(stderr, "ERROR: expected a filename\n");
+ exit(1);
} else {
length = readfile(argv[optind], &buffer, 1);
}
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_create.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_create.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_create.c 2003-02-20 15:23:59.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_create.c creates new rrds
*****************************************************************************/
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_graph.h
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_graph.h (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_graph.h 2003-02-20 15:23:59.000000000 -0800
@@ -1,5 +1,5 @@
/****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
****************************************************************************
* rrd__graph.h
****************************************************************************/
@@ -206,6 +206,7 @@
#define ALTAUTOSCALE_MAX 0x04 /* use alternative algorithm to find upper bounds */
#define NOLEGEND 0x08 /* use no legend */
#define ALTYMRTG 0x10 /* simulate mrtg's scaling */
+#define NOMINOR 0x20 /* Turn off minor gridlines */
#endif
Modified: trunk/orca/packages/rrdtool-1.0.41/src/pngsize.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/pngsize.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/pngsize.c 2003-02-20 15:23:59.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* pngsize.c determine the size of a PNG image
*****************************************************************************/
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_tune.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_tune.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_tune.c 2003-02-20 15:23:59.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* change header parameters of an rrd
*****************************************************************************
Modified: trunk/orca/packages/rrdtool-1.0.41/src/parsetime.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/parsetime.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/parsetime.c 2003-02-20 15:23:59.000000000 -0800
@@ -450,10 +450,10 @@
/*
- * expect() gets a token and complins if it's not the token we want
+ * expect2() gets a token and complins if it's not the token we want
*/
static char *
-expect(int desired, char *complain_fmt, ...)
+expect2(int desired, char *complain_fmt, ...)
{
va_list ap;
va_start( ap, complain_fmt );
@@ -463,7 +463,7 @@
va_end( ap );
return TIME_OK;
-} /* expect */
+} /* expect2 */
/*
@@ -481,7 +481,7 @@
if( doop >= 0 )
{
op = doop;
- try(expect(NUMBER,"There should be number after '%c'", op == PLUS ? '+' : '-'));
+ try(expect2(NUMBER,"There should be number after '%c'", op == PLUS ? '+' : '-'));
prev_multiplier = -1; /* reset months-minutes guessing mechanics */
}
/* if doop is < 0 then we repeat the previous op
@@ -581,7 +581,7 @@
return TIME_OK;
}
if (sc_tokid == COLON ) {
- try(expect(NUMBER,
+ try(expect2(NUMBER,
"Parsing HH:MM syntax, expecting MM as number, got none"));
minute = atoi(sc_token);
if (minute > 59) {
@@ -678,7 +678,7 @@
/* do month mday [year]
*/
mon = (sc_tokid-JAN);
- try(expect(NUMBER,
+ try(expect2(NUMBER,
"the day of the month should follow month name"));
mday = atol(sc_token);
if (token() == NUMBER) {
@@ -733,11 +733,11 @@
if (mon <= 31 && (sc_tokid == SLASH || sc_tokid == DOT)) {
int sep;
sep = sc_tokid;
- try(expect(NUMBER,"there should be %s number after '%c'",
+ try(expect2(NUMBER,"there should be %s number after '%c'",
sep == DOT ? "month" : "day", sep == DOT ? '.' : '/'));
mday = atol(sc_token);
if (token() == sep) {
- try(expect(NUMBER,"there should be year number after '%c'",
+ try(expect2(NUMBER,"there should be year number after '%c'",
sep == DOT ? '.' : '/'));
year = atol(sc_token);
token();
Modified: trunk/orca/packages/rrdtool-1.0.41/src/rrd_restore.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/src/rrd_restore.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/src/rrd_restore.c 2003-02-20 15:23:59.000000000 -0800
@@ -1,5 +1,5 @@
/*****************************************************************************
- * RRDtool 1.0.40 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.41 Copyright Tobias Oetiker, 1997 - 2000
*****************************************************************************
* rrd_restore.c creates new rrd from data dumped by rrd_dump.c
*****************************************************************************/
@@ -278,7 +278,7 @@
FILE *rrd_file=NULL;
if (strcmp("-",file_name)==0){
- *rrd_file= *stdout;
+ rrd_file= stdout;
} else {
int fd = open(file_name,O_RDWR|O_CREAT|O_EXCL,0666);
if (fd == -1 || (rrd_file = fdopen(fd,"wb")) == NULL) {
Modified: trunk/orca/packages/rrdtool-1.0.41/CONTRIBUTORS
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/CONTRIBUTORS (original)
+++ trunk/orca/packages/rrdtool-1.0.41/CONTRIBUTORS 2003-02-20 15:23:59.000000000 -0800
@@ -56,6 +56,7 @@
Christophe Van Ginneken <Christophe.VanGinneken at ubizen.com> (--no-legend)
Milan Obuch <milan.obuch at in.nextra.sk> background unit GD overlay --y-alt-mrtg
Wolfgang Schrimm <wschrimm at uni-hd.de> xport function
+ Travis Brown <tebrown at csh.rit.edu>
Documentation
Modified: trunk/orca/packages/rrdtool-1.0.41/contrib/rrdfetchnames/rrdfetchnames.pl
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/contrib/rrdfetchnames/rrdfetchnames.pl (original)
+++ trunk/orca/packages/rrdtool-1.0.41/contrib/rrdfetchnames/rrdfetchnames.pl 2003-02-20 15:23:59.000000000 -0800
@@ -6,7 +6,7 @@
use lib qw( ../../perl-shared/blib/lib ../../perl-shared/blib/arch );
#makes programm work AFTER install
-use lib qw( /usr/local/rrdtool-1.0.39/lib/perl ../lib/perl );
+use lib qw( /usr/local/rrdtool-1.0.41/lib/perl ../lib/perl );
use vars qw(@ISA $loaded);
Modified: trunk/orca/packages/rrdtool-1.0.41/contrib/rrdlastds/rrdlastds.pl
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/contrib/rrdlastds/rrdlastds.pl (original)
+++ trunk/orca/packages/rrdtool-1.0.41/contrib/rrdlastds/rrdlastds.pl 2003-02-20 15:23:59.000000000 -0800
@@ -13,7 +13,7 @@
#makes things work when run without install
use lib qw( ../../perl-shared/blib/lib ../../perl-shared/blib/arch );
# this is for after install
-use lib qw( /usr/local/rrdtool-1.0.39/lib/perl ../lib/perl );
+use lib qw( /usr/local/rrdtool-1.0.41/lib/perl ../lib/perl );
use RRDs;
Modified: trunk/orca/packages/rrdtool-1.0.41/contrib/add_ds/batch.pl
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/contrib/add_ds/batch.pl (original)
+++ trunk/orca/packages/rrdtool-1.0.41/contrib/add_ds/batch.pl 2003-02-20 15:23:59.000000000 -0800
@@ -43,7 +43,7 @@
########### USER CONFIGURABLE SECTION #######################
my $newdir = "xml";
-my $rrdtool = "/usr/local/rrdtool-1.0.39/bin/rrdtool";
+my $rrdtool = "/usr/local/rrdtool-1.0.41/bin/rrdtool";
my $add_ds = "./add_ds.pl"; # path to add_ds.pl script
########### END CONFIGURE SECTION ###########################
Modified: trunk/orca/packages/rrdtool-1.0.41/perl-piped/RRDp.pm
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/perl-piped/RRDp.pm (original)
+++ trunk/orca/packages/rrdtool-1.0.41/perl-piped/RRDp.pm 2003-02-20 15:23:59.000000000 -0800
@@ -110,7 +110,7 @@
sub end ();
sub read ();
-$VERSION = 1.000401 ;
+$VERSION = 1.000411 ;
sub start ($){
croak "rrdtool is already running"
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtutorial.es.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.html 2003-02-20 15:23:59.000000000 -0800
@@ -1,80 +1,86 @@
-<HTML>
-<HEAD>
-<TITLE>rrdtutorial.es</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdtutorial.es</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#description / descripciÓn">DESCRIPTION / DESCRIPCIÓN</A></LI>
- <LI><A HREF="#tutorial">TUTORIAL</A></LI>
- <UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#tutorial">TUTORIAL</a></li>
+ <ul>
- <LI><A HREF="#importante">Importante</A></LI>
- <LI><A HREF="#¿qué es rrdtool">¿Qué es RRDtool?</A></LI>
- <LI><A HREF="#¿qué datos pueden guardarse en una rrd">¿Qué datos pueden guardarse en una RRD?</A></LI>
- <LI><A HREF="#¿qué puedo hacer con esta herramienta">¿Qué puedo hacer con esta herramienta?</A></LI>
- <LI><A HREF="#¿y si aún tengo problemas después de leer este documento">¿Y si aún tengo problemas después de leer este documento?</A></LI>
- <LI><A HREF="#¿cómo me vas a ayudar">¿Cómo me vas a ayudar?</A></LI>
- <LI><A HREF="#tu primera base de datos en roundrobin">Tu primera base de datos en round-robin</A></LI>
- <LI><A HREF="#¿qué hemos creado">¿Qué hemos creado?</A></LI>
- <LI><A HREF="#hora de hacer algunos gráficos">Hora de hacer algunos gráficos</A></LI>
- <LI><A HREF="#gráficos con un poco de matemática">Gráficos con un poco de matemática</A></LI>
- <LI><A HREF="#magia gráfica">Magia gráfica</A></LI>
- <LI><A HREF="#actualizaciones de verdad">Actualizaciones de verdad</A></LI>
- <LI><A HREF="#unas palabras sobre snmp">Unas palabras sobre SNMP</A></LI>
- <LI><A HREF="#un ejemplo real">Un ejemplo real</A></LI>
- <LI><A HREF="#funciones de consolidación">Funciones de consolidación</A></LI>
- <LI><A HREF="#repasemos lo que sabemos">Repasemos lo que sabemos</A></LI>
- <LI><A HREF="#tipos de fuentes de datos">Tipos de fuentes de datos</A></LI>
- <LI><A HREF="#rrdtool bajo el microscopio">RRDtool bajo el microscopio</A></LI>
- <LI><A HREF="#reinicialización de los contadores">Reinicialización de los contadores</A></LI>
- <LI><A HREF="#remuestreo de los datos">Remuestreo de los datos</A></LI>
- </UL>
+ <li><a href="#importante">Importante</a></li>
+ <li><a href="#¿qué_es_rrdtool">¿Qué es RRDtool?</a></li>
+ <li><a href="#¿qué_datos_pueden_guardarse_en_una_rrd">¿Qué datos pueden guardarse en una RRD?</a></li>
+ <li><a href="#¿qué_puedo_hacer_con_esta_herramienta">¿Qué puedo hacer con esta herramienta?</a></li>
+ <li><a href="#¿y_si_aún_tengo_problemas_después_de_leer_este_documento">¿Y si aún tengo problemas después de leer este documento?</a></li>
+ <li><a href="#¿cómo_me_vas_a_ayudar">¿Cómo me vas a ayudar?</a></li>
+ <li><a href="#tu_primera_base_de_datos_en_roundrobin">Tu primera base de datos en round-robin</a></li>
+ <li><a href="#¿qué_hemos_creado">¿Qué hemos creado?</a></li>
+ <li><a href="#hora_de_hacer_algunos_gráficos">Hora de hacer algunos gráficos</a></li>
+ <li><a href="#gráficos_con_un_poco_de_matemática">Gráficos con un poco de matemática</a></li>
+ <li><a href="#magia_gráfica">Magia gráfica</a></li>
+ <li><a href="#actualizaciones_de_verdad">Actualizaciones de verdad</a></li>
+ <li><a href="#unas_palabras_sobre_snmp">Unas palabras sobre SNMP</a></li>
+ <li><a href="#un_ejemplo_real">Un ejemplo real</a></li>
+ <li><a href="#funciones_de_consolidación">Funciones de consolidación</a></li>
+ <li><a href="#repasemos_lo_que_sabemos">Repasemos lo que sabemos</a></li>
+ <li><a href="#tipos_de_fuentes_de_datos">Tipos de fuentes de datos</a></li>
+ <li><a href="#rrdtool_bajo_el_microscopio">RRDtool bajo el microscopio</a></li>
+ <li><a href="#reinicialización_de_los_contadores">Reinicialización de los contadores</a></li>
+ <li><a href="#remuestreo_de_los_datos">Remuestreo de los datos</a></li>
+ </ul>
- <LI><A HREF="#resumen">RESUMEN</A></LI>
- <LI><A HREF="#lista de correo">LISTA DE CORREO</A></LI>
- <LI><A HREF="#ver tambiÉn">VER TAMBIÉN</A></LI>
- <LI><A HREF="#autor">AUTOR</A></LI>
-</UL>
+ <li><a href="#resumen">RESUMEN</a></li>
+ <li><a href="#lista_de_correo">LISTA DE CORREO</a></li>
+ <li><a href="#ver_tambiÉn">VER TAMBIÉN</a></li>
+ <li><a href="#autor">AUTOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtutorial - Tutorial sobre RRDtool por Alex van den Bogaerdt
-(Traducido al castellano por Jesús Couto Fandiño)</P>
-<div align="right">Versión <a href="rrdtutorial.es.pdf">PDF</a></div><div align="right"><a href="rrdtutorial.html">Enlish</a></div><P>
-<HR>
-<H1><A NAME="description / descripciÓn">DESCRIPTION / DESCRIPCIÓN</A></H1>
-<P>RRDtool es un programa escrito por Tobias Oetiker con la
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtutorial - Tutorial sobre RRDtool por Alex van den Bogaerdt
+(Traducido al castellano por Jesús Couto Fandiño)</p>
+<div align="right">Versión <a href="rrdtutorial.es.pdf">PDF</a></div><div align="right"><a href="rrdtutorial.html">Enlish</a></div><p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>RRDtool es un programa escrito por Tobias Oetiker con la
colaboración de muchas personas en diversas partes del mundo. Alex van
den Bogaerdt escribió este documento para ayudarte a entender que es
-RRDtool y que es lo que puede hacer por ti.</P>
-<P>La documentación que viene con RRDtool puede ser demasiado técnica
+RRDtool y que es lo que puede hacer por ti.</p>
+<p>La documentación que viene con RRDtool puede ser demasiado técnica
para algunos. Este tutorial existe para ayudarte a entender las
funciones básicas de RRdtool. Debe servirte de preparación para leer la
documentación, y además explica algunas ideas generales sobre
-estadística, con un enfoque particular hacia las redes.</P>
-<P>
-<HR>
-<H1><A NAME="tutorial">TUTORIAL</A></H1>
-<P>
-<H2><A NAME="importante">Importante</A></H2>
-<P>¡Por favor, no te adelantes en la lectura de este documento! Esta
+estadística, con un enfoque particular hacia las redes.</p>
+<p>
+</p>
+<hr />
+<h1><a name="tutorial">TUTORIAL</a></h1>
+<p>
+</p>
+<h2><a name="importante">Importante</a></h2>
+<p>¡Por favor, no te adelantes en la lectura de este documento! Esta
primera parte explica los fundamentos básicos. Puede ser aburrida,
pero si te saltas los fundamentos, los ejemplos no te van a tener
-mucho sentido.</P>
-<P>
-<H2><A NAME="¿qué es rrdtool">¿Qué es RRDtool?</A></H2>
-<P>RRDtool significa ``herramienta de bases de datos en round robin''.
+mucho sentido.</p>
+<p>
+</p>
+<h2><a name="¿qué_es_rrdtool">¿Qué es RRDtool?</a></h2>
+<p>RRDtool significa ``herramienta de bases de datos en round robin''.
``Round robin'' es una técnica que implica un número fijo de datos, y un
apuntador al elemento más reciente. Piensa en un circulo con unos
cuantos puntos dibujados alrededor del borde; estos puntos son los
@@ -87,14 +93,15 @@
proceso empieza a reutilizar las antiguas. De esta forma, la base de datos
no crece en tamaño y, por lo tanto, no requiere ningún mantenimiento.
RRDtool trabaja con estas bases de datos en ``round-robin'', guardando y
-recuperando datos de ellas.</P>
-<P>
-<H2><A NAME="¿qué datos pueden guardarse en una rrd">¿Qué datos pueden guardarse en una RRD?</A></H2>
-<P>Lo que se te ocurra. Debes poder medir algún valor dado en distintos
+recuperando datos de ellas.</p>
+<p>
+</p>
+<h2><a name="¿qué_datos_pueden_guardarse_en_una_rrd">¿Qué datos pueden guardarse en una RRD?</a></h2>
+<p>Lo que se te ocurra. Debes poder medir algún valor dado en distintos
momentos en el tiempo y proveer a RRDtool de estos valores. Si puedes
hacer esto, RRDtool puede guardar los datos. Los valores tienen que
-ser numéricos, pero no necesariamente enteros, como en MRTG.</P>
-<P>Muchos ejemplos mencionan SNMP, que es el acrónimo de
+ser numéricos, pero no necesariamente enteros, como en MRTG.</p>
+<p>Muchos ejemplos mencionan SNMP, que es el acrónimo de
``Simple Network Management Protocol'' (Protocolo Simple de
Administración de Redes). Lo de ``simple'' se refiere al protocolo - no
se supone que sea fácil administrar o monitorizar una red. Cuando
@@ -103,10 +110,11 @@
SNMP. Por ahora, simplemente considera a
SNMP como una forma de preguntarle a los dispositivos
por los valores de ciertos contadores que mantienen. Son estos valores
-de estos contadores los que vamos a almacenar en la RRD.</P>
-<P>
-<H2><A NAME="¿qué puedo hacer con esta herramienta">¿Qué puedo hacer con esta herramienta?</A></H2>
-<P>RRDtool se deriva de MRTG (Multi Router
+de estos contadores los que vamos a almacenar en la RRD.</p>
+<p>
+</p>
+<h2><a name="¿qué_puedo_hacer_con_esta_herramienta">¿Qué puedo hacer con esta herramienta?</a></h2>
+<p>RRDtool se deriva de MRTG (Multi Router
Traffic Grapher, Graficador De Tráfico de Múltiples Enrutadores).
MRTG empezó como un pequeño script para poder
graficar el uso de una conexión a la Internet. Luego evolucionó,
@@ -126,48 +134,51 @@
aeropuerto, la temperatura en tu lugar de vacaciones favorito, o en
la nevera, o cualquier otra cosa que te puedas imaginar, mientras
tengas algún sensor con el cual medir los datos y seas capaz de
-pasarle los números a RRDtool.</P>
-<P>
-<H2><A NAME="¿y si aún tengo problemas después de leer este documento">¿Y si aún tengo problemas después de leer este documento?</A></H2>
-<P>Lo primero, ¡léelo otra vez!. Puede que te hayas perdido de algo.
+pasarle los números a RRDtool.</p>
+<p>
+</p>
+<h2><a name="¿y_si_aún_tengo_problemas_después_de_leer_este_documento">¿Y si aún tengo problemas después de leer este documento?</a></h2>
+<p>Lo primero, ¡léelo otra vez!. Puede que te hayas perdido de algo.
Si no puedes compilar el código fuente y usas un sistema operativo
bastante común, casi seguro que no es la culpa de RRDtool.
Probablemente consigas versiones pre-compiladas por la Internet. Si
provienen de una fuente confiable, úsalas. Si, por otro lado, el
programa funciona, pero no te da los resultados que tu esperabas,
puede ser un problema con la configuración; revísala y
-compárala con los ejemplos.</P>
-<P>Hay una lista de correo electrónico y una archivo de la misma. Lee
+compárala con los ejemplos.</p>
+<p>Hay una lista de correo electrónico y una archivo de la misma. Lee
la lista durante unas cuantas semanas, y busca en el archivo. Es
descortés hacer una pregunta sin haber revisado el archivo; ¡puede que
tu problema ya haya sido resuelto antes! Normalmente ocurre así en todas
las listas de correo, no sólo esta. Examina la documentación que vino
-con RRDtool para ver donde está el archivo y como usarlo.</P>
-<P>Te sugiero que te tomes un momento y te subscribas a la lista ahora
-mismo, enviando un mensaje a <A HREF="mailto:rrd-users-request at list.ee.ethz.ch">rrd-users-request at list.ee.ethz.ch</A>
-con título <CODE>subscribe</CODE>. Si eventualmente deseas salirte de la lista,
-envía otro correo a la misma dirección, con título <CODE>unsubscribe</CODE>.</P>
-<P>
-<H2><A NAME="¿cómo me vas a ayudar">¿Cómo me vas a ayudar?</A></H2>
-<P>Dándote descripciones y ejemplos detallados. Asumimos que el seguir
+con RRDtool para ver donde está el archivo y como usarlo.</p>
+<p>Te sugiero que te tomes un momento y te subscribas a la lista ahora
+mismo, enviando un mensaje a <a href="mailto:rrd-users-request at list.ee.ethz.ch">rrd-users-request at list.ee.ethz.ch</a>
+con título <code>subscribe</code>. Si eventualmente deseas salirte de la lista,
+envía otro correo a la misma dirección, con título <code>unsubscribe</code>.</p>
+<p>
+</p>
+<h2><a name="¿cómo_me_vas_a_ayudar">¿Cómo me vas a ayudar?</a></h2>
+<p>Dándote descripciones y ejemplos detallados. Asumimos que el seguir
las instrucciones en el orden en que se presentan aquí te dará
suficiente conocimiento de RRDtool como para que experimentes por tu
cuenta. Si no funciona a la primera, puede que te hallas saltado algo;
siguiendo los ejemplos obtendrás algo de experiencia práctica y, lo
que es más importante, un poco de información sobre como funciona el
-programa.</P>
-<P>Necesitarás saber algo sobre números hexadecimales. Si no, empieza
-por leer ``bin_dec_hex'' antes de continuar.</P>
-<P>
-<H2><A NAME="tu primera base de datos en roundrobin">Tu primera base de datos en round-robin</A></H2>
-<P>En mi opinión, la mejor forma de aprender algo es haciéndolo. ¿Por
+programa.</p>
+<p>Necesitarás saber algo sobre números hexadecimales. Si no, empieza
+por leer ``bin_dec_hex'' antes de continuar.</p>
+<p>
+</p>
+<h2><a name="tu_primera_base_de_datos_en_roundrobin">Tu primera base de datos en round-robin</a></h2>
+<p>En mi opinión, la mejor forma de aprender algo es haciéndolo. ¿Por
qué no empezamos ya? Vamos a crear una base de datos, poner unos cuantos
valores en ella y extraerlos después. La salida que obtengas debe ser
-igual a la que aparece en este documento.</P>
-<P>Empezaremos con algo fácil, comparando un coche con un enrutador, o
+igual a la que aparece en este documento.</p>
+<p>Empezaremos con algo fácil, comparando un coche con un enrutador, o
por decirlo de otra forma, comparando kilómetros con bits y bytes. A
-nosotros nos da lo mismo; son unos números obtenidos en un espacio de tiempo.</P>
-<P>Asumamos que tenemos un dispositivo que transfiere bytes desde y
+nosotros nos da lo mismo; son unos números obtenidos en un espacio de tiempo.</p>
+<p>Asumamos que tenemos un dispositivo que transfiere bytes desde y
hacia la Internet. Este dispositivo tiene un contador que empieza en 0
al encenderse y se incrementa con cada byte transferido. Este contador
tiene un valor máximo; si ese valor se alcanza y se cuenta un byte
@@ -182,70 +193,71 @@
4294967295. Usaremos estos valores en los ejemplos. El dispositivo, cuando
le preguntamos, retorna el valor actual del contador. Como sabemos el
tiempo transcurrido desde la última vez que le preguntamos, sabemos
-cuantos bytes se han transferido <CODE>***en promedio***</CODE> por
+cuantos bytes se han transferido <code>***en promedio***</code> por
segundo. Esto no es muy difícil de calcular; primero en palabras,
-luego en operaciones:</P>
-<OL>
-<LI>
+luego en operaciones:</p>
+<ol>
+<li></li>
Toma el valor actual del contador y réstale el valor anterior
-<P></P>
-<LI>
+<p></p>
+<li></li>
Haz lo mismo con la fecha
-<P></P>
-<LI>
+<p></p>
+<li></li>
Divide el resultado del paso (1) por el resultado del paso (2).
El resultado es la cantidad de bytes por segundo. Si lo
multiplicas por ocho obtienes la cantidad de bits por segundo
-<P></P></OL>
-<PRE>
- bps = (contador_actual - contador_anterior) / (fecha_actual - fecha_anterior) * 8</PRE>
-<P>Para algunos será de ayuda traducir esto a un ejemplo automotor.
+<p></p></ol>
+<pre>
+ bps = (contador_actual - contador_anterior) / (fecha_actual - fecha_anterior) * 8</pre>
+<p>Para algunos será de ayuda traducir esto a un ejemplo automotor.
No prueben estas velocidades en la práctica, y si lo hacen, no me
-echen la culpa por los resultados.</P>
-<P>Usaremos las siguientes abreviaturas:</P>
-<PRE>
+echen la culpa por los resultados.</p>
+<p>Usaremos las siguientes abreviaturas:</p>
+<pre>
M: metros
KM: kilómetros (= 1000 metros).
H: horas
S: segundos
KM/H: kilómetros por hora
- M/S: metros por segundo</PRE>
-<P>Vas conduciendo un coche. A las 12:05, miras el contador en el
+ M/S: metros por segundo</pre>
+<p>Vas conduciendo un coche. A las 12:05, miras el contador en el
salpicadero y ves que el coche ha recorrido 12345
KM. A las 12:10 vuelves a mirar otra vez, y dice
12357 KM. Quiere decir, que has recorrido 12
KM en cinco minutos. Un científico convertiría
esto en metros por segundos; esto es bastante parecido al problema de
-pasar de bytes transferidos en 5 minutos a bits por segundo.</P>
-<P>Viajamos 12 kilómetros, que son 12000 metros. Tardamos 5 minutos, o
-sea 300 segundos. Nuestra velocidad es 12000M / 300S igual a 40 M/S.</P>
-<P>También podemos calcular la velocidad en KM/H: 12 veces 5 minutos
+pasar de bytes transferidos en 5 minutos a bits por segundo.</p>
+<p>Viajamos 12 kilómetros, que son 12000 metros. Tardamos 5 minutos, o
+sea 300 segundos. Nuestra velocidad es 12000M / 300S igual a 40 M/S.</p>
+<p>También podemos calcular la velocidad en KM/H: 12 veces 5 minutos
es una hora, así que multiplicando los 12 KM por 12 obtenemos 144
-KM/H. No intentes esto en casa, o por donde vivo :-)</P>
-<P>Recuerda que estos números son tan sólo promedios. No hay forma de
+KM/H. No intentes esto en casa, o por donde vivo :-)</p>
+<p>Recuerda que estos números son tan sólo promedios. No hay forma de
deducir, viendo sólo los números, si fuiste a una velocidad constante.
-Hay un ejemplo más adelante en el tutorial que explica esto.</P>
-<P>Espero que entiendas que no hay diferencia entre calcular la
+Hay un ejemplo más adelante en el tutorial que explica esto.</p>
+<p>Espero que entiendas que no hay diferencia entre calcular la
velocidad en M/S o bps; sólo la forma en que
recogemos los datos es distinta. Inclusive, la K de kilo en este
-caso es exactamente la misma, ya que en redes k es 1000</P>
-<P>Ahora vamos a crear una base de datos en la que guardar todos estos
+caso es exactamente la misma, ya que en redes k es 1000</p>
+<p>Ahora vamos a crear una base de datos en la que guardar todos estos
interesantes valores. El método a usar para arrancar el programa puede
variar de un sistema de operación a otro, pero asumamos que lo puedes
resolver tu mismo en caso que se diferente en el sistema que usas.
Asegúrate de no sobreescribir ningún archivo en tu sistema al
ejecutarlo y escribe todo como una sola línea (tuve que partirlo para
-que fuera legible), saltándote todos los caracteres '\'</P>
-<PRE>
+que fuera legible), saltándote todos los caracteres '\'</p>
+<pre>
rrdtool create test.rrd \
--start 920804400 \
DS:speed:COUNTER:600:U:U \
RRA:AVERAGE:0.5:1:24 \
- RRA:AVERAGE:0.5:6:10</PRE>
-<P>(o sea, escribe: <CODE>rrdtool create test.rrd --start 920804400 DS ...</CODE>)</P>
-<P>
-<H2><A NAME="¿qué hemos creado">¿Qué hemos creado?</A></H2>
-<P>Hemos creado una base de datos en round robin llamada test
+ RRA:AVERAGE:0.5:6:10</pre>
+<p>(o sea, escribe: <code>rrdtool create test.rrd --start 920804400 DS ...</code>)</p>
+<p>
+</p>
+<h2><a name="¿qué_hemos_creado">¿Qué hemos creado?</a></h2>
+<p>Hemos creado una base de datos en round robin llamada test
(test.rrd), que empieza desde el mediodía del día en que empecé a
escribir este documento (7 de marzo de 1999). En ella se guarda una
fuente de datos (DS), llamada ``speed'', que se
@@ -254,21 +266,21 @@
sea, no hay nada que promediar), y mantiene 24 muestras (24 por 5
minutos = 2 horas de muestras). El otro promedia 6 muestras (media
hora), y guarda 10 de estos promedios (o sea, 5 horas). Las opciones
-restantes las veremos más adelante.</P>
-<P>RRDtool usa un formato de ``fecha'' especial que viene del mundo de
+restantes las veremos más adelante.</p>
+<p>RRDtool usa un formato de ``fecha'' especial que viene del mundo de
UNIX. Estas ``fechas'' son el número de segundos
que han pasado desde el primero de enero de 1970, zona UTC. Este
número de segundos se convierte luego en la fecha local, por lo que
-varia según la franja horaria.</P>
-<P>Lo más probable es que tu no vivas en la misma parte del mundo que
+varia según la franja horaria.</p>
+<p>Lo más probable es que tu no vivas en la misma parte del mundo que
yo, por lo que tu franja horaria será diferente. En los ejemplos,
cuando mencione horas, puede que no sean las mismas para ti; esto no
afecta mucho los resultados, sólo tienes que corregir las horas
mientras lees. Por ejemplo, las 12:05 para mí son las 11:05 para los
-amigos en la Gran Bretaña.</P>
-<P>Ahora tenemos que llenar nuestra base de datos con valores. Vamos a
-suponer que leímos estos datos:</P>
-<PRE>
+amigos en la Gran Bretaña.</p>
+<p>Ahora tenemos que llenar nuestra base de datos con valores. Vamos a
+suponer que leímos estos datos:</p>
+<pre>
12:05 12345 KM
12:10 12357 KM
12:15 12363 KM
@@ -283,35 +295,31 @@
13:00 12415 KM
13:05 12420 KM
13:10 12422 KM
- 13:15 12423 KM</PRE>
-<P>Llenaremos la base de datos así:</P>
-<PRE>
+ 13:15 12423 KM</pre>
+<p>Llenaremos la base de datos así:</p>
+<pre>
rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
- rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423</PRE>
-<P>Lo que significa: actualiza nuestra base de datos test con los
-siguientes valores:</P>
-<PRE>
+ rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423</pre>
+<p>Lo que significa: actualiza nuestra base de datos test con los
+siguientes valores:</p>
+<pre>
fecha 920804700, valor 12345
fecha 920805000, valor 12357
-</PRE>
-<PRE>
-
- etcétera.</PRE>
-<P>Como ves, pueden introducirse más de un valor en la base de datos
+
+ etcétera.</pre>
+<p>Como ves, pueden introducirse más de un valor en la base de datos
por ejecución del comando. Yo los agrupo de tres en tres para hacerlo
-legible, pero en realidad el máximo depende del sistema de operación.</P>
-<P>Ahora podemos recuperar los datos usando ``rrdtool fetch'':</P>
-<PRE>
- rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200</PRE>
-<P>Debes obtener esto como salida:</P>
-<PRE>
+legible, pero en realidad el máximo depende del sistema de operación.</p>
+<p>Ahora podemos recuperar los datos usando ``rrdtool fetch'':</p>
+<pre>
+ rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200</pre>
+<p>Debes obtener esto como salida:</p>
+<pre>
speed
-</PRE>
-<PRE>
-
+
920804400: NaN
920804700: NaN
920805000: 4.0000000000e-02
@@ -328,49 +336,51 @@
920808300: 1.6666666667e-02
920808600: 6.6666666667e-03
920808900: 3.3333333333e-03
- 920809200: NaN</PRE>
-<P>Si no, hay algo mal. Probablemente tu sistema de operación muestre ``NaN''
+ 920809200: NaN</pre>
+<p>Si no, hay algo mal. Probablemente tu sistema de operación muestre ``NaN''
de otra forma; representa ``Not a Number'', o sea ``No es un número''. Si
aparece ``U'' o ``UNKN'' o algo parecido, es lo mismo. Si hay alguna otra
diferencia, probablemente te equivocaste al introducir algún P valor
(asumiendo que mi tutorial está bien, por supuesto :-). En ese caso, borra
-la base de datos y prueba de nuevo.</P>
-<P>Lo que representa exactamente esta salida lo vamos más adelante en el tutorial.</P>
-<P>
-<H2><A NAME="hora de hacer algunos gráficos">Hora de hacer algunos gráficos</A></H2>
-<P>Prueba este comando:</P>
-<PRE>
+la base de datos y prueba de nuevo.</p>
+<p>Lo que representa exactamente esta salida lo vamos más adelante en el tutorial.</p>
+<p>
+</p>
+<h2><a name="hora_de_hacer_algunos_gráficos">Hora de hacer algunos gráficos</a></h2>
+<p>Prueba este comando:</p>
+<pre>
rrdtool graph speed.gif \
--start 920804400 --end 920808000 \
DEF:myspeed=test.rrd:speed:AVERAGE \
- LINE2:myspeed#FF0000</PRE>
-<P>Este comando crea speed.gif, un gráfico de los datos desde las
+ LINE2:myspeed#FF0000</pre>
+<p>Este comando crea speed.gif, un gráfico de los datos desde las
12:00 hasta las 13:00. Contiene una definición de la variable myspeed
y define el color como rojo. Notarás que el gráfico no comienza
exactamente a las 12:00 sino a las 12:05, y es porque no tenemos datos
suficientes como para calcular el promedio de velocidad antes de ese
momento. Esto sólo ocurre en caso de que se pierdan algún muestreo, lo
-que esperamos que no debe ocurrir muy a menudo.</P>
-<P>Si ha funcionado, ¡felicitaciones!. Si no, revisa qué puede estar mal.</P>
-<P>La definición de colores se construye a partir del rojo, verde y
+que esperamos que no debe ocurrir muy a menudo.</p>
+<p>Si ha funcionado, ¡felicitaciones!. Si no, revisa qué puede estar mal.</p>
+<p>La definición de colores se construye a partir del rojo, verde y
azul. Especificas cuanto de cada uno de estos componentes vas a usar
en hexadecimal: 00 significa ``nada de este color'' y FF significa
``este color a máxima intensidad''. El ``color'' blanco es la mezcla
del rojo, verde y azul a toda intensidad:
-FFFFFF; el negro es la ausencia de todos los colores: 000000.</P>
-<PRE>
+FFFFFF; el negro es la ausencia de todos los colores: 000000.</p>
+<pre>
rojo #FF0000
verde #00FF00
azul #0000FF
violeta #FF00FF (mezcla de rojo y azul)
- gris #555555 (un tercio de cada uno de los colores)</PRE>
-<P>El archivo GIF que acabas de crear puede
+ gris #555555 (un tercio de cada uno de los colores)</pre>
+<p>El archivo GIF que acabas de crear puede
verse con tu visor de archivos de imagen favorito. Los navegadores lo
mostrarán usando la URL
-``file://el/camino/de/directorios/hasta/speed.gif''</P>
-<P>
-<H2><A NAME="gráficos con un poco de matemática">Gráficos con un poco de matemática</A></H2>
-<P>Cuando veas la imagen, notarás que el eje horizontal tiene unas
+``file://el/camino/de/directorios/hasta/speed.gif''</p>
+<p>
+</p>
+<h2><a name="gráficos_con_un_poco_de_matemática">Gráficos con un poco de matemática</a></h2>
+<p>Cuando veas la imagen, notarás que el eje horizontal tiene unas
etiquetas marcando las 12:10, 12:20, 12:30, 12:40 y 12:50. Los otros
dos momentos (12:00 y 13:00) no se pueden mostrar bien por falta de datos, así que
el programa se los salta. El eje vertical muestra el rango de los valores que
@@ -380,41 +390,41 @@
0.04, lo que RRDtool muestra como ``40m'', o sea ``40/1000''. ¡La
``m''' no tiene nada que ver con metros, kilómetros o milímetros!.
RRDtool no sabe nada de unidades, el sólo trabaja con números, no con
-metros.</P>
-<P>Donde nos equivocamos fue en que debimos medir en metros. Así,
-(12357000-12345000)/300 = 12000/300 = 40.</P>
-<P>Vamos a corregirlo. Podríamos recrear la base de datos con los
+metros.</p>
+<p>Donde nos equivocamos fue en que debimos medir en metros. Así,
+(12357000-12345000)/300 = 12000/300 = 40.</p>
+<p>Vamos a corregirlo. Podríamos recrear la base de datos con los
valores correctos, pero hay una forma mejor: ¡haciendo los cálculos
-mientras creamos el archivo gif!</P>
-<PRE>
+mientras creamos el archivo gif!</p>
+<pre>
rrdtool graph speed2.gif \
--start 920804400 --end 920808000 \
--vertical-label m/s \
DEF:myspeed=test.rrd:speed:AVERAGE \
CDEF:realspeed=myspeed,1000,* \
- LINE2:realspeed#FF0000</PRE>
-<P>Cuando veas esta imagen, notarás que la ``m'' ha desaparecido, y
+ LINE2:realspeed#FF0000</pre>
+<p>Cuando veas esta imagen, notarás que la ``m'' ha desaparecido, y
ahora tienes los resultados correctos. Además hemos añadido una
-etiqueta a la imagen. Apartando esto, el archivo GIF es el mismo.</P>
-<P>Las operaciones están en la sección del CDEF
+etiqueta a la imagen. Apartando esto, el archivo GIF es el mismo.</p>
+<p>Las operaciones están en la sección del CDEF
y están escritas en Notación Polaca Inversa (Reverse Polish Notation o
``RPN''). En palabras, dice: ``toma la fuente de
datos myspeed y el numero 1000, y multiplícalos''. No te molestes en
meterte con RPN todavía, la veremos con más
detalle más adelante. Además, puede que quieras leer mi tutorial sobre
-los CDEF y el tutorial de Steve Rader sobre RPN, pero primero terminemos con este.</P>
-<P>¡Un momento! Si podemos multiplicar los valores por mil, entonces,
+los CDEF y el tutorial de Steve Rader sobre RPN, pero primero terminemos con este.</p>
+<p>¡Un momento! Si podemos multiplicar los valores por mil, entonces,
¡también debería ser posible el mostrar la velocidad en kilómetros por
-hora usando los mismos datos!</P>
-<P>Para cambiar el valor que medimos en metros por segundo, calculamos
+hora usando los mismos datos!</p>
+<p>Para cambiar el valor que medimos en metros por segundo, calculamos
los metros por hora (valor * 3600) y dividimos entre 1000 para sacar
los kilómetros por hora. Todo junto hace valor * (3600/1000) == valor
-* 3.6.</P>
-<P>Como en nuestra base de datos cometimos un error guardando los
+* 3.6.</p>
+<p>Como en nuestra base de datos cometimos un error guardando los
valores en kilómetros, debemos compensar por ello, multiplicando por
-100, por lo que al aplicar esta corrección nos queda valor * 3600.</P>
-<P>Ahora vamos a crear este gif, agreándole un poco más de magia...</P>
-<PRE>
+100, por lo que al aplicar esta corrección nos queda valor * 3600.</p>
+<p>Ahora vamos a crear este gif, agreándole un poco más de magia...</p>
+<pre>
rrdtool graph speed3.gif \
--start 920804400 --end 920808000 \
--vertical-label km/h \
@@ -424,24 +434,25 @@
CDEF:good=kmh,100,GT,0,kmh,IF \
HRULE:100#0000FF:"Maximum allowed" \
AREA:good#00FF00:"Good speed" \
- AREA:fast#FF0000:"Too fast"</PRE>
-<P>Esto luce mucho mejor. La velocidad en KM/H,
+ AREA:fast#FF0000:"Too fast"</pre>
+<p>Esto luce mucho mejor. La velocidad en KM/H,
y además tenemos una línea extra mostrando la velocidad máxima
permitida (en el camino por donde conduzco). También le cambie los
-colores de la velocidad, y ahora paso de ser una línea a un área.</P>
-<P>Los cálculos son más complejos ahora. Para calcular la velocidad ``aceptable'':</P>
-<PRE>
+colores de la velocidad, y ahora paso de ser una línea a un área.</p>
+<p>Los cálculos son más complejos ahora. Para calcular la velocidad ``aceptable'':</p>
+<pre>
Verifica si la velocidad en kmh es mayor que 100 ( kmh,100 ) GT
- Si es así, retorna 0, si no, retorna la velocidad ((( kmh,100 ) GT ), 0, kmh) IF</PRE>
-<P>Para calcular la parte de velocidad ``excesiva'':</P>
-<PRE>
+ Si es así, retorna 0, si no, retorna la velocidad ((( kmh,100 ) GT ), 0, kmh) IF</pre>
+<p>Para calcular la parte de velocidad ``excesiva'':</p>
+<pre>
Verifica si la velocidad en kmh es mayor que 100 ( kmh,100 ) GT
- Si es así, retorna la velocidad, si no, retorna 0 ((( kmh,100) GT ), kmh, 0) IF</PRE>
-<P>
-<H2><A NAME="magia gráfica">Magia gráfica</A></H2>
-<P>Me gusta creer que virtualmente no hay limites para lo que RRDtool puede
-hacer con los datos. No voy a explicarlo en detalle, pero mira este GIF:</P>
-<PRE>
+ Si es así, retorna la velocidad, si no, retorna 0 ((( kmh,100) GT ), kmh, 0) IF</pre>
+<p>
+</p>
+<h2><a name="magia_gráfica">Magia gráfica</a></h2>
+<p>Me gusta creer que virtualmente no hay limites para lo que RRDtool puede
+hacer con los datos. No voy a explicarlo en detalle, pero mira este GIF:</p>
+<pre>
rrdtool graph speed4.gif \
--start 920804400 --end 920808000 \
--vertical-label km/h \
@@ -453,48 +464,50 @@
HRULE:100#0000FF:"Maximum allowed" \
AREA:good#00FF00:"Good speed" \
AREA:fast#550000:"Too fast" \
- STACK:over#FF0000:"Over speed"</PRE>
-<P>Vamos a crear una página HTML simple para ver los tres archivos GIF:</P>
-<PRE>
+ STACK:over#FF0000:"Over speed"</pre>
+<p>Vamos a crear una página HTML simple para ver los tres archivos GIF:</p>
+<pre>
<HTML><HEAD><TITLE>Velocidad</TITLE></HEAD><BODY>
<IMG src="speed2.gif" alt="Speed in meters per second">
<BR>
<IMG src="speed3.gif" alt="Speed in kilometers per hour">
<BR>
<IMG src="speed4.gif" alt="Traveled too fast?">
- </BODY></HTML></PRE>
-<P>Guárdalo como ``speed.html'' o algo parecido, y examínalo con un navegador.</P>
-<P>Ahora, todo lo que tienes que hacer es medir los datos regularmente
+ </BODY></HTML></pre>
+<p>Guárdalo como ``speed.html'' o algo parecido, y examínalo con un navegador.</p>
+<p>Ahora, todo lo que tienes que hacer es medir los datos regularmente
y actualizar la base de datos. Cuando quieras verlos, vuelve a crear
los archivos GIF y asegúrate que se carguen de nuevo en tu navegador
(Nota: presionar el botón de ``refrescar'' puede no ser suficiente; en
particular, Netscape tiene un problema al respecto, por lo que
-necesitaras darle al botón mientras presionas la tecla de mayúsculas.</P>
-<P>
-<H2><A NAME="actualizaciones de verdad">Actualizaciones de verdad</A></H2>
-<P>Ya hemos usado el comando ``update''; vimos que recibia uno o más
+necesitaras darle al botón mientras presionas la tecla de mayúsculas.</p>
+<p>
+</p>
+<h2><a name="actualizaciones_de_verdad">Actualizaciones de verdad</a></h2>
+<p>Ya hemos usado el comando ``update''; vimos que recibia uno o más
parámetros en el formato: ``<fecha>:<valor>''. Para
facilitarte las cosas, puedes obtener la fecha actual colocando
``N'' en la fecha. También podrías usar la función
``time'' de Perl para obtenerla. El ejemplo más corto de todo el
-tutorial :)</P>
-<PRE>
- perl -e 'print time, "\n" '</PRE>
-<P>Ahora, la forma de poner a correr un programa a intervalos
+tutorial :)</p>
+<pre>
+ perl -e 'print time, "\n" '</pre>
+<p>Ahora, la forma de poner a correr un programa a intervalos
regulares de tiempo depende del sistema de operación. La
-actualización, en pseudo-código, sería:</P>
-<PRE>
+actualización, en pseudo-código, sería:</p>
+<pre>
Toma el valor, colócalo en la variable "$speed"
- rrdtool update speed.rrd N:$speed</PRE>
-<P>(Pero no lo hagas sobre nuestra base de datos de pruebas, que aún
-la vamos a usar en otros ejemplos.</P>
-<P>Eso es todo. Ejecutando este script cada 5 minutos, lo único que
+ rrdtool update speed.rrd N:$speed</pre>
+<p>(Pero no lo hagas sobre nuestra base de datos de pruebas, que aún
+la vamos a usar en otros ejemplos.</p>
+<p>Eso es todo. Ejecutando este script cada 5 minutos, lo único que
tienes que hacer para ver los gráficos actuales es correr los ejemplos
anteriores, que también puedes poner en un script. Luego de correrlo,
-basta con cargar index.html</P>
-<P>
-<H2><A NAME="unas palabras sobre snmp">Unas palabras sobre SNMP</A></H2>
-<P>Me imagino que muy pocas personas serán capaces de obtener en su
+basta con cargar index.html</p>
+<p>
+</p>
+<h2><a name="unas_palabras_sobre_snmp">Unas palabras sobre SNMP</a></h2>
+<p>Me imagino que muy pocas personas serán capaces de obtener en su
ordenador datos reales de su coche cada 5 minutos; los demás nos
tendremos que conformar con algún otro contador. Puedes, por ejemplo,
medir la cantidad de páginas que ha hecho una impresora, cuanto café
@@ -508,23 +521,23 @@
como recoger los datos. Hay quien dirá que hay herramientas que pueden
recoger estos datos por ti. ¡Es cierto! Pero, creo que es importante
darse cuenta de que no son necesarias. Cuando tienes que determinar
-porqué algo no funciona, necesitas saber cómo funciona en primer lugar.</P>
-<P>Una herramienta que mencionamos brevemente al principio del
+porqué algo no funciona, necesitas saber cómo funciona en primer lugar.</p>
+<p>Una herramienta que mencionamos brevemente al principio del
documento es SNMP. SNMP es una forma de comunicarse con tus equipos.
La herramienta particular que voy a usar más adelante se llama
-``snmpget'', y funciona así:</P>
-<PRE>
- snmpget dispositivo clave OID</PRE>
-<P>En ``dispositivo'' colocas el nombre o dirección IP del equipo a
+``snmpget'', y funciona así:</p>
+<pre>
+ snmpget dispositivo clave OID</pre>
+<p>En ``dispositivo'' colocas el nombre o dirección IP del equipo a
monitorizar. En clave, colocas la ``cadena de caracteres de la
comunidad de lectura'', como se le denomina en el mundillo SNMP.
Muchos dispositivos aceptarán ``public'' como
cadena por defecto, pero por razones de privacidad y seguridad esta
clave puede estar deshabilitada. Consulta la documentación
-correspondiente al dispositivo o programa.</P>
-<P>Luego esta el tercer parámetro, llamado OID
-(Object IDentifier, identificador de objeto).</P>
-<P>Al principio, cuando empiezas a aprender sobre SNMP, parece muy
+correspondiente al dispositivo o programa.</p>
+<p>Luego esta el tercer parámetro, llamado OID
+(Object IDentifier, identificador de objeto).</p>
+<p>Al principio, cuando empiezas a aprender sobre SNMP, parece muy
confuso. No lo es tanto cuando le hechas una ojeada a los
``MIB'' (Manager Information Base, o Base de
Información Administrativa). Es un árbol invertido que describe los
@@ -533,115 +546,111 @@
rama tiene un nombre, y forman un camino que nos lleva hasta el fondo
del árbol. En este ejemplo, las ramas que vamos a tomar se llaman iso,
org, dod, internet, mgmt y mib-2. También pueden accederse por su
-número relativo; en este caso, estos números son 1, 3, 6, 1, 2 y 1:</P>
-<PRE>
- iso.org.dod.internet.mgmt.mib-2 (1.3.6.1.2.1)</PRE>
-<P>En algunos programas se usa un punto al iniciar el OID. Esto puede
+número relativo; en este caso, estos números son 1, 3, 6, 1, 2 y 1:</p>
+<pre>
+ iso.org.dod.internet.mgmt.mib-2 (1.3.6.1.2.1)</pre>
+<p>En algunos programas se usa un punto al iniciar el OID. Esto puede
ser confuso; no hay ningún punto inicial en la especificación de los
OID... sin embargo, algunos programas usan por defecto un prefijo
inicial. Para indicar la diferencia entre los OID abreviados (o sea, a
los que se le pondrá el prefijo inicial) y los completos, estos
programas necesitan que los OID completos empiecen por un punto. Para
-empeorar las cosas, se usan varios prefijos distintos...</P>
-<P>De acuerdo, sigamos con el inicio de nuestro OID: teníamos
+empeorar las cosas, se usan varios prefijos distintos...</p>
+<p>De acuerdo, sigamos con el inicio de nuestro OID: teníamos
1.3.6.1.2.1 . Ahora, nos interesa la rama ``interfaces'', que tiene el
-número dos (o sea, 1.3.6.1.2.1.2, o 1.3.6.1.2.1.interfaces).</P>
-<P>Lo primero es hacernos con un programa SNMP. Busca algún
+número dos (o sea, 1.3.6.1.2.1.2, o 1.3.6.1.2.1.interfaces).</p>
+<p>Lo primero es hacernos con un programa SNMP. Busca algún
paquete pre-compilado para tu plataforma, si no, puedes
buscar el código fuente y compilarlo tu mismo. En Internet encontrarás
muchos programas, búscalos con un motor de búsqueda o como prefieras.
-Mi sugerencia es que busques el paquete CMU-SNMP, que esta bastante difundido.</P>
-<P>Asumamos que ya tienes el programa. Empecemos por tomar ciertos
+Mi sugerencia es que busques el paquete CMU-SNMP, que esta bastante difundido.</p>
+<p>Asumamos que ya tienes el programa. Empecemos por tomar ciertos
datos que están disponibles en la mayoría de los sistemas. Recuerda:
-hay un nombre abreviado para la parte del árbol que más nos interesa.</P>
-<P>Voy a usar la versión corta, ya que creo que este documento ya es
+hay un nombre abreviado para la parte del árbol que más nos interesa.</p>
+<p>Voy a usar la versión corta, ya que creo que este documento ya es
lo bastante largo. Si no te funciona, añádele el prefijo .1.3.6.1.2.1
y prueba de nuevo. O prueba leyendo el manual; sáltate las partes que
no entiendas aún, y busca las secciones que hablan de como arrancar y
-usar el programa.</P>
-<PRE>
- snmpget myrouter public system.sysdescr.0</PRE>
-<P>El dispositivo deberá contestarte con una descripción, probablemente
+usar el programa.</p>
+<pre>
+ snmpget myrouter public system.sysdescr.0</pre>
+<p>El dispositivo deberá contestarte con una descripción, probablemente
vacía, de sí mismo. Si no consigues una respuesta válida, prueba con
otra ``clave'' u otro dispositivo; no podemos seguir hasta tener un
-resultado.</P>
-<PRE>
- snmpget myrouter public interfaces.ifnumber.0</PRE>
-<P>Con suerte, usando este comando obtendrás un número como resultado:
+resultado.</p>
+<pre>
+ snmpget myrouter public interfaces.ifnumber.0</pre>
+<p>Con suerte, usando este comando obtendrás un número como resultado:
el número de interfaces del dispositivo. Si es así, seguiremos
-adelante con otro programa, llamado ``snmpwalk''</P>
-<PRE>
- snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr</PRE>
-<P>Si obtienes una lista de interfaces, ya casi hemos llegado. Aquí
-tienes un ejemplo del resultado:</P>
-<PRE>
+adelante con otro programa, llamado ``snmpwalk''</p>
+<pre>
+ snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr</pre>
+<p>Si obtienes una lista de interfaces, ya casi hemos llegado. Aquí
+tienes un ejemplo del resultado:</p>
+<pre>
[user at host /home/alex]$ snmpwalk cisco public 2.2.1.2
interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1"
interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2"
interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30
interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0"
- interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0"</PRE>
-<P>En este equipo CISCO, quiero monitorizar la interfaz ``Ethernet0''.
-Viendo que es la cuarta, pruebo con:</P>
-<PRE>
+ interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0"</pre>
+<p>En este equipo CISCO, quiero monitorizar la interfaz ``Ethernet0''.
+Viendo que es la cuarta, pruebo con:</p>
+<pre>
[user at host /home/alex]$ snmpget cisco public 2.2.1.10.4 2.2.1.16.4
-</PRE>
-<PRE>
-
+
interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126
- interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519</PRE>
-<P>Entonces, tengo 2 OIDs que monitorizar, y son (en el formato largo, ahora):</P>
-<PRE>
+ interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519</pre>
+<p>Entonces, tengo 2 OIDs que monitorizar, y son (en el formato largo, ahora):</p>
+<pre>
1.3.6.1.2.1.2.2.1.10
-</PRE>
-<PRE>
-
- y</PRE>
-<PRE>
-
- 1.3.6.1.2.1.2.2.1.16</PRE>
-<P>, ambas con el número de interfaz de 4</P>
-<P>No te engañes, esto no lo logre yo al primer intento. Me tomó un
+
+ y
+
+ 1.3.6.1.2.1.2.2.1.16</pre>
+<p>, ambas con el número de interfaz de 4</p>
+<p>No te engañes, esto no lo logre yo al primer intento. Me tomó un
tiempo entender lo que significaban todos estos números; ayuda cuando
se traducen en un texto descriptivo... por lo menos, cuando oigas
hablar de MIBs y OIDs, ahora sabrás de qué se trata. No te olvides
del número de interfaz (0 si el valor no depende de una interfaz), y
-prueba con snmpwalk si no obtienes una respuesta clara con snmpget.</P>
-<P>Si entendiste todo esto, y obtienes resultados del dispositivo con
+prueba con snmpwalk si no obtienes una respuesta clara con snmpget.</p>
+<p>Si entendiste todo esto, y obtienes resultados del dispositivo con
el que estás probando, sigue adelante con el tutorial. Si no, vuelve a
-leer esta sección; es importante</P>
-<P>
-<H2><A NAME="un ejemplo real">Un ejemplo real</A></H2>
-<P>Ok, empecemos con la diversión. Primero, crea una base de datos
+leer esta sección; es importante</p>
+<p>
+</p>
+<h2><a name="un_ejemplo_real">Un ejemplo real</a></h2>
+<p>Ok, empecemos con la diversión. Primero, crea una base de datos
nueva. Vamos a guardar en ella 2 contadores, ``input'' y ``ouput''. Los
datos los vamos a guardar en archivos que los promediarán, tomando
grupos de 1, 6, 24 o 288 muestras. También archivaremos los valores
máximos. Lo explicaremos con más detalle después. El intervalo de
-tiempo entre las muestras será de 300 segundos (5 minutos).</P>
-<PRE>
+tiempo entre las muestras será de 300 segundos (5 minutos).</p>
+<pre>
1 muestra "promediada" sigue siendo 1 muestra cada 5 minutos
6 muestras promediadas son un promedio de cada 30 minutos
24 muestras promediadas son un promedio de cada 2 horas
- 288 muestras promediadas son un promedio de cada día</PRE>
-<P>Vamos a tratar de ser compatibles con MRTG, que guarda más o menos
-esta cantidad de datos:</P>
-<PRE>
+ 288 muestras promediadas son un promedio de cada día</pre>
+<p>Vamos a tratar de ser compatibles con MRTG, que guarda más o menos
+esta cantidad de datos:</p>
+<pre>
600 muestras de 5 minutos: 2 días y 2 horas
600 promedios de 30 minutos: 12.5 días
600 promedios de 2 horas: 50 días
- 600 promedios de 1 día: 732 días</PRE>
-<P>Uniendo todos estos rangos tenemos que en total guardamos datos de
+ 600 promedios de 1 día: 732 días</pre>
+<p>Uniendo todos estos rangos tenemos que en total guardamos datos de
unos 797 días. RRDtool guarda los datos de una forma distinta a MRTG;
no empieza el archivo ``semanal'' donde acaba el ``diario'', sino que
ambos archivos contienen la información más reciente, ¡por lo que con
-RRDtool archivamos más datos que con MRTG!</P>
-<P>Necesitaremos:</P>
-<PRE>
+RRDtool archivamos más datos que con MRTG!</p>
+<p>Necesitaremos:</p>
+<pre>
600 muestras de 5 minutos (2 días y 2 horas)
700 entradas de 30 minutos (2 días y 2 horas, más 12.5 días)
775 entradas de 2 horas (lo anterior + 50 días)
- 797 entradas de 1 día (lo anterior + 732 días, redondeando)</PRE>
-<PRE>
+ 797 entradas de 1 día (lo anterior + 732 días, redondeando)</pre>
+<pre>
rrdtool create myrouter.rrd \
DS:input:COUNTER:600:U:U \
DS:output:COUNTER:600:U:U \
@@ -652,11 +661,11 @@
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
- RRA:MAX:0.5:288:797</PRE>
-<P>Lo siguiente es recoger los datos y guardarlos, como en el ejemplo
+ RRA:MAX:0.5:288:797</pre>
+<p>Lo siguiente es recoger los datos y guardarlos, como en el ejemplo
siguiente. Esta parcialmente en pseudo-código, por lo que tendrás que
-buscar exactamente como hacerlo funcionar en tu sistema operativo.</P>
-<PRE>
+buscar exactamente como hacerlo funcionar en tu sistema operativo.</p>
+<pre>
mientras no sea el fin del universo
hacer
tomar el resultado de
@@ -667,34 +676,35 @@
en la variable $out
rrdtool update myrouter.rrd N:$in:$out
esperar 5 minutos
- hecho</PRE>
-<P>Luego, tras recoger datos por un día, crea una imagen, usando:</P>
-<PRE>
+ hecho</pre>
+<p>Luego, tras recoger datos por un día, crea una imagen, usando:</p>
+<pre>
rrdtool graph myrouter-day.gif --start -86400 \
DEF:inoctets=myrouter.rrd:input:AVERAGE \
DEF:outoctets=myrouter.rrd:output:AVERAGE \
AREA:inoctets#00FF00:"In traffic" \
- LINE1:outoctets#0000FF:"Out traffic"</PRE>
-<P>Este comando debe producir un gráfico del tráfico del día. Un día
+ LINE1:outoctets#0000FF:"Out traffic"</pre>
+<p>Este comando debe producir un gráfico del tráfico del día. Un día
son 24 horas, de 60 minutos, de 60 segundos: 24*60*60=86400, o sea que
empezamos a ``ahora'' menos 86400 segundos. Definimos (con los DEFs)
``inoctets'' y ``outoctets'' como los valores promedio de la base da datos
myrouter.rrd, dibujando un área para el tráfico de entrada y una línea
-para el tráfico de salida.</P>
-<P>Mira la imagen y sigue recogiendo datos por unos cuantos días. Si
+para el tráfico de salida.</p>
+<p>Mira la imagen y sigue recogiendo datos por unos cuantos días. Si
lo deseas, puedes probar con los ejemplos de la base de datos de
pruebas y ver si puedes hacer trabajar las diversas opciones y
-operaciones.</P>
-<P>Sugerencia:</P>
-<P>Haz un gráfico que muestre el tráfico en bytes por segundo y en
+operaciones.</p>
+<p>Sugerencia:</p>
+<p>Haz un gráfico que muestre el tráfico en bytes por segundo y en
bits por segundo. Colorea el tráfico Ethernet rojo si sobrepasa los
-cuatro megabits por segundo.</P>
-<P>
-<H2><A NAME="funciones de consolidación">Funciones de consolidación</A></H2>
-<P>Unos cuantos párrafos atrás hablábamos sobre la posibilidad de
+cuatro megabits por segundo.</p>
+<p>
+</p>
+<h2><a name="funciones_de_consolidación">Funciones de consolidación</a></h2>
+<p>Unos cuantos párrafos atrás hablábamos sobre la posibilidad de
guardar el valor máximo en vez del promedio. Profundicemos un poco en
-este tema.</P>
-<P>Recordemos lo que hablábamos sobre la velocidad de un coche.
+este tema.</p>
+<p>Recordemos lo que hablábamos sobre la velocidad de un coche.
Supongamos que manejamos a 144 KM/H durante 5
minutos y luego nos detiene la policía durante unos 25 minutos. Al
finalizar el regaño, tomamos nuestro portátil y creamos una imagen
@@ -702,13 +712,13 @@
creamos, tendremos el promedio de 6 muestreos. Las velocidades
registradas serian 144+0+0+0+0+0=144, lo que en promedio nos da una
velocidad de 24 KM/H., con lo que nos igual nos
-pondrían una multa, sólo que no por exceso de velocidad.</P>
-<P>Obviamente, en este caso, no deberíamos tomar en cuenta los
+pondrían una multa, sólo que no por exceso de velocidad.</p>
+<p>Obviamente, en este caso, no deberíamos tomar en cuenta los
promedios. Estos son útiles en varios casos. Por ejemplo, si queremos
ver cuantos KM hemos viajado, este sería el
gráfico más indicado. Pero por otro lado, para ver la velocidad ha la
-que hemos viajado, los valores máximos son más adecuados.</P>
-<P>Es lo mismo con los datos que recogemos. Si quieres saber la
+que hemos viajado, los valores máximos son más adecuados.</p>
+<p>Es lo mismo con los datos que recogemos. Si quieres saber la
cantidad total, mira los promedios. Si quieres ver la velocidad, mira
los máximos. Con el tiempo, ambas cantidades se separan cada vez más.
En la última base de datos que creamos, había dos archivos que
@@ -716,12 +726,12 @@
mostrará valores bajos, mientras que el de máximos mostrará valores más
altos. Para mi coche, mostraría valores promedio de 96/24=4 KM/H
(viajo unos 96 kilómetros por día), y máximos de 1220 KM/H (la
-velocidad máxima que alcanzo cada día)</P>
-<P>Como ves, una gran diferencia. No mires el segundo gráfico para
+velocidad máxima que alcanzo cada día)</p>
+<p>Como ves, una gran diferencia. No mires el segundo gráfico para
estimar la distancia que recorro, ni al primero para estimar la
velocidad a la que voy. Esto sólo funciona con muestras muy cercanas,
-pero no si sacas promedios.</P>
-<P>Algunas veces, hago un viaje largo. Si hago un recorrido por
+pero no si sacas promedios.</p>
+<p>Algunas veces, hago un viaje largo. Si hago un recorrido por
Europa, conduciendo por unas 12 horas, el primer gráfico subirá
a unos 60 KM/H. El segundo mostrará unos 180 KM/H. Esto significa que
recorrí unos 60 KM/H por 24 horas = 1440 KM. Muestra además que fui a
@@ -739,33 +749,35 @@
esto nos lleva unas 12 muestras por hora, o 288 al día, lo cual es
mucho para guardar por un periodo de tiempo largo. Por lo tanto,
sacamos el promedio, guardando eventualmente un solo valor por día.
-Con este único valor, no podemos ver mucho.</P>
-<P>Es importante comprender lo que expuesto en estos últimos párrafos.
+Con este único valor, no podemos ver mucho.</p>
+<p>Es importante comprender lo que expuesto en estos últimos párrafos.
Unos ejes y unas líneas no tienen ningún valor por si mismos; hay que
saber que representan e interpretar correctamente los valores
-obtenidos. Sean cuales sean los datos, esto siempre será cierto.</P>
-<P>El mayor error que puedes cometer es usar los datos recogidos para
+obtenidos. Sean cuales sean los datos, esto siempre será cierto.</p>
+<p>El mayor error que puedes cometer es usar los datos recogidos para
algo para lo cual no sirven. En ese caso, seria hasta mejor no tener
-gráfico alguno.</P>
-<P>
-<H2><A NAME="repasemos lo que sabemos">Repasemos lo que sabemos</A></H2>
-<P>Ahora ya sabes como crear una base de datos. Puedes guardar valores
+gráfico alguno.</p>
+<p>
+</p>
+<h2><a name="repasemos_lo_que_sabemos">Repasemos lo que sabemos</a></h2>
+<p>Ahora ya sabes como crear una base de datos. Puedes guardar valores
en ella, extraerlos creando un gráfico, hacer operaciones matemáticas
con ellos desde la base de datos y visualizar los resultados de estas
en vez de los datos originales. Vimos la diferencia entre los
promedios y los máximos y cuando debemos usar cada uno (o al menos una
-idea de ello)</P>
-<P>RRDtool puede hacer más de lo que hemos visto hasta ahora. Pero
+idea de ello)</p>
+<p>RRDtool puede hacer más de lo que hemos visto hasta ahora. Pero
antes de continuar, te recomiendo que releas el texto desde el
principio y pruebes a hacerle algunas modificaciones a los ejemplos.
Asegúrate de entenderlo todo. El esfuerzo valdrá la pena, y te ayudará,
no sólo con el resto del documento, sino en tu trabajo diario de
-monitorización, mucho después de terminar con esta introducción.</P>
-<P>
-<H2><A NAME="tipos de fuentes de datos">Tipos de fuentes de datos</A></H2>
-<P>De acuerdo, quieres continuar. Bienvenido de vuelta otra vez y
-prepárate; voy a ir más rápido con los ejemplos y explicaciones.</P>
-<P>Ya vimos que, para ver el cambio de un contador a lo largo del
+monitorización, mucho después de terminar con esta introducción.</p>
+<p>
+</p>
+<h2><a name="tipos_de_fuentes_de_datos">Tipos de fuentes de datos</a></h2>
+<p>De acuerdo, quieres continuar. Bienvenido de vuelta otra vez y
+prepárate; voy a ir más rápido con los ejemplos y explicaciones.</p>
+<p>Ya vimos que, para ver el cambio de un contador a lo largo del
tiempo, tenemos que tomar dos números y dividir la diferencia entre el
tiempo transcurrido entre las mediciones. Para los ejemplos que hemos
visto es lo lógico, pero hay otras posibilidades. Por ejemplo, mi
@@ -774,8 +786,8 @@
ventilación. Estos valores no son contadores; si tomo los valores de
dos muestreos y lo divido entre 300 segundos, obtendré el cambio de
temperatura por segundo. ¡Esperemos que sea cero, o tendríamos un
-incendio en el cuarto de ordenadores! :)</P>
-<P>Entonces, ¿que hacemos? Podemos decirle a RRDtool que guarde los
+incendio en el cuarto de ordenadores! :)</p>
+<p>Entonces, ¿que hacemos? Podemos decirle a RRDtool que guarde los
valores tal como los medimos (esto no es exactamente así, pero se
aproxima bastante a la verdad). Así, los gráficos se verán mucho
mejor. Puedo ver cuando el enrutador está trabajando más (en serio,
@@ -786,13 +798,13 @@
temperatura en la entrada de aire del enrutador), etc. Antes usamos un
tipo de datos de ``contador'', ahora usaremos un tipo de datos
diferente, con un nombre diferente, GAUGE.
-Tenemos otros tipos:</P>
-<PRE>
+Tenemos otros tipos:</p>
+<pre>
- COUNTER este ya lo conocemos
- GAUGE este acabamos de verlo
- DERIVE
- - ABSOLUTE</PRE>
-<P>Los otros dos tipos son DERIVE y ABSOLUTE. ABSOLUTE puede usarse
+ - ABSOLUTE</pre>
+<p>Los otros dos tipos son DERIVE y ABSOLUTE. ABSOLUTE puede usarse
igual que COUNTER, con una diferencia; RRDtool asume que el contador
se reinicia cada vez que se lee. O en otras palabras; el delta entre
los valores no hay que calcularlo, mientras que con COUNTER RRDtool
@@ -800,9 +812,9 @@
(12345, 12357, 12363, 12363), sería (unknown, 12, 6, 0) en ABSOLUTE.
El otro tipo, DERIVE, es como COUNTER, pero al contrario de COUNTER,
este valor también puede decrecer, por lo que puede tenerse un delta
-negativo.</P>
-<P>Vamos a probarlos todos:</P>
-<PRE>
+negativo.</p>
+<p>Vamos a probarlos todos:</p>
+<pre>
rrdtool create all.rrd --start 978300900 \
DS:a:COUNTER:600:U:U \
DS:b:GAUGE:600:U:U \
@@ -824,47 +836,48 @@
DEF:linea=all.rrd:a:AVERAGE LINE3:linea#FF0000:"Line A" \
DEF:lineb=all.rrd:b:AVERAGE LINE3:lineb#00FF00:"Line B" \
DEF:linec=all.rrd:c:AVERAGE LINE3:linec#0000FF:"Line C" \
- DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D"</PRE>
-<P>
-<H2><A NAME="rrdtool bajo el microscopio">RRDtool bajo el microscopio</A></H2>
-<UL>
-<LI>
+ DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D"</pre>
+<p>
+</p>
+<h2><a name="rrdtool_bajo_el_microscopio">RRDtool bajo el microscopio</a></h2>
+<ul>
+<li></li>
La línea A es un contador, por lo que
debe incrementarse continuamente y RRDtool tiene que calcular las
diferencias. Además RRDtool tiene que dividir la diferencia entre
el tiempo transcurrido. Esto debería terminar con una línea recta
en 1 (los deltas son 300, y los intervalos son de 300)
-<P></P>
-<LI>
+<p></p>
+<li></li>
La línea B es de tipo GAUGE. Estos son
los valores ``reales'', así que el gráfico debe mostrar lo mismo que
los valores que introducimos: una especie de onda
-<P></P>
-<LI>
+<p></p>
+<li></li>
La línea C es de tipo DERIVE. Es un
contador, y puede decrecer. Va entre 2400 y 0, con 1800 en el medio.
-<P></P>
-<LI>
+<p></p>
+<li></li>
La línea D es de tipo ABSOLUTE. Esto es,
es un contador pero no hay que calcular las diferencias. Los
números son iguales a la línea A, y espero
que puedas ver la diferencia en los gráficos.
-<P></P></UL>
-<P>Esto equivale a los valores siguientes, empezando a las 23:10 y
-terminando a las 00:10 (las U significan desconocido).</P>
-<PRE>
+<p></p></ul>
+<p>Esto equivale a los valores siguientes, empezando a las 23:10 y
+terminando a las 00:10 (las U significan desconocido).</p>
+<pre>
- Línea A: u u 1 1 1 1 1 1 1 1 1 u
- Línea B: u 1 3 5 3 1 2 4 6 4 2 u
- Línea C: u u 2 2 2 0 -2 -6 2 0 2 u
- - Línea D: u 1 2 3 4 5 6 7 8 9 10 u</PRE>
-<P>Si tu archivo GIF muestra todo esto, has
+ - Línea D: u 1 2 3 4 5 6 7 8 9 10 u</pre>
+<p>Si tu archivo GIF muestra todo esto, has
entrado los datos correctamente, tu programa RRDtool está funcionando
bien, el visor de gráficos no te engaña y hemos entrado en el 2000 sin
-problemas :) Puedes probar el mismo ejemplo cuatro veces, una por cada línea.</P>
-<P>Revisemos los datos otra vez:</P>
-<UL>
-<LI>
+problemas :) Puedes probar el mismo ejemplo cuatro veces, una por cada línea.</p>
+<p>Revisemos los datos otra vez:</p>
+<ul>
+<li></li>
Línea A: 300, 600, 900 , etc.
La diferencia del contador es siempre 300, igual que el intervalo de
tiempo transcurrido entre mediciones. Por lo tanto, el promedio
@@ -873,13 +886,13 @@
base de datos? ¡Si! Pero no teníamos un valor inicial para
calcular la diferencia. Sería un error asumir que el contador
empezaba en 0, así que no conocemos el valor de la diferencia
-<P></P>
-<LI>
+<p></p>
+<li></li>
Línea B:
No hay nada que calcular, los valores son los mismos que se
introdujeron en la base de datos.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Línea C:
De nuevo, no conocemos el valor
inicial antes de la primera medición, así que se aplica el mismo
@@ -889,8 +902,8 @@
A, el gráfico sería el mismo. Al contrario
que COUNTER, el valor puede decrecer, y espero mostrarte más
adelante el por que de la diferencia entre ambos tipos.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Línea D: En este caso, el dispositivo nos
da las diferencias por sí mismo. Por lo tanto, conocemos la
diferencia inicial, y podemos graficarla. Tenemos los mismos
@@ -899,10 +912,11 @@
este caso, las diferencias se incrementan en 300 cada vez,
mientras que el intervalo de tiempo permanece constante en 300
segundos, por lo que la división nos da resultados cada vez mayores.
-<P></P></UL>
-<P>
-<H2><A NAME="reinicialización de los contadores">Reinicialización de los contadores</A></H2>
-<P>Todavía nos quedan algunas cosas por ver. Nos quedan algunas
+<p></p></ul>
+<p>
+</p>
+<h2><a name="reinicialización_de_los_contadores">Reinicialización de los contadores</a></h2>
+<p>Todavía nos quedan algunas cosas por ver. Nos quedan algunas
opciones importantes por cubrir, y aun no hemos hablado de la
reinicialización de contadores. Empecemos por ahí: Estamos en nuestro
coche, vemos el contador y muestra 999987. Andamos unos 20 KM, así que
@@ -916,24 +930,22 @@
contador. ¿Cómo funciona? Los valores tipo COUNTER no deben decrecer
nunca, ¡por lo que RRDtool asume en ese caso que el contador se ha
reinicializado! Si la diferencia es negativa, esto se compensa sumando
-el valor máximo del contador + 1. Para nuestro coche, tendríamos:</P>
-<PRE>
+el valor máximo del contador + 1. Para nuestro coche, tendríamos:</p>
+<pre>
Delta = 7 - 999987 = -999980 (en vez de 1000007-999987=20)
-</PRE>
-<PRE>
-
- Delta real= -999980 + 999999 + 1 = 20</PRE>
-<P>Al momento de escribir este documento, RRDtool maneja contadores de
+
+ Delta real= -999980 + 999999 + 1 = 20</pre>
+<p>Al momento de escribir este documento, RRDtool maneja contadores de
32 o 64 bits de tamaño. Estos contadores pueden manejar los siguientes
-valores:</P>
-<PRE>
+valores:</p>
+<pre>
- 32 bits: 0 .. 4294967295
- - 64 bits: 0 .. 18446744073709551615</PRE>
-<P>Si estos valores te parecen raros, podemos verlos en formato hexadecimal:</P>
-<PRE>
+ - 64 bits: 0 .. 18446744073709551615</pre>
+<p>Si estos valores te parecen raros, podemos verlos en formato hexadecimal:</p>
+<pre>
- 32 bits: 0 .. FFFFFFFF
- - 64 bits: 0 .. FFFFFFFFFFFFFFFF</PRE>
-<P>RRDtool maneja ambos contadores de la misma manera. Si ocurre un
+ - 64 bits: 0 .. FFFFFFFFFFFFFFFF</pre>
+<p>RRDtool maneja ambos contadores de la misma manera. Si ocurre un
desbordamiento y la diferencia es negativa, RRDtool le suma primero
el máximo del contador ``menor'' (32 bits) + 1 a la diferencia. Si aún
así la diferencia es negativa, entonces el contador reinicializado era
@@ -948,34 +960,30 @@
lo que de ocurrir es muy probable que halla varios problemas más en
la configuración y no merezca la pena preocuparse sólo por este. Aún
así, he incluido un ejemplo de este caso para que lo puedas juzgar por
-ti mismo.</P>
-<P>A continuación, unos ejemplos de reinicialización de los
+ti mismo.</p>
+<p>A continuación, unos ejemplos de reinicialización de los
contadores. Prueba de hacer los cálculos por ti mismo, o acepta mis
-resultados si tu calculadora no puede con los números :)</P>
-<P>Números de corrección:</P>
-<PRE>
+resultados si tu calculadora no puede con los números :)</p>
+<p>Números de corrección:</p>
+<pre>
- 32 bits: (4294967295+1) = 4294967296
- 64 bits: (18446744073709551615+1)-correction1 = 18446744069414584320
-</PRE>
-<PRE>
-
+
Antes: 4294967200
Incremento: 100
Debería ser: 4294967300
Pero es: 4
Diferencia: -4294967196
- Corrección #1: -4294967196 + 4294967296 = 100</PRE>
-<PRE>
-
+ Corrección #1: -4294967196 + 4294967296 = 100
+
Antes: 18446744073709551000
Incremento: 800
Debería ser: 18446744073709551800
Pero es: 184
Diferencia: -18446744073709550816
Corrección #1: -18446744073709550816 +4294967296 = -18446744069414583520
- Corrección #2: -18446744069414583520 +18446744069414584320 = 800</PRE>
-<PRE>
-
+ Corrección #2: -18446744069414583520 +18446744069414584320 = 800
+
Antes: 18446744073709551615 ( valor máximo )
Incremento: 18446744069414584320 ( incremento absurdo,
Debería ser: 36893488143124135935 mínimo para que
@@ -983,17 +991,16 @@
Diferencia: -4294967296
Corrección #1: -4294967296 + 4294967296 = 0 (positivo,
por tanto no se hace
- la segunda corrección)</PRE>
-<PRE>
-
+ la segunda corrección)
+
Antes: 18446744073709551615 ( valor máximo )
Incremento: 18446744069414584319
Debería ser: 36893488143124135934
Pero es: 18446744069414584318
Diferencia: -4294967297
Corrección #1: -4294967297 +4294967296 = -1
- Corrección #2: -1 +18446744069414584320 = 18446744069414584319</PRE>
-<P>Como puede verse en los últimos ejemplos, necesitas unos valores
+ Corrección #2: -1 +18446744069414584320 = 18446744069414584319</pre>
+<p>Como puede verse en los últimos ejemplos, necesitas unos valores
bastante extraños para hacer que RRDtool falle (asumiendo que no tenga
ningún error el programa, por supuesto), así que esto no debería
ocurrir. Sin embargo, SNMP o cualquier otro
@@ -1012,15 +1019,16 @@
Cualquier otra cosa sería un error. Pero recuerda, lo contrario no es
cierto: si los valores pasan este examen no quiere decir que sean los
correctos. Siempre examina bien el gráfico si los valores parecen
-extraños.</P>
-<P>
-<H2><A NAME="remuestreo de los datos">Remuestreo de los datos</A></H2>
-<P>Hay una funcionalidad importante de RRDtool que no hemos explicado
+extraños.</p>
+<p>
+</p>
+<h2><a name="remuestreo_de_los_datos">Remuestreo de los datos</a></h2>
+<p>Hay una funcionalidad importante de RRDtool que no hemos explicado
todavía: es virtualmente imposible recoger los datos y pasarselos a
RRDtool a intervalos exactos de tiempo. Por tanto, RRDtool interpola
los datos a los intervalos exactos. Si no sabes que significa esto o
-como se hace, he aquí la ayuda que necesitas:</P>
-<P>Supongamos un contador se incremente exactamente en 1 cada segundo.
+como se hace, he aquí la ayuda que necesitas:</p>
+<p>Supongamos un contador se incremente exactamente en 1 cada segundo.
Queremos medirlo cada 300 segundos, por lo que deberíamos tener
valores separados exactamente en 300. Sin embargo, por varias
circunstancias llegamos unos segundos tarde y el intervalo es 303. La
@@ -1031,30 +1039,30 @@
en 300 segundos. Digamos que la próxima vez llegamos justo a tiempo;
por tanto, el intervalo actual es 297 segundos, por lo que el contador
debería ser 297. De nuevo, RRDtool altera el valor y guarda 300, como
-debe ser.</P>
-<PRE>
+debe ser.</p>
+<pre>
en RRD en realidad
tiempo+000: 0 delta="U" tiempo+000: 0 delta="U"
tiempo+300: 300 delta=300 tiempo+300: 300 delta=300
tiempo+600: 600 delta=300 tiempo+603: 603 delta=303
- tiempo+900: 900 delta=300 tiempo+900: 900 delta=297</PRE>
-<P>Creemos dos bases de datos idénticas. He escogido el rango de
-tiempo entre 920805000 y 920805900.</P>
-<PRE>
+ tiempo+900: 900 delta=300 tiempo+900: 900 delta=297</pre>
+<p>Creemos dos bases de datos idénticas. He escogido el rango de
+tiempo entre 920805000 y 920805900.</p>
+<pre>
rrdtool create seconds1.rrd \
--start 920804700 \
DS:seconds:COUNTER:600:U:U \
- RRA:AVERAGE:0.5:1:24</PRE>
-<PRE>
+ RRA:AVERAGE:0.5:1:24</pre>
+<pre>
para Unix: cp seconds1.rrd seconds2.rrd
para DOS: copy seconds1.rrd seconds2.rrd
- para VMS: y yo que sé :)</PRE>
-<PRE>
+ para VMS: y yo que sé :)</pre>
+<pre>
rrdtool update seconds1.rrd \
920805000:000 920805300:300 920805600:600 920805900:900
rrdtool update seconds2.rrd \
- 920805000:000 920805300:300 920805603:603 920805900:900</PRE>
-<PRE>
+ 920805000:000 920805300:300 920805603:603 920805900:900</pre>
+<pre>
rrdtool graph seconds1.gif \
--start 920804700 --end 920806200 \
--height 200 \
@@ -1070,40 +1078,44 @@
DEF:seconds=seconds2.rrd:seconds:AVERAGE \
CDEF:unknown=seconds,UN \
LINE2:seconds#0000FF \
- AREA:unknown#FF0000</PRE>
-<P>Los dos gráficos debe ser iguales.</P>
-<P>
-<HR>
-<H1><A NAME="resumen">RESUMEN</A></H1>
-<P>Es hora de concluir este documento. Ahora debes conocer lo básico
+ AREA:unknown#FF0000</pre>
+<p>Los dos gráficos debe ser iguales.</p>
+<p>
+</p>
+<hr />
+<h1><a name="resumen">RESUMEN</a></h1>
+<p>Es hora de concluir este documento. Ahora debes conocer lo básico
como para trabajar con RRDtool y leer la documentación. Aún hay mucho
más por descubrir acerca de RRDtool, y le encontrarás; más y más usos
para la herramienta. Con los ejemplos y la herramienta puedes crear
fácilmente muchos gráficos; también puedes usar las interfaces
-disponibles.</P>
-<P>
-<HR>
-<H1><A NAME="lista de correo">LISTA DE CORREO</A></H1>
-<P>Recuerda subscribirte a la lista de correo. Aunque no contestes los
+disponibles.</p>
+<p>
+</p>
+<hr />
+<h1><a name="lista_de_correo">LISTA DE CORREO</a></h1>
+<p>Recuerda subscribirte a la lista de correo. Aunque no contestes los
correos que aparecen en ella, te servirá de ayuda a ti y a los demás.
Mucho de lo que se sobre MRTG (y por tanto sobre RRDtool), lo aprendí
tan sólo con leer la lista, sin escribir. No hay por que preguntar las
preguntas básicas, que ya tienen su respuesta en la FAQ (¡léela!). Con
miles de usuarios a lo largo del mundo, siempre hay preguntas que tu
-puedes responder con lo aprendido en este y otros documentos.</P>
-<P>
-<HR>
-<H1><A NAME="ver tambiÉn">VER TAMBIÉN</A></H1>
-<P>Las páginas del manual de RRDtool</P>
-<P>
-<HR>
-<H1><A NAME="autor">AUTOR</A></H1>
-<P>Espero que hayas disfrutado con los ejemplos y las descripciones.
+puedes responder con lo aprendido en este y otros documentos.</p>
+<p>
+</p>
+<hr />
+<h1><a name="ver_tambiÉn">VER TAMBIÉN</a></h1>
+<p>Las páginas del manual de RRDtool</p>
+<p>
+</p>
+<hr />
+<h1><a name="autor">AUTOR</a></h1>
+<p>Espero que hayas disfrutado con los ejemplos y las descripciones.
Si es así, ayuda a otros refiriéndolos a este documento cuando te
hagan preguntas básicas. No sólo obtendrán la respuesta, sino que
-aprenderán muchas otras cosas.</P>
-<P>Alex van den Bogaerdt <<A HREF="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</A>></P>
+aprenderán muchas otras cosas.</p>
+<p>Alex van den Bogaerdt <<a href="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtune.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtune.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtune.html 2003-02-20 15:24:00.000000000 -0800
@@ -1,91 +1,109 @@
-<HTML>
-<HEAD>
-<TITLE>rrdtune</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdtune</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#example">EXAMPLE</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#example">EXAMPLE</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool tune - Modify some basic properties of a Round Robin Database</P>
-<div align="right"><a href="rrdtune.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>tune</STRONG> <EM>filename</EM>
-[<STRONG>--heartbeat</STRONG>|<STRONG>-h</STRONG> <EM>ds-name</EM>:<EM>heartbeat</EM>]
-[<STRONG>--minimum</STRONG>|<STRONG>-i</STRONG> <EM>ds-name</EM>:<EM>min</EM>]
-[<STRONG>--maximum</STRONG>|<STRONG>-a</STRONG> <EM>ds-name</EM>:<EM>max</EM>]
-[<STRONG>--data-source-type</STRONG>|<STRONG>-d</STRONG> <EM>ds-name</EM>:<EM>DST</EM>]
-[<STRONG>--data-source-rename</STRONG>|<STRONG>-r</STRONG> <EM>old-name</EM>:<EM>new-name</EM>]</P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The tune option allows you to alter some of the basic configuration
-values stored in the header area of a Round Robin Database (<STRONG>RRD</STRONG>).
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool tune - Modify some basic properties of a Round Robin Database</p>
+<div align="right"><a href="rrdtune.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>tune</strong> <em>filename</em>
+[<strong>--heartbeat</strong>|<strong>-h</strong> <em>ds-name</em>:<em>heartbeat</em>]
+[<strong>--minimum</strong>|<strong>-i</strong> <em>ds-name</em>:<em>min</em>]
+[<strong>--maximum</strong>|<strong>-a</strong> <em>ds-name</em>:<em>max</em>]
+[<strong>--data-source-type</strong>|<strong>-d</strong> <em>ds-name</em>:<em>DST</em>]
+[<strong>--data-source-rename</strong>|<strong>-r</strong> <em>old-name</em>:<em>new-name</em>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The tune option allows you to alter some of the basic configuration
+values stored in the header area of a Round Robin Database (<strong>RRD</strong>).
All these tunable parameters together decide when data fed into an
-<STRONG>RRD</STRONG> is to be regarded as invalid. Invalid data is entered into the
-database as *UNKNOWN*.</P>
-<P>The main application of the <STRONG>tune</STRONG> function is to relax the
-validation rules on an <STRONG>RRD</STRONG>. This allows to fill a new <STRONG>RRD</STRONG> with
+<strong>RRD</strong> is to be regarded as invalid. Invalid data is entered into the
+database as *UNKNOWN*.</p>
+<p>The main application of the <strong>tune</strong> function is to relax the
+validation rules on an <strong>RRD</strong>. This allows to fill a new <strong>RRD</strong> with
data available in larger intervals than what you would normally want
-to permit.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename"><EM>filename</EM></A></STRONG><BR>
-<DD>
-The name of the <STRONG>RRD</STRONG> you want to tune.
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Dheartbeat%7C%2Dh_ds%2Dname%3Aheartbeat"><STRONG>--heartbeat</STRONG>|<STRONG>-h</STRONG> <EM>ds-name</EM>:<EM>heartbeat</EM></A></STRONG><BR>
-<DD>
-modify the <EM>heartbeat</EM> of a data source. By setting this to a high
+to permit.</p>
+<dl>
+<dt><strong><a name="item_filename"><em>filename</em></a></strong><br />
+</dt>
+<dd>
+The name of the <strong>RRD</strong> you want to tune.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dheartbeat%7c%2dh_ds%2dname%3aheartbeat"><strong>--heartbeat</strong>|<strong>-h</strong> <em>ds-name</em>:<em>heartbeat</em></a></strong><br />
+</dt>
+<dd>
+modify the <em>heartbeat</em> of a data source. By setting this to a high
value the rrd will accept things like one value per day ...
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Dminimum%7C%2Di_ds%2Dname%3Amin"><STRONG>--minimum</STRONG>|<STRONG>-i</STRONG> <EM>ds-name</EM>:<EM>min</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dminimum%7c%2di_ds%2dname%3amin"><strong>--minimum</strong>|<strong>-i</strong> <em>ds-name</em>:<em>min</em></a></strong><br />
+</dt>
+<dd>
alter the minimum value acceptable as input from the data source.
-Setting <EM>min</EM> to 'U' will disable this limit.
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Dmaximum%7C%2Da_ds%2Dname%3Amax"><STRONG>--maximum</STRONG>|<STRONG>-a</STRONG> <EM>ds-name</EM>:<EM>max</EM></A></STRONG><BR>
-<DD>
+Setting <em>min</em> to 'U' will disable this limit.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dmaximum%7c%2da_ds%2dname%3amax"><strong>--maximum</strong>|<strong>-a</strong> <em>ds-name</em>:<em>max</em></a></strong><br />
+</dt>
+<dd>
alter the maximum value acceptable as input from the data source.
-Setting <EM>max</EM> to 'U' will disable this limit.
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Ddata%2Dsource%2Dtype%7C%2Dd_ds%2Dname%3ADST"><STRONG>--data-source-type</STRONG>|<STRONG>-d</STRONG> <EM>ds-name</EM>:<EM>DST</EM></A></STRONG><BR>
-<DD>
-alter the type <STRONG>DST</STRONG> of a data source.
-<P></P>
-<DT><STRONG><A NAME="item_%5B%2D%2Ddata%2Dsource%2Drename%7C%2Dr_old%2Dname%">[<STRONG>--data-source-rename</STRONG>|<STRONG>-r</STRONG> <EM>old-name</EM>:<EM>new-name</EM>]</A></STRONG><BR>
-<DD>
+Setting <em>max</em> to 'U' will disable this limit.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2ddata%2dsource%2dtype%7c%2dd_ds%2dname%3adst"><strong>--data-source-type</strong>|<strong>-d</strong> <em>ds-name</em>:<em>DST</em></a></strong><br />
+</dt>
+<dd>
+alter the type <strong>DST</strong> of a data source.
+</dd>
+<p></p>
+<dt><strong><a name="item_%5b%2d%2ddata%2dsource%2drename%7c%2dr_old%2dname%">[<strong>--data-source-rename</strong>|<strong>-r</strong> <em>old-name</em>:<em>new-name</em>]</a></strong><br />
+</dt>
+<dd>
rename a data source
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="example">EXAMPLE</A></H1>
-<P><CODE>rrdtool tune data.rrd -h in:100000 -h out:100000 -h through:100000</CODE></P>
-<P>Set the minimum required heartbeat for data sources 'in', 'out'
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="example">EXAMPLE</a></h1>
+<p><code>rrdtool tune data.rrd -h in:100000 -h out:100000 -h through:100000</code></p>
+<p>Set the minimum required heartbeat for data sources 'in', 'out'
and 'through' to 10000 seconds which is a little over one day in data.rrd.
This would allow to feed old data from mrtg-2.0 right into
-rrdtool without generating *UNKNOWN* entries.</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+rrdtool without generating *UNKNOWN* entries.</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdresize.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdresize.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdresize.txt 2003-02-20 15:24:00.000000000 -0800
@@ -2,35 +2,35 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool resize - alters the size of an RRA and creates new
.rrd file
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll rrrreeeessssiiiizzzzeeee _f_i_l_e_n_a_m_e _r_r_a_-_n_u_m GGGGRRRROOOOWWWW_|SSSSHHHHRRRRIIIINNNNKKKK _r_o_w_s
+SSYYNNOOPPSSIISS
+ rrrrddttooooll rreessiizzee _f_i_l_e_n_a_m_e _r_r_a_-_n_u_m GGRROOWW_|SSHHRRIINNKK _r_o_w_s
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The rrrreeeessssiiiizzzzeeee function is used to modify the number of rows
- in an RRRRRRRRAAAA.
+DDEESSCCRRIIPPTTIIOONN
+ The rreessiizzee function is used to modify the number of rows
+ in an RRRRAA.
_f_i_l_e_n_a_m_e
- the name of the RRRRRRRRDDDD you want to alter.
+ the name of the RRRRDD you want to alter.
- _r_r_a_-_n_u_m the RRRRRRRRAAAA you want to alter. You can find the number
- using rrrrrrrrddddttttoooooooollll iiiinnnnffffoooo.
+ _r_r_a_-_n_u_m the RRRRAA you want to alter. You can find the number
+ using rrrrddttooooll iinnffoo.
- GGGGRRRROOOOWWWW used if you want to add extra rows to an RRA. The
+ GGRROOWW used if you want to add extra rows to an RRA. The
extra rows will be inserted as the rows that are
oldest.
- SSSSHHHHRRRRIIIINNNNKKKK used if you want to remove rows from an RRA. The
+ SSHHRRIINNKK used if you want to remove rows from an RRA. The
rows that will be removed are the oldest rows.
_r_o_w_s the number of rows you want to add or remove.
-NNNNOOOOTTTTEEEESSSS
+NNOOTTEESS
The new .rrd file, with the modified RRAm, is written to
- the file rrrreeeessssiiiizzzzeeee....rrrrrrrrdddd in the current directory. The origi-
+ the file rreessiizzee..rrrrdd in the current directory. The origi-
nal .rrd file is not modified.
It is possible to abuse this tool and get strange results
@@ -39,9 +39,9 @@
thus end up with unknown data in one RRA while at the same
timestamp this data is available in another RRA.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Alex van den Bogaerdt <alex at ergens.op.het.net>
-2002-07-05 1.0.40 RRDRESIZE(1)
+1.0.41 2002-07-05 RRDRESIZE(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdcreate.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.txt 2003-02-20 15:24:00.000000000 -0800
@@ -2,62 +2,62 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool create - Set up a new Round Robin Database
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll ccccrrrreeeeaaaatttteeee _f_i_l_e_n_a_m_e [--------ssssttttaaaarrrrtttt|----bbbb _s_t_a_r_t _t_i_m_e]
- [--------sssstttteeeepppp|----ssss _s_t_e_p] [DDDDSSSS::::_d_s_-_n_a_m_e::::_D_S_T::::_h_e_a_r_t_b_e_a_t::::_m_i_n::::_m_a_x]
- [RRRRRRRRAAAA::::_C_F::::_x_f_f::::_s_t_e_p_s::::_r_o_w_s]
+SSYYNNOOPPSSIISS
+ rrrrddttooooll ccrreeaattee _f_i_l_e_n_a_m_e [----ssttaarrtt|--bb _s_t_a_r_t _t_i_m_e]
+ [----sstteepp|--ss _s_t_e_p] [DDSS::_d_s_-_n_a_m_e::_D_S_T::_h_e_a_r_t_b_e_a_t::_m_i_n::_m_a_x]
+ [RRRRAA::_C_F::_x_f_f::_s_t_e_p_s::_r_o_w_s]
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
+DDEESSCCRRIIPPTTIIOONN
The create function of the RRDtool lets you set up new
- Round Robin Database (RRRRRRRRDDDD) files. The file is created at
+ Round Robin Database (RRRRDD) files. The file is created at
its final, full size and filled with _*_U_N_K_N_O_W_N_* data.
_f_i_l_e_n_a_m_e
- The name of the RRRRRRRRDDDD you want to create. RRRRRRRRDDDD files
- should end with the extension _._r_r_d. However, rrrrrrrrdddd----
- ttttoooooooollll will accept any filename.
+ The name of the RRRRDD you want to create. RRRRDD files
+ should end with the extension _._r_r_d. However, rrrrdd--
+ ttooooll will accept any filename.
- --------ssssttttaaaarrrrtttt|----bbbb _s_t_a_r_t _t_i_m_e (default: now - 10s)
+ ----ssttaarrtt|--bb _s_t_a_r_t _t_i_m_e (default: now - 10s)
Specifies the time in seconds since 1970-01-01 UTC
- when the first value should be added to the RRRRRRRRDDDD.
- rrrrrrrrddddttttoooooooollll will not accept any data timed before or
+ when the first value should be added to the RRRRDD.
+ rrrrddttooooll will not accept any data timed before or
at the time specified.
See also AT-STYLE TIME SPECIFICATION section in
the _r_r_d_f_e_t_c_h documentation for more ways to spec-
ify time.
- --------sssstttteeeepppp|----ssss _s_t_e_p (default: 300 seconds)
+ ----sstteepp|--ss _s_t_e_p (default: 300 seconds)
Specifies the base interval in seconds with which
- data will be fed into the RRRRRRRRDDDD.
+ data will be fed into the RRRRDD.
- DDDDSSSS::::_d_s_-_n_a_m_e::::_D_S_T::::_h_e_a_r_t_b_e_a_t::::_m_i_n::::_m_a_x
- A single RRRRRRRRDDDD can accept input from several data
- sources (DDDDSSSS). (e.g. Incoming and Outgoing traffic
- on a specific communication line). With the DDDDSSSS
+ DDSS::_d_s_-_n_a_m_e::_D_S_T::_h_e_a_r_t_b_e_a_t::_m_i_n::_m_a_x
+ A single RRRRDD can accept input from several data
+ sources (DDSS). (e.g. Incoming and Outgoing traffic
+ on a specific communication line). With the DDSS
configuration option you must define some basic
properties of each data source you want to use to
- feed the RRRRRRRRDDDD.
+ feed the RRRRDD.
_d_s_-_n_a_m_e is the name you will use to reference this
- particular data source from an RRRRRRRRDDDD. A _d_s_-_n_a_m_e must
- be 1 to 19 characters long in the characters [a-
- zA-Z0-9_].
+ particular data source from an RRRRDD. A _d_s_-_n_a_m_e must
+ be 1 to 19 characters long in the characters
+ [a-zA-Z0-9_].
_D_S_T defines the Data Source Type. See the section
on "How to Measure" below for further insight.
The Datasource Type must be one of the following:
- GGGGAAAAUUUUGGGGEEEE
+ GGAAUUGGEE
is for things like temperatures or number of
people in a room or value of a RedHat share.
- CCCCOOOOUUUUNNNNTTTTEEEERRRR
+ CCOOUUNNTTEERR
is for continuous incrementing counters like
- the InOctets counter in a router. The CCCCOOOOUUUUNNNNTTTTEEEERRRR
+ the InOctets counter in a router. The CCOOUUNNTTEERR
data source assumes that the counter never
decreases, except when a counter overflows.
The update function takes the overflow into
@@ -67,18 +67,18 @@
or 64bit border and acts accordingly by adding
an appropriate value to the result.
- DDDDEEEERRRRIIIIVVVVEEEE
+ DDEERRIIVVEE
will store the derivative of the line going
from the last to the current value of the data
source. This can be useful for gauges, for
example, to measure the rate of people enter-
ing or leaving a room. Internally, derive
- works exaclty like COUNTER but without over-
+ works exactly like COUNTER but without over-
flow checks. So if your counter does not reset
at 32 or 64 bit you might want to use DERIVE
and combine it with a MIN value of 0.
- AAAABBBBSSSSOOOOLLLLUUUUTTTTEEEE
+ AABBSSOOLLUUTTEE
is for counters which get reset upon reading.
This is used for fast counters which tend to
overflow. So instead of reading them normally
@@ -100,7 +100,7 @@
_*_U_N_K_N_O_W_N_*. If you do not know or care about min
and max, set them to U for unknown. Note that min
and max always refer to the processed values of
- the DS. For a traffic-CCCCOOOOUUUUNNNNTTTTEEEERRRR type DS this would
+ the DS. For a traffic-CCOOUUNNTTEERR type DS this would
be the max and min data-rate expected from the
device.
@@ -110,20 +110,20 @@
_s_a_n_i_t_y _c_h_e_c_k _o_n _t_h_e _d_a_t_a _s_u_p_p_l_i_e_d _w_h_e_n _r_u_n_n_i_n_g
_u_p_d_a_t_e_.
- RRRRRRRRAAAA::::_C_F::::_x_f_f::::_s_t_e_p_s::::_r_o_w_s
- The purpose of an RRRRRRRRDDDD is to store data in the
- round robin archives (RRRRRRRRAAAA). An archive consists of
+ RRRRAA::_C_F::_x_f_f::_s_t_e_p_s::_r_o_w_s
+ The purpose of an RRRRDD is to store data in the
+ round robin archives (RRRRAA). An archive consists of
a number of data values from all the defined data-
- sources (DDDDSSSS) and is defined with an RRRRRRRRAAAA line.
+ sources (DDSS) and is defined with an RRRRAA line.
- When data is entered into an RRRRRRRRDDDD, it is first fit
- into time slots of the length defined with the ----ssss
+ When data is entered into an RRRRDD, it is first fit
+ into time slots of the length defined with the --ss
option becoming a _p_r_i_m_a_r_y _d_a_t_a _p_o_i_n_t.
The data is also consolidated with the consolida-
tion function (_C_F) of the archive. The following
- consolidation functions are defined: AAAAVVVVEEEERRRRAAAAGGGGEEEE, MMMMIIIINNNN,
- MMMMAAAAXXXX, LLLLAAAASSSSTTTT.
+ consolidation functions are defined: AAVVEERRAAGGEE, MMIINN,
+ MMAAXX, LLAASSTT.
_x_f_f The xfiles factor defines what part of a con-
solidation interval may be made up from _*_U_N_K_N_O_W_N_*
@@ -135,9 +135,9 @@
which then goes into the archive.
_r_o_w_s defines how many generations of data values
- are kept in an RRRRRRRRAAAA.
+ are kept in an RRRRAA.
-TTTThhhheeee HHHHEEEEAAAARRRRTTTTBBBBEEEEAAAATTTT aaaannnndddd tttthhhheeee SSSSTTTTEEEEPPPP
+TThhee HHEEAARRTTBBEEAATT aanndd tthhee SSTTEEPP
Here is an explanation by Don Baarda on the inner workings
of rrdtool. It may help you to sort out why all this
*UNKNOWN* data is popping up in your databases:
@@ -180,7 +180,7 @@
entire day period being set to the same average rate. _-_-
_D_o_n _B_a_a_r_d_a _<_d_o_n_._b_a_a_r_d_a_@_b_a_e_s_y_s_t_e_m_s_._c_o_m_>
-HHHHOOOOWWWW TTTTOOOO MMMMEEEEAAAASSSSUUUURRRREEEE
+HHOOWW TTOO MMEEAASSUURREE
Here are a few hints on how to measure:
Temperature
@@ -188,7 +188,7 @@
get the temperature. The temperature is not realy
connected with a time. The only connection is that the
temperature reading happened at a certain time. You
- can use the GGGGAAAAUUUUGGGGEEEE data source type for this. RRRtool
+ can use the GGAAUUGGEE data source type for this. RRRtool
will the record your reading together with the time.
Mail Messages
@@ -196,7 +196,7 @@
sages transported by your mailserver in a certain
amount of time, this give you data like '5 messages in
the last 65 seconds'. If you look at the count of 5
- like and AAAABBBBSSSSOOOOLLLLUUUUTTTTEEEE datatype you can simply update the
+ like and AABBSSOOLLUUTTEE datatype you can simply update the
rrd with the number 5 and the end time of your moni-
toring period. RRDtool will then record the number of
messages per second. If at some later stage you want
@@ -223,13 +223,13 @@
graph you see for example GB on the y axis, days on
the x axis and one bar for each day).
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE
+EEXXAAMMPPLLEE
"rrdtool create temperature.rrd --step 300
DS:temp:GAUGE:600:-273:5000 RRA:AVERAGE:0.5:1:1200
RRA:MIN:0.5:12:2400 RRA:MAX:0.5:12:2400 RRA:AVER-
AGE:0.5:12:2400"
- This sets up an RRRRRRRRDDDD called _t_e_m_p_e_r_a_t_u_r_e_._r_r_d which accepts
+ This sets up an RRRRDD called _t_e_m_p_e_r_a_t_u_r_e_._r_r_d which accepts
one temperature value every 300 seconds. If no new data is
supplied for more than 600 seconds, the temperature
becomes _*_U_N_K_N_O_W_N_*. The minimum acceptable value is -273
@@ -243,9 +243,9 @@
RRA's do the same for the maximum and average temperature,
respectively.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-05-02 1.0.40 RRDCREATE(1)
+1.0.41 2002-12-20 RRDCREATE(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/bin_dec_hex.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/bin_dec_hex.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/bin_dec_hex.html 2003-02-20 15:24:00.000000000 -0800
@@ -1,37 +1,40 @@
-<HTML>
-<HEAD>
-<TITLE>bin_dec_hex</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>bin_dec_hex</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>Binary Decimal Hexadecimal - How does it work</P>
-<div align="right"><a href="bin_dec_hex.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>Most people use the decimal numbering system. This system uses ten
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Binary Decimal Hexadecimal - How does it work</p>
+<div align="right"><a href="bin_dec_hex.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Most people use the decimal numbering system. This system uses ten
symbols to represent numbers. When those ten symbols are used up, they
start all over again and increment the position just before this. The
digit 0 is only shown if it is the only symbol in the sequence, or if
-it is not the first one.</P>
-<P>If this sounds as crypto to you, this is what I've said in numbers:</P>
-<PRE>
+it is not the first one.</p>
+<p>If this sounds as crypto to you, this is what I've said in numbers:</p>
+<pre>
0
1
2
@@ -45,19 +48,19 @@
10
11
12
- 13</PRE>
-<P>and so on.</P>
-<P>Each time the digit nine should be incremented, it is reset to 0 and the
+ 13</pre>
+<p>and so on.</p>
+<p>Each time the digit nine should be incremented, it is reset to 0 and the
position before is incremented. Then number 9 can be seen as ``00009'' and
when we should increment 9, we reset it to zero and increment the digit
just before the 9 so the number becomes ``00010''. For zero's we write a
space if it is not the only digit (so: number 0) and if it is the first
-digit: ``00010'' -> `` 0010'' -> `` 010'' -> `` 10''. It is not `` 1 ''.</P>
-<P>This was pretty basic, you already knew this. Why did I tell it ?
+digit: ``00010'' -> `` 0010'' -> `` 010'' -> `` 10''. It is not `` 1 ''.</p>
+<p>This was pretty basic, you already knew this. Why did I tell it ?
Well, computers do not represent numbers with 10 different digits. They
know of only two different symbols, being 0 and 1. Apply the same rules
-to this set of digits and you get the binary numbering system:</P>
-<PRE>
+to this set of digits and you get the binary numbering system:</p>
+<pre>
0
1
10
@@ -71,46 +74,46 @@
1010
1011
1100
- 1101</PRE>
-<P>and so on.</P>
-<P>If you count the number of rows, you'll see that these are again 14
+ 1101</pre>
+<p>and so on.</p>
+<p>If you count the number of rows, you'll see that these are again 14
different numbers. The numbers are the same and mean the same. It is
only a different representation. This means that you have to know the
representation used, or as it is called the numbering system or base.
Normally if we do not speak about the numbering system used, we're
using the decimal system. If we are talking about another numbering
system, we'll have to make that clear. There are a few wide-spread
-methods to do so. One common form is to write <CODE>1010(2)</CODE> which means that
+methods to do so. One common form is to write <code>1010(2)</code> which means that
you wrote down a number in the binary form. It is the number ten.
-If you would write 1010 it means the number one thousand and ten.</P>
-<P>In books, another form is most used. It uses subscript (little chars,
+If you would write 1010 it means the number one thousand and ten.</p>
+<p>In books, another form is most used. It uses subscript (little chars,
more or less in between two rows). You can leave out the parentheses
in that case and write down the number in normal characters followed
-with a little two just behind it.</P>
-<P>The numbering system used is also called the base. We talk of the number
-1100 base 2, the number 12 base 10.</P>
-<P>For the binary system, is is common to write leading zero's. The numbers
+with a little two just behind it.</p>
+<p>The numbering system used is also called the base. We talk of the number
+1100 base 2, the number 12 base 10.</p>
+<p>For the binary system, is is common to write leading zero's. The numbers
are written down in series of four, eight or sixteen depending on the
-context.</P>
-<P>We can use the binary form when talking to computers (...programming...)
+context.</p>
+<p>We can use the binary form when talking to computers (...programming...)
but the numbers will have large representations. The number 65535 would
-be written down as <CODE>1111111111111111(2)</CODE> which is 16 times the digit 1.
+be written down as <code>1111111111111111(2)</code> which is 16 times the digit 1.
This is difficult and prone to errors. Therefore we normally would use
another base, called hexadecimal. It uses 16 different symbols. First
the symbols from the decimal system are used, thereafter we continue
with the alphabetic characters. We get 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,
B, C, D, E and F. This system is chosen because the hexadecimal form
-can be converted into the binary system very easy (and back).</P>
-<P>There is yet another system in use, called the octal system. This was
+can be converted into the binary system very easy (and back).</p>
+<p>There is yet another system in use, called the octal system. This was
more common in the old days but not anymore. You will find it in use
on some places so get used to it. The same story applies, but now with
-only eight different symbols.</P>
-<PRE>
+only eight different symbols.</p>
+<pre>
Binary (2)
Octal (8)
Decimal (10)
- Hexadecimal (16)</PRE>
-<PRE>
+ Hexadecimal (16)</pre>
+<pre>
(2) (8) (10) (16)
00000 0 0 0
00001 1 1 1
@@ -133,24 +136,24 @@
10010 22 18 12
10011 23 19 13
10100 24 20 14
- 10101 25 21 15</PRE>
-<P>Most computers used nowadays are using bytes of eight bits. This means
+ 10101 25 21 15</pre>
+<p>Most computers used nowadays are using bytes of eight bits. This means
that they store eight bits at a time. You can see why the octal system
is not the most preferred for that: You'd need three digits to represent
the eight bits and this means that you'd have to use one complete digit
to represent only two bits (2+3+3=8). This is a waste. For hexadecimal
-digits, you need only two digits which are used completely:</P>
-<PRE>
+digits, you need only two digits which are used completely:</p>
+<pre>
(2) (8) (10) (16)
- 11111111 377 255 FF</PRE>
-<P>You can see why binary and hexadecimal can be converted quickly:
+ 11111111 377 255 FF</pre>
+<p>You can see why binary and hexadecimal can be converted quickly:
For each hexadecimal digit there are exactly four binary digits.
Take a binary number. Each time take four digits from the right and make
a hexadecimal digit from it (see the table above). Stop when there are
no more digits.
Other way around: Take a hexadecimal number. For each digit, write down
-its binary equivalent.</P>
-<P>Computers (or rather the parsers running on them) would have a hard time
+its binary equivalent.</p>
+<p>Computers (or rather the parsers running on them) would have a hard time
converting a number like 1234(16). Therefore hexadecimal numbers get a
prefix. This prefix depends on the language you're writing in. Some of
the prefixes are ``0x'' for C, ``$'' for Pascal, ``#'' for HTML.
@@ -158,75 +161,75 @@
It does not matter what is used as long as you know what it is.
I will use ``0x'' for hexadecimal, ``%'' for binary and ``0'' for octal.
The following numbers are all the same, just the way they are written is
-different: 021 0x11 17 %00010001</P>
-<P>To do arithmetics and conversions you need to understand one more thing.
-It is something you already know but perhaps you do not ``see'' it yet:</P>
-<P>If you write down 1234, (so it is decimal) you are talking about the
-number one thousand, two hundred and thirty four. In sort of a formula:</P>
-<PRE>
+different: 021 0x11 17 %00010001</p>
+<p>To do arithmetics and conversions you need to understand one more thing.
+It is something you already know but perhaps you do not ``see'' it yet:</p>
+<p>If you write down 1234, (so it is decimal) you are talking about the
+number one thousand, two hundred and thirty four. In sort of a formula:</p>
+<pre>
1 * 1000 = 1000
2 * 100 = 200
3 * 10 = 30
- 4 * 1 = 4</PRE>
-<P>This can also be written as:</P>
-<PRE>
+ 4 * 1 = 4</pre>
+<p>This can also be written as:</p>
+<pre>
1 * 10^3
2 * 10^2
3 * 10^1
- 4 * 10^0</PRE>
-<P>where ^ means ``to the power of''.</P>
-<P>We are using the base 10, and the positions 0,1,2 and 3.
+ 4 * 10^0</pre>
+<p>where ^ means ``to the power of''.</p>
+<p>We are using the base 10, and the positions 0,1,2 and 3.
The right-most position should NOT be multiplied with 10. The second
from the right should be multiplied one time with 10. The third from
the right is multiplied with 10 two times. This continues for whatever
-positions are used.</P>
-<P>It is the same in all other representations:</P>
-<P>0x1234 will be</P>
-<PRE>
+positions are used.</p>
+<p>It is the same in all other representations:</p>
+<p>0x1234 will be</p>
+<pre>
1 * 16^3
2 * 16^2
3 * 16^1
- 4 * 16^0</PRE>
-<P>01234 would be</P>
-<PRE>
+ 4 * 16^0</pre>
+<p>01234 would be</p>
+<pre>
1 * 8^3
2 * 8^2
3 * 8^1
- 4 * 8^0</PRE>
-<P>This example can not be done for binary as that system can only use two
-symbols. Another example:</P>
-<P>%1010 would be</P>
-<PRE>
+ 4 * 8^0</pre>
+<p>This example can not be done for binary as that system can only use two
+symbols. Another example:</p>
+<p>%1010 would be</p>
+<pre>
1 * 2^3
0 * 2^2
1 * 2^1
- 0 * 2^0</PRE>
-<P>It would have been more easy to convert it to its hexadecimal form and
+ 0 * 2^0</pre>
+<p>It would have been more easy to convert it to its hexadecimal form and
just translate %1010 into 0xA. After a while you get used to it. You will
-not need to do any calculations anymore but just know that 0xA means 10.</P>
-<P>To convert a decimal number into a hexadecimal one you could use the next
+not need to do any calculations anymore but just know that 0xA means 10.</p>
+<p>To convert a decimal number into a hexadecimal one you could use the next
method. It will take some time to be able to do the estimates but it will
be more and more easy when you use the system more frequent. Another way
-is presented to you thereafter.</P>
-<P>First you will need to know how many positions will be used in the other
+is presented to you thereafter.</p>
+<p>First you will need to know how many positions will be used in the other
system. To do so, you need to know the maximum numbers. Well, that's not
so hard as it looks. In decimal, the maximum number that you can form
with two digits is ``99''. The maximum for three: ``999''. The next number
would need an extra position. Reverse this idea and you will see that
the number can be found by taking 10^3 (10*10*10 is 1000) minus 1 or
-10^2 minus one.</P>
-<P>This can be done for hexadecimal too:</P>
-<PRE>
+10^2 minus one.</p>
+<p>This can be done for hexadecimal too:</p>
+<pre>
16^4 = 0x10000 = 65536
16^3 = 0x1000 = 4096
16^2 = 0x100 = 256
- 16^1 = 0x10 = 16</PRE>
-<P>If a number is smaller than 65536 it will thus fit in four positions.
+ 16^1 = 0x10 = 16</pre>
+<p>If a number is smaller than 65536 it will thus fit in four positions.
If the number is bigger than 4095, you will need to use position 4.
How many times can you take 4096 from the number without going below
zero is the first digit you write down. This will always be a number
-from 1 to 15 (0x1 to 0xF). Do the same for the other positions.</P>
-<P>Number is 41029. It is smaller than 16^4 but bigger than 16^3-1. This
+from 1 to 15 (0x1 to 0xF). Do the same for the other positions.</p>
+<p>Number is 41029. It is smaller than 16^4 but bigger than 16^3-1. This
means that we have to use four positions.
We can subtract 16^3 from 41029 ten times without going below zero.
The leftmost digit will be ``A'' so we have 0xA????.
@@ -235,27 +238,27 @@
is therefore ``0'' and we know 0xA0??.
69 is smaller than 16^2 and bigger than 16^1-1. We can subtract 16^1
(which is just plain 16) four times and write down ``4'' to get 0xA04?.
-Take 64 from 69 (69 - 4*16) and the last digit is 5 --> 0xA045.</P>
-<P>The other method builds the number from the right. Take again 41029.
-Divide by 16 and do not use fractions (only whole numbers).</P>
-<PRE>
+Take 64 from 69 (69 - 4*16) and the last digit is 5 --> 0xA045.</p>
+<p>The other method builds the number from the right. Take again 41029.
+Divide by 16 and do not use fractions (only whole numbers).</p>
+<pre>
41029 / 16 is 2564 with a remainder of 5. Write down 5.
2564 / 16 is 160 with a remainder of 4. Write the 4 before the 5.
160 / 16 is 10 with no remainder. Prepend 45 with 0.
- 10 / 16 is below one. End here and prepend 0xA. End up with 0xA045.</PRE>
-<P>Which method to use is up to you. Use whatever works for you. Personally
+ 10 / 16 is below one. End here and prepend 0xA. End up with 0xA045.</pre>
+<p>Which method to use is up to you. Use whatever works for you. Personally
I use them both without being able to tell what method I use in each
case, it just depends on the number, I think. Fact is, some numbers
will occur frequently while programming, if the number is close then
I will use the first method (like 32770, translate into 32768 + 2 and
-just know that it is 0x8000 + 0x2 = 0x8002).</P>
-<P>For binary the same approach can be used. The base is 2 and not 16,
+just know that it is 0x8000 + 0x2 = 0x8002).</p>
+<p>For binary the same approach can be used. The base is 2 and not 16,
and the number of positions will grow rapidly. Using the second method
has the advantage that you can see very simple if you should write down
a zero or a one: if you divide by two the remainder will be zero if it
was an even number and one if it was an odd number:
-</P>
-<PRE>
+</p>
+<pre>
41029 / 2 = 20514 remainder 1
20514 / 2 = 10257 remainder 0
@@ -272,17 +275,17 @@
10 / 2 = 5 remainder 0
5 / 2 = 2 remainder 1
2 / 2 = 1 remainder 0
- 1 / 2 below 0 remainder 1</PRE>
-<P>Write down the results from right to left: %1010000001000101</P>
-<P>Group by four:</P>
-<PRE>
+ 1 / 2 below 0 remainder 1</pre>
+<p>Write down the results from right to left: %1010000001000101</p>
+<p>Group by four:</p>
+<pre>
%1010000001000101
%101000000100 0101
%10100000 0100 0101
- %1010 0000 0100 0101</PRE>
-<P>Convert into hexadecimal: 0xA045</P>
-<P>Group %1010000001000101 by three and convert into octal:</P>
-<PRE>
+ %1010 0000 0100 0101</pre>
+<p>Convert into hexadecimal: 0xA045</p>
+<p>Group %1010000001000101 by three and convert into octal:</p>
+<pre>
%1010000001000101
%1010000001000 101
%1010000001 000 101
@@ -290,23 +293,23 @@
%1010 000 001 000 101
%1 010 000 001 000 101
%001 010 000 001 000 101
- 1 2 0 1 0 5 --> 0120105</PRE>
-<PRE>
+ 1 2 0 1 0 5 --> 0120105</pre>
+<pre>
So: %1010000001000101 = 0120105 = 0xA045 = 41029
Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029(10)
- Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029</PRE>
-<P>At first while adding numbers, you'll convert them to their decimal
+ Or: 1010000001000101(2) = 120105(8) = A045(16) = 41029</pre>
+<p>At first while adding numbers, you'll convert them to their decimal
form and then back into their original form after doing the addition.
If you use the other numbering system often, you will see that you'll
be able to do arithmetics in the base that is used.
In any representation it is the same, add the numbers on the right,
write down the rightmost digit from the result, remember the other
digits and use them in the next round. Continue with the second digits
-from the right and so on:</P>
-<PRE>
- %1010 + %0111 --> 10 + 7 --> 17 --> %00010001</PRE>
-<P>will become</P>
-<PRE>
+from the right and so on:</p>
+<pre>
+ %1010 + %0111 --> 10 + 7 --> 17 --> %00010001</pre>
+<p>will become</p>
+<pre>
%1010
%0111 +
||||
@@ -316,30 +319,32 @@
+----- add 1 + 0 + 1(remembered), result = 0, remember 1
nothing to add, 1 remembered, result = 1
--------
- %10001 is the result, I like to write it as %00010001</PRE>
-<P>For low values, try to do the calculations yourself, check them with
+ %10001 is the result, I like to write it as %00010001</pre>
+<p>For low values, try to do the calculations yourself, check them with
a calculator. The more you do the calculations yourself, the more you
find that you didn't make mistakes. In the end, you'll do calculi in
-other bases as easy as you do in decimal.</P>
-<P>When the numbers get bigger, you'll have to realize that a computer is
+other bases as easy as you do in decimal.</p>
+<p>When the numbers get bigger, you'll have to realize that a computer is
not called a computer just to have a nice name. There are many different
calculators available. Use them. For Unix you could use ``bc'' which is
called so as it is short for Binary Calculator. It calculates not only
-in decimal, but in all bases you'll ever use (among them Binary).</P>
-<P>For people on Windows:
+in decimal, but in all bases you'll ever use (among them Binary).</p>
+<p>For people on Windows:
Start the calculator (start->programs->accessories->calculator)
and if necessary click view->scientific. You now have a scientific
-calculator and can compute in binary or hexadecimal.</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>I hope you enjoyed the examples and their descriptions. If you do, help
+calculator and can compute in binary or hexadecimal.</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>I hope you enjoyed the examples and their descriptions. If you do, help
other people by pointing them to this document when they are asking
basic questions. They will not only get their answer but at the same
-time learn a whole lot more.</P>
-<P>Alex van den Bogaerdt
-<<A HREF="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</A>></P>
+time learn a whole lot more.</p>
+<p>Alex van den Bogaerdt
+<<a href="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</a>>
+</p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.pod
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdcreate.pod (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.pod 2003-02-20 15:24:00.000000000 -0800
@@ -76,7 +76,7 @@
will store the derivative of the line going from the last to the
current value of the data source. This can be useful for gauges, for
example, to measure the rate of people entering or leaving a
-room. Internally, derive works exaclty like COUNTER but without
+room. Internally, derive works exactly like COUNTER but without
overflow checks. So if your counter does not reset at 32 or 64 bit you
might want to use DERIVE and combine it with a MIN value of 0.
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdupdate.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdupdate.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdupdate.html 2003-02-20 15:24:00.000000000 -0800
@@ -1,90 +1,108 @@
-<HTML>
-<HEAD>
-<TITLE>rrdupdate</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdupdate</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#example">EXAMPLE</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#example">EXAMPLE</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool update - Store a new set of values into the rrd</P>
-<div align="right"><a href="rrdupdate.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>update</STRONG> <EM>filename</EM>
-[<STRONG>--template</STRONG>|<STRONG>-t</STRONG> <EM>ds-name</EM>[<STRONG>:</STRONG><EM>ds-name</EM>]...]
-<STRONG>N</STRONG>|<EM>timestamp</EM><STRONG>:</STRONG><EM>value</EM>[<STRONG>:</STRONG><EM>value</EM>...]
-[<EM>timestamp</EM><STRONG>:</STRONG><EM>value</EM>[<STRONG>:</STRONG><EM>value</EM>...] ...]</P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>update</STRONG> function feeds new data values into an <STRONG>RRD</STRONG>. The
-data gets time aligned according to the properties of the <STRONG>RRD</STRONG> to
-which the data is written.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename"><EM>filename</EM></A></STRONG><BR>
-<DD>
-The name of the <STRONG>RRD</STRONG> you want to update.
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Dtemplate%7C%2Dt_ds%2Dname%5B%3Ads%2Dname%5D%"><STRONG>--template</STRONG>|<STRONG>-t</STRONG> <EM>ds-name</EM>[<STRONG>:</STRONG><EM>ds-name</EM>]...</A></STRONG><BR>
-<DD>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool update - Store a new set of values into the rrd</p>
+<div align="right"><a href="rrdupdate.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>update</strong> <em>filename</em>
+[<strong>--template</strong>|<strong>-t</strong> <em>ds-name</em>[<strong>:</strong><em>ds-name</em>]...]
+<strong>N</strong>|<em>timestamp</em><strong>:</strong><em>value</em>[<strong>:</strong><em>value</em>...]
+[<em>timestamp</em><strong>:</strong><em>value</em>[<strong>:</strong><em>value</em>...] ...]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>update</strong> function feeds new data values into an <strong>RRD</strong>. The
+data gets time aligned according to the properties of the <strong>RRD</strong> to
+which the data is written.</p>
+<dl>
+<dt><strong><a name="item_filename"><em>filename</em></a></strong><br />
+</dt>
+<dd>
+The name of the <strong>RRD</strong> you want to update.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dtemplate%7c%2dt_ds%2dname%5b%3ads%2dname%5d%"><strong>--template</strong>|<strong>-t</strong> <em>ds-name</em>[<strong>:</strong><em>ds-name</em>]...</a></strong><br />
+</dt>
+<dd>
by default, the update function expects the data input in the order,
the data sources are defined in the RRD. This is not very error
resistant, as you might be sending the wrong data into a RRD.
-<P>The template switch allows you to specify which data sources you are
+</dd>
+<dd>
+<p>The template switch allows you to specify which data sources you are
going to update and in which order. If the data sources specified in
the template are not available in the rrd file, the update process
-will abort with an error message.</P>
-<P></P>
-<DT><STRONG><A NAME="item_N%7Ctimestamp%3Avalue%5B%3Avalue%2E%2E%2E%5D"><STRONG>N</STRONG>|<EM>timestamp</EM><STRONG>:</STRONG><EM>value</EM>[<STRONG>:</STRONG><EM>value</EM>...]</A></STRONG><BR>
-<DD>
+will abort with an error message.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_n%7ctimestamp%3avalue%5b%3avalue%2e%2e%2e%5d"><strong>N</strong>|<em>timestamp</em><strong>:</strong><em>value</em>[<strong>:</strong><em>value</em>...]</a></strong><br />
+</dt>
+<dd>
The data used for updating the RRD was acquired at a certain time. This
time can either be defined in seconds since 1970-01-01. Or by using the
letter 'N' the update time is set to be the current time. Negative time
values are subtracted from the current time.
Getting the timing right to the second is especially
-important when you are working with data-sources of type <STRONG>COUNTER</STRONG>,
-<STRONG>DERIVE</STRONG> or <STRONG>ABSOLUTE</STRONG>.
-<P>The remaining elements of the argument are DS updates. The order of this list is
+important when you are working with data-sources of type <strong>COUNTER</strong>,
+<strong>DERIVE</strong> or <strong>ABSOLUTE</strong>.
+</dd>
+<dd>
+<p>The remaining elements of the argument are DS updates. The order of this list is
the same as the order the data sources were defined in the rra.
If there is no data for a certain data-source, the letter
-<STRONG>U</STRONG> (eg. N:0.1:U:1) can be defined.</P>
-<P>The format of the value acquired from the data source is dependent of the
+<strong>U</strong> (eg. N:0.1:U:1) can be defined.</p>
+</dd>
+<dd>
+<p>The format of the value acquired from the data source is dependent of the
data source type chosen. Normally it will be numeric, but the data acquisition
modules may impose their very own parsing of this parameter as long as the colon
-(<STRONG>:</STRONG>) remains the data source value separator.</P>
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="example">EXAMPLE</A></H1>
-<P><CODE>rrdtool update demo1.rrd N:3.44:3.15:U:23</CODE></P>
-<P>Update the database file demo1.rrd with 3 known and one <EM>*UNKNOWN*</EM>
-value. Use the current time as the update time.</P>
-<P><CODE>rrdtool update demo2.rrd 887457267:U 887457521:22 88745790:2.7</CODE></P>
-<P>Update the database file demo2.rrd which expects data from a single
-data-source, three times. First with an <EM>*UNKNOWN*</EM> value then with two
-normal readings. The update interval seems to be around 300 seconds.</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+(<strong>:</strong>) remains the data source value separator.</p>
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="example">EXAMPLE</a></h1>
+<p><code>rrdtool update demo1.rrd N:3.44:3.15:U:23</code></p>
+<p>Update the database file demo1.rrd with 3 known and one <em>*UNKNOWN*</em>
+value. Use the current time as the update time.</p>
+<p><code>rrdtool update demo2.rrd 887457267:U 887457521:22 88745790:2.7</code></p>
+<p>Update the database file demo2.rrd which expects data from a single
+data-source, three times. First with an <em>*UNKNOWN*</em> value then with two
+normal readings. The update interval seems to be around 300 seconds.</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtutorial.es.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.txt 2003-02-20 15:24:00.000000000 -0800
@@ -2,11 +2,11 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtutorial - Tutorial sobre RRDtool por Alex van den
Bogaerdt (Traducido al castellano por Jes'us Couto Fandi~no)
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN //// DDDDEEEESSSSCCCCRRRRIIIIPPPPCCCCIIII''OO''OONNNN
+DDEESSCCRRIIPPTTIIOONN
RRDtool es un programa escrito por Tobias Oetiker con la
colaboraci'on de muchas personas en diversas partes del
mundo. Alex van den Bogaerdt escribi'o este documento para
@@ -20,15 +20,15 @@
explica algunas ideas generales sobre estad'istica, con un
enfoque particular hacia las redes.
-TTTTUUUUTTTTOOOORRRRIIIIAAAALLLL
- IIIImmmmppppoooorrrrttttaaaannnntttteeee
+TTUUTTOORRIIAALL
+ IImmppoorrttaannttee
,iPor favor, no te adelantes en la lectura de este docu-
mento! Esta primera parte explica los fundamentos b'asicos.
Puede ser aburrida, pero si te saltas los fundamentos, los
ejemplos no te van a tener mucho sentido.
- ''cc''ccQQQQuuuu''ee''ee eeeessss RRRRRRRRDDDDttttoooooooollll????
+ ''ccQQuu''ee eess RRRRDDttooooll??
RRDtool significa "herramienta de bases de datos en round
robin". "Round robin" es una t'ecnica que implica un
@@ -48,7 +48,7 @@
con estas bases de datos en "round-robin", guardando y
recuperando datos de ellas.
- ''cc''ccQQQQuuuu''ee''ee ddddaaaattttoooossss ppppuuuueeeeddddeeeennnn gggguuuuaaaarrrrddddaaaarrrrsssseeee eeeennnn uuuunnnnaaaa RRRRRRRRDDDD????
+ ''ccQQuu''ee ddaattooss ppuueeddeenn gguuaarrddaarrssee eenn uunnaa RRRRDD??
Lo que se te ocurra. Debes poder medir alg'un valor dado en
distintos momentos en el tiempo y proveer a RRDtool de
@@ -68,7 +68,7 @@
mantienen. Son estos valores de estos contadores los que
vamos a almacenar en la RRD.
- ''cc''ccQQQQuuuu''ee''ee ppppuuuueeeeddddoooo hhhhaaaacccceeeerrrr ccccoooonnnn eeeessssttttaaaa hhhheeeerrrrrrrraaaammmmiiiieeeennnnttttaaaa????
+ ''ccQQuu''ee ppuueeddoo hhaacceerr ccoonn eessttaa hheerrrraammiieennttaa??
RRDtool se deriva de MRTG (Multi Router Traffic Grapher,
Graficador De Tr'afico de M'ultiples Enrutadores). MRTG
@@ -95,7 +95,7 @@
medir los datos y seas capaz de pasarle los n'umeros a RRD-
tool.
- ''cc''ccYYYY ssssiiii aaaa''uu''uunnnn tttteeeennnnggggoooo pppprrrroooobbbblllleeeemmmmaaaassss ddddeeeessssppppuuuu''ee''eessss ddddeeee lllleeeeeeeerrrr eeeesssstttteeee ddddooooccccuuuummmmeeeennnnttttoooo????
+ ''ccYY ssii aa''uunn tteennggoo pprroobblleemmaass ddeessppuu''eess ddee lleeeerr eessttee ddooccuummeennttoo??
Lo primero, ,il'eelo otra vez!. Puede que te hayas perdido
de algo. Si no puedes compilar el c'odigo fuente y usas un
@@ -116,12 +116,12 @@
con RRDtool para ver donde est'a el archivo y como usarlo.
Te sugiero que te tomes un momento y te subscribas a la
- lista ahora mismo, enviando un mensaje a rrd-users-
- request at list.ee.ethz.ch con t'itulo "subscribe". Si even-
- tualmente deseas salirte de la lista, env'ia otro correo a
- la misma direcci'on, con t'itulo "unsubscribe".
+ lista ahora mismo, enviando un mensaje a
+ rrd-users-request at list.ee.ethz.ch con t'itulo "subscribe".
+ Si eventualmente deseas salirte de la lista, env'ia otro
+ correo a la misma direcci'on, con t'itulo "unsubscribe".
- ''cc''ccCCCC''oo''oommmmoooo mmmmeeee vvvvaaaassss aaaa aaaayyyyuuuuddddaaaarrrr????
+ ''ccCC''oommoo mmee vvaass aa aayyuuddaarr??
D'andote descripciones y ejemplos detallados. Asumimos que
el seguir las instrucciones en el orden en que se presen-
@@ -135,7 +135,7 @@
Necesitar'as saber algo sobre n'umeros hexadecimales. Si no,
empieza por leer "bin_dec_hex" antes de continuar.
- TTTTuuuu pppprrrriiiimmmmeeeerrrraaaa bbbbaaaasssseeee ddddeeee ddddaaaattttoooossss eeeennnn rrrroooouuuunnnndddd----rrrroooobbbbiiiinnnn
+ TTuu pprriimmeerraa bbaassee ddee ddaattooss eenn rroouunndd--rroobbiinn
En mi opini'on, la mejor forma de aprender algo es
haci'endolo. 'cPor qu'e no empezamos ya? Vamos a crear una
@@ -241,7 +241,7 @@
(o sea, escribe: "rrdtool create test.rrd --start
920804400 DS ...")
- ''cc''ccQQQQuuuu''ee''ee hhhheeeemmmmoooossss ccccrrrreeeeaaaaddddoooo????
+ ''ccQQuu''ee hheemmooss ccrreeaaddoo??
Hemos creado una base de datos en round robin llamada test
(test.rrd), que empieza desde el mediod'ia del d'ia en que
@@ -357,7 +357,7 @@
Lo que representa exactamente esta salida lo vamos m'as
adelante en el tutorial.
- HHHHoooorrrraaaa ddddeeee hhhhaaaacccceeeerrrr aaaallllgggguuuunnnnoooossss ggggrrrr''aa''aaffffiiiiccccoooossss
+ HHoorraa ddee hhaacceerr aallgguunnooss ggrr''aaffiiccooss
Prueba este comando:
@@ -397,7 +397,7 @@
mostrar'an usando la URL ``file://el/camino/de/directo-
rios/hasta/speed.gif''
- GGGGrrrr''aa''aaffffiiiiccccoooossss ccccoooonnnn uuuunnnn ppppooooccccoooo ddddeeee mmmmaaaatttteeeemmmm''aa''aattttiiiiccccaaaa
+ GGrr''aaffiiccooss ccoonn uunn ppooccoo ddee mmaatteemm''aattiiccaa
Cuando veas la imagen, notar'as que el eje horizontal tiene
unas etiquetas marcando las 12:10, 12:20, 12:30, 12:40 y
@@ -488,8 +488,7 @@
Verifica si la velocidad en kmh es mayor que 100 ( kmh,100 ) GT
Si es as'i, retorna la velocidad, si no, retorna 0 ((( kmh,100) GT ), kmh, 0) IF
-
- MMMMaaaaggggiiiiaaaa ggggrrrr''aa''aaffffiiiiccccaaaa
+ MMaaggiiaa ggrr''aaffiiccaa
Me gusta creer que virtualmente no hay limites para lo que
RRDtool puede hacer con los datos. No voy a explicarlo en
@@ -531,7 +530,7 @@
taras darle al bot'on mientras presionas la tecla de
may'usculas.
- AAAAccccttttuuuuaaaalllliiiizzzzaaaacccciiiioooonnnneeeessss ddddeeee vvvveeeerrrrddddaaaadddd
+ AAccttuuaalliizzaacciioonneess ddee vveerrddaadd
Ya hemos usado el comando ``update''; vimos que recibia
uno o m'as par'ametros en el formato: ``<fecha>:<valor>''.
@@ -558,7 +557,7 @@
poner en un script. Luego de correrlo, basta con cargar
index.html
- UUUUnnnnaaaassss ppppaaaallllaaaabbbbrrrraaaassss ssssoooobbbbrrrreeee SSSSNNNNMMMMPPPP
+ UUnnaass ppaallaabbrraass ssoobbrree SSNNMMPP
Me imagino que muy pocas personas ser'an capaces de obtener
en su ordenador datos reales de su coche cada 5 minutos;
@@ -591,8 +590,8 @@
acteres de la comunidad de lectura", como se le denomina
en el mundillo SNMP. Muchos dispositivos aceptar'an "pub-
lic" como cadena por defecto, pero por razones de privaci-
- dad y seguridad esta clave puede estar deshabilitada.
- Consulta la documentaci'on correspondiente al dispositivo o
+ dad y seguridad esta clave puede estar deshabilitada. Con-
+ sulta la documentaci'on correspondiente al dispositivo o
programa.
Luego esta el tercer par'ametro, llamado OID (Object IDen-
@@ -658,8 +657,8 @@
Con suerte, usando este comando obtendr'as un n'umero como
resultado: el n'umero de interfaces del dispositivo. Si es
- as'i, seguiremos adelante con otro programa, llamado "snmp-
- walk"
+ as'i, seguiremos adelante con otro programa, llamado
+ "snmpwalk"
snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr
@@ -705,7 +704,7 @@
itivo con el que est'as probando, sigue adelante con el
tutorial. Si no, vuelve a leer esta secci'on; es importante
- UUUUnnnn eeeejjjjeeeemmmmpppplllloooo rrrreeeeaaaallll
+ UUnn eejjeemmpplloo rreeaall
Ok, empecemos con la diversi'on. Primero, crea una base de
datos nueva. Vamos a guardar en ella 2 contadores, "input"
@@ -724,6 +723,7 @@
o menos esta cantidad de datos:
+
600 muestras de 5 minutos: 2 d'ias y 2 horas
600 promedios de 30 minutos: 12.5 d'ias
600 promedios de 2 horas: 50 d'ias
@@ -800,7 +800,7 @@
y en bits por segundo. Colorea el tr'afico Ethernet rojo si
sobrepasa los cuatro megabits por segundo.
- FFFFuuuunnnncccciiiioooonnnneeeessss ddddeeee ccccoooonnnnssssoooolllliiiiddddaaaacccciiii''oo''oonnnn
+ FFuunncciioonneess ddee ccoonnssoolliiddaaccii''oonn
Unos cuantos p'arrafos atr'as habl'abamos sobre la posibili-
dad de guardar el valor m'aximo en vez del promedio. Pro-
@@ -874,7 +874,7 @@
recogidos para algo para lo cual no sirven. En ese caso,
seria hasta mejor no tener gr'afico alguno.
- RRRReeeeppppaaaasssseeeemmmmoooossss lllloooo qqqquuuueeee ssssaaaabbbbeeeemmmmoooossss
+ RReeppaasseemmooss lloo qquuee ssaabbeemmooss
Ahora ya sabes como crear una base de datos. Puedes
guardar valores en ella, extraerlos creando un gr'afico,
@@ -892,7 +892,7 @@
resto del documento, sino en tu trabajo diario de monitor-
izaci'on, mucho despu'es de terminar con esta introducci'on.
- TTTTiiiippppoooossss ddddeeee ffffuuuueeeennnntttteeeessss ddddeeee ddddaaaattttoooossss
+ TTiippooss ddee ffuueenntteess ddee ddaattooss
De acuerdo, quieres continuar. Bienvenido de vuelta otra
vez y prep'arate; voy a ir m'as r'apido con los ejemplos y
@@ -966,8 +966,7 @@
DEF:linec=all.rrd:c:AVERAGE LINE3:linec#0000FF:"Line C" \
DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D"
-
- RRRRRRRRDDDDttttoooooooollll bbbbaaaajjjjoooo eeeellll mmmmiiiiccccrrrroooossssccccooooppppiiiioooo
+ RRRRDDttooooll bbaajjoo eell mmiiccrroossccooppiioo
+o La l'inea A es un contador, por lo que debe incremen-
@@ -1039,7 +1038,7 @@
constante en 300 segundos, por lo que la divisi'on nos
da resultados cada vez mayores.
- RRRReeeeiiiinnnniiiicccciiiiaaaalllliiiizzzzaaaacccciiii''oo''oonnnn ddddeeee lllloooossss ccccoooonnnnttttaaaaddddoooorrrreeeessss
+ RReeiinniicciiaalliizzaaccii''oonn ddee llooss ccoonnttaaddoorreess
Todav'ia nos quedan algunas cosas por ver. Nos quedan algu-
nas opciones importantes por cubrir, y aun no hemos
@@ -1053,12 +1052,12 @@
KM. Por supuesto esto no es cierto, por lo que necesitamos
alguna protecci'on contra estos casos. Esta protecci'on s'olo
la tenemos para el tipo COUNTER, el cual de todas formas
- era el que ten'iamos que haber usado para este tipo de
- contador. 'cC'omo funciona? Los valores tipo COUNTER no
- deben decrecer nunca, ,ipor lo que RRDtool asume en ese
- caso que el contador se ha reinicializado! Si la diferen-
- cia es negativa, esto se compensa sumando el valor m'aximo
- del contador + 1. Para nuestro coche, tendr'iamos:
+ era el que ten'iamos que haber usado para este tipo de con-
+ tador. 'cC'omo funciona? Los valores tipo COUNTER no deben
+ decrecer nunca, ,ipor lo que RRDtool asume en ese caso que
+ el contador se ha reinicializado! Si la diferencia es neg-
+ ativa, esto se compensa sumando el valor m'aximo del conta-
+ dor + 1. Para nuestro coche, tendr'iamos:
Delta = 7 - 999987 = -999980 (en vez de 1000007-999987=20)
@@ -1114,12 +1113,6 @@
Diferencia: -4294967196
Correcci'on #1: -4294967196 + 4294967296 = 100
-
-
-
-
-
-
Antes: 18446744073709551000
Incremento: 800
Deber'ia ser: 18446744073709551800
@@ -1169,7 +1162,7 @@
correctos. Siempre examina bien el gr'afico si los valores
parecen extra~nos.
- RRRReeeemmmmuuuueeeessssttttrrrreeeeoooo ddddeeee lllloooossss ddddaaaattttoooossss
+ RReemmuueessttrreeoo ddee llooss ddaattooss
Hay una funcionalidad importante de RRDtool que no hemos
explicado todav'ia: es virtualmente imposible recoger los
@@ -1185,13 +1178,13 @@
tarde y el intervalo es 303. La diferencia ser'a por tanto
303. Obviamente, RRDtool no debe colocar 303 en la base de
datos y dar as'i la impresi'on de que el contador se incre-
- ment'o 303 en 300 segundos. Aqu'i es donde RRDtool
- interpola: alter'a el valor 303 al valor que tendr'ia 3
- segundos antes y guarda 300 en 300 segundos. Digamos que
- la pr'oxima vez llegamos justo a tiempo; por tanto, el
- intervalo actual es 297 segundos, por lo que el contador
- deber'ia ser 297. De nuevo, RRDtool altera el valor y
- guarda 300, como debe ser.
+ ment'o 303 en 300 segundos. Aqu'i es donde RRDtool inter-
+ pola: alter'a el valor 303 al valor que tendr'ia 3 segundos
+ antes y guarda 300 en 300 segundos. Digamos que la pr'oxima
+ vez llegamos justo a tiempo; por tanto, el intervalo
+ actual es 297 segundos, por lo que el contador deber'ia ser
+ 297. De nuevo, RRDtool altera el valor y guarda 300, como
+ debe ser.
en RRD en realidad
tiempo+000: 0 delta="U" tiempo+000: 0 delta="U"
@@ -1235,7 +1228,7 @@
Los dos gr'aficos debe ser iguales.
-RRRREEEESSSSUUUUMMMMEEEENNNN
+RREESSUUMMEENN
Es hora de concluir este documento. Ahora debes conocer lo
b'asico como para trabajar con RRDtool y leer la docu-
mentaci'on. A'un hay mucho m'as por descubrir acerca de RRD-
@@ -1244,7 +1237,7 @@
f'acilmente muchos gr'aficos; tambi'en puedes usar las inter-
faces disponibles.
-LLLLIIIISSSSTTTTAAAA DDDDEEEE CCCCOOOORRRRRRRREEEEOOOO
+LLIISSTTAA DDEE CCOORRRREEOO
Recuerda subscribirte a la lista de correo. Aunque no con-
testes los correos que aparecen en ella, te servir'a de
ayuda a ti y a los dem'as. Mucho de lo que se sobre MRTG
@@ -1255,10 +1248,10 @@
siempre hay preguntas que tu puedes responder con lo
aprendido en este y otros documentos.
-VVVVEEEERRRR TTTTAAAAMMMMBBBBIIII''EE''EENNNN
+VVEERR TTAAMMBBII''EENN
Las p'aginas del manual de RRDtool
-AAAAUUUUTTTTOOOORRRR
+AAUUTTOORR
Espero que hayas disfrutado con los ejemplos y las
descripciones. Si es as'i, ayuda a otros refiri'endolos a
este documento cuando te hagan preguntas b'asicas. No s'olo
@@ -1269,4 +1262,4 @@
-2002-02-26 1.0.40 RRDTUTORIAL.ES(1)
+1.0.41 2003-01-20 RRDTUTORIAL.ES(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtune.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtune.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtune.txt 2003-02-20 15:24:00.000000000 -0800
@@ -2,54 +2,54 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool tune - Modify some basic properties of a Round
Robin Database
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll ttttuuuunnnneeee _f_i_l_e_n_a_m_e [--------hhhheeeeaaaarrrrttttbbbbeeeeaaaatttt|----hhhh _d_s_-_n_a_m_e:_h_e_a_r_t_b_e_a_t]
- [--------mmmmiiiinnnniiiimmmmuuuummmm|----iiii _d_s_-_n_a_m_e:_m_i_n] [--------mmmmaaaaxxxxiiiimmmmuuuummmm|----aaaa _d_s_-_n_a_m_e:_m_a_x]
- [--------ddddaaaattttaaaa----ssssoooouuuurrrrcccceeee----ttttyyyyppppeeee|----dddd _d_s_-_n_a_m_e:_D_S_T] [--------ddddaaaattttaaaa----ssssoooouuuurrrrcccceeee----
- rrrreeeennnnaaaammmmeeee|----rrrr _o_l_d_-_n_a_m_e:_n_e_w_-_n_a_m_e]
+SSYYNNOOPPSSIISS
+ rrrrddttooooll ttuunnee _f_i_l_e_n_a_m_e [----hheeaarrttbbeeaatt|--hh _d_s_-_n_a_m_e:_h_e_a_r_t_b_e_a_t]
+ [----mmiinniimmuumm|--ii _d_s_-_n_a_m_e:_m_i_n] [----mmaaxxiimmuumm|--aa _d_s_-_n_a_m_e:_m_a_x]
+ [----ddaattaa--ssoouurrccee--ttyyppee|--dd _d_s_-_n_a_m_e:_D_S_T]
+ [----ddaattaa--ssoouurrccee--rreennaammee|--rr _o_l_d_-_n_a_m_e:_n_e_w_-_n_a_m_e]
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
+DDEESSCCRRIIPPTTIIOONN
The tune option allows you to alter some of the basic con-
figuration values stored in the header area of a Round
- Robin Database (RRRRRRRRDDDD). All these tunable parameters
- together decide when data fed into an RRRRRRRRDDDD is to be
+ Robin Database (RRRRDD). All these tunable parameters
+ together decide when data fed into an RRRRDD is to be
regarded as invalid. Invalid data is entered into the
database as *UNKNOWN*.
- The main application of the ttttuuuunnnneeee function is to relax the
- validation rules on an RRRRRRRRDDDD. This allows to fill a new RRRRRRRRDDDD
+ The main application of the ttuunnee function is to relax the
+ validation rules on an RRRRDD. This allows to fill a new RRRRDD
with data available in larger intervals than what you
would normally want to permit.
_f_i_l_e_n_a_m_e
- The name of the RRRRRRRRDDDD you want to tune.
+ The name of the RRRRDD you want to tune.
- --------hhhheeeeaaaarrrrttttbbbbeeeeaaaatttt|----hhhh _d_s_-_n_a_m_e:_h_e_a_r_t_b_e_a_t
+ ----hheeaarrttbbeeaatt|--hh _d_s_-_n_a_m_e:_h_e_a_r_t_b_e_a_t
modify the _h_e_a_r_t_b_e_a_t of a data source. By setting
this to a high value the rrd will accept things
like one value per day ...
- --------mmmmiiiinnnniiiimmmmuuuummmm|----iiii _d_s_-_n_a_m_e:_m_i_n
+ ----mmiinniimmuumm|--ii _d_s_-_n_a_m_e:_m_i_n
alter the minimum value acceptable as input from
the data source. Setting _m_i_n to 'U' will disable
this limit.
- --------mmmmaaaaxxxxiiiimmmmuuuummmm|----aaaa _d_s_-_n_a_m_e:_m_a_x
+ ----mmaaxxiimmuumm|--aa _d_s_-_n_a_m_e:_m_a_x
alter the maximum value acceptable as input from
the data source. Setting _m_a_x to 'U' will disable
this limit.
- --------ddddaaaattttaaaa----ssssoooouuuurrrrcccceeee----ttttyyyyppppeeee|----dddd _d_s_-_n_a_m_e:_D_S_T
- alter the type DDDDSSSSTTTT of a data source.
+ ----ddaattaa--ssoouurrccee--ttyyppee|--dd _d_s_-_n_a_m_e:_D_S_T
+ alter the type DDSSTT of a data source.
- [--------ddddaaaattttaaaa----ssssoooouuuurrrrcccceeee----rrrreeeennnnaaaammmmeeee|----rrrr _o_l_d_-_n_a_m_e:_n_e_w_-_n_a_m_e]
+ [----ddaattaa--ssoouurrccee--rreennaammee|--rr _o_l_d_-_n_a_m_e:_n_e_w_-_n_a_m_e]
rename a data source
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE
+EEXXAAMMPPLLEE
"rrdtool tune data.rrd -h in:100000 -h out:100000 -h
through:100000"
@@ -59,9 +59,9 @@
data from mrtg-2.0 right into rrdtool without generating
*UNKNOWN* entries.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-02-26 1.0.40 RRDTUNE(1)
+1.0.41 2002-02-26 RRDTUNE(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdxport.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdxport.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdxport.txt 2003-02-20 15:24:00.000000000 -0800
@@ -2,24 +2,24 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool xport - Export data in XML format based on data
from one or several RRD
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll xxxxppppoooorrrrtttt [----ssss|--------ssssttttaaaarrrrtttt _s_e_c_o_n_d_s] [----eeee|--------eeeennnndddd _s_e_c_o_n_d_s]
- [----mmmm|--------mmmmaaaaxxxxrrrroooowwwwssss _r_o_w_s] [--------sssstttteeeepppp _v_a_l_u_e] [DDDDEEEEFFFF::::_v_n_a_m_e====_r_r_d::::_d_s_-
- _n_a_m_e::::_C_F] [CCCCDDDDEEEEFFFF::::_v_n_a_m_e====_r_p_n_-_e_x_p_r_e_s_s_i_o_n] [XXXXPPPPOOOORRRRTTTT::::_v_n_a_m_e[::::_l_e_g_-
+SSYYNNOOPPSSIISS
+ rrrrddttooooll xxppoorrtt [--ss|----ssttaarrtt _s_e_c_o_n_d_s] [--ee|----eenndd _s_e_c_o_n_d_s]
+ [--mm|----mmaaxxrroowwss _r_o_w_s] [----sstteepp _v_a_l_u_e] [DDEEFF::_v_n_a_m_e==_r_r_d::_d_s_-
+ _n_a_m_e::_C_F] [CCDDEEFF::_v_n_a_m_e==_r_p_n_-_e_x_p_r_e_s_s_i_o_n] [XXPPOORRTT::_v_n_a_m_e[::_l_e_g_-
_e_n_d]]
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The xxxxppppoooorrrrtttt functions main purpose is to write XML formatted
- representation of the data stored in one or several RRRRRRRRDDDDs.
+DDEESSCCRRIIPPTTIIOONN
+ The xxppoorrtt functions main purpose is to write XML formatted
+ representation of the data stored in one or several RRRRDDs.
It can also extract numerical reports.
If no _X_P_O_R_T statements are found, there will be no output.
- ----ssss|--------ssssttttaaaarrrrtttt _s_e_c_o_n_d_s (default end-1day)
+ --ss|----ssttaarrtt _s_e_c_o_n_d_s (default end-1day)
The time when the exported range should begin. Time in
seconds since epoch (1970-01-01) is required. Negative
numbers are relative to the current time. By default
@@ -28,38 +28,38 @@
mentation for a detailed explanation on how to specify
time.
- ----eeee|--------eeeennnndddd _s_e_c_o_n_d_s (default now)
+ --ee|----eenndd _s_e_c_o_n_d_s (default now)
The time when the exported range should end. Time in
seconds since epoch. See also AT-STYLE TIME SPECIFI-
CATION section in the _r_r_d_f_e_t_c_h documentation for a
detailed explanation of ways to specify time.
- ----mmmm|--------mmmmaaaaxxxxrrrroooowwwwssss _r_o_w_s (default 400 rows)
- This works like the ----wwww|--------wwwwiiiiddddtttthhhh parameter of _r_r_d_g_r_a_p_h.
+ --mm|----mmaaxxrroowwss _r_o_w_s (default 400 rows)
+ This works like the --ww|----wwiiddtthh parameter of _r_r_d_g_r_a_p_h.
In fact it is exactly the same, but the parameter was
renamed to describe its purpose in this module. See
_r_r_d_g_r_a_p_h documentation for details.
- --------sssstttteeeepppp _v_a_l_u_e (default automatic)
+ ----sstteepp _v_a_l_u_e (default automatic)
See _r_r_d_g_r_a_p_h documentation.
- DDDDEEEEFFFF::::_v_n_a_m_e====_r_r_d::::_d_s_-_n_a_m_e::::_C_F
+ DDEEFF::_v_n_a_m_e==_r_r_d::_d_s_-_n_a_m_e::_C_F
See _r_r_d_g_r_a_p_h documentation.
- CCCCDDDDEEEEFFFF::::_v_n_a_m_e====_r_p_n_-_e_x_p_r_e_s_s_i_o_n
+ CCDDEEFF::_v_n_a_m_e==_r_p_n_-_e_x_p_r_e_s_s_i_o_n
See _r_r_d_g_r_a_p_h documentation.
- XXXXPPPPOOOORRRRTTTT::::_v_n_a_m_e::::::::_l_e_g_e_n_d
+ XXPPOORRTT::_v_n_a_m_e::::_l_e_g_e_n_d
At least one _X_P_O_R_T statement should be present. The
values referenced by _v_n_a_m_e are printed. Optionally add
a legend.
- OOOOuuuuttttppppuuuutttt ffffoooorrrrmmmmaaaatttt
+ OOuuttppuutt ffoorrmmaatt
- The output is enclosed in a xxxxppppoooorrrrtttt element and contains two
- blocks. The first block is enclosed by a mmmmeeeettttaaaa element and
+ The output is enclosed in a xxppoorrtt element and contains two
+ blocks. The first block is enclosed by a mmeettaa element and
contains some meta data. The second block is enclosed by a
- ddddaaaattttaaaa element and contains the data rows.
+ ddaattaa element and contains the data rows.
Let's assume that the _x_p_o_r_t command looks like this:
@@ -106,14 +106,12 @@
<row><t>1020615600</t><v>NaN</v><v>NaN</v></row>
</data>
-
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE 1111
+EEXXAAMMPPLLEE 11
rrdtool xport \
DEF:out=if1-inouts.rrd:outoctets:AVERAGE \
XPORT:out:"out bytes"
-
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE 2222
+EEXXAAMMPPLLEE 22
rrdtool xport \
DEF:out1=if1-inouts.rrd:outoctets:AVERAGE \
DEF:out2=if2-inouts.rrd:outoctets:AVERAGE \
@@ -122,10 +120,9 @@
XPORT:out2:"if2 out bytes" \
XPORT:sum:"output sum"
-
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-05-29 1.0.40 RRDXPORT(1)
+1.0.41 2002-05-29 RRDXPORT(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.pod
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtutorial.es.pod (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.es.pod 2003-02-20 15:24:00.000000000 -0800
@@ -7,7 +7,7 @@
=for html <div align="right"><a href="rrdtutorial.html">Enlish</a></div>
-=head1 DESCRIPTION / DESCRIPCIÓN
+=head1 DESCRIPTION
RRDtool es un programa escrito por Tobias Oetiker con la
colaboración de muchas personas en diversas partes del mundo. Alex van
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdfetch.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdfetch.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdfetch.html 2003-02-20 15:24:01.000000000 -0800
@@ -1,174 +1,192 @@
-<HTML>
-<HEAD>
-<TITLE>rrdfetch</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdfetch</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <UL>
-
- <LI><A HREF="#resolution interval">RESOLUTION INTERVAL</A></LI>
- <LI><A HREF="#atstyle time specification">AT-STYLE TIME SPECIFICATION</A></LI>
- <LI><A HREF="#time reference specification">TIME REFERENCE SPECIFICATION</A></LI>
- <LI><A HREF="#time offset specification">TIME OFFSET SPECIFICATION</A></LI>
- <LI><A HREF="#time specification examples">TIME SPECIFICATION EXAMPLES</A></LI>
- </UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <ul>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#resolution_interval">RESOLUTION INTERVAL</a></li>
+ <li><a href="#atstyle_time_specification">AT-STYLE TIME SPECIFICATION</a></li>
+ <li><a href="#time_reference_specification">TIME REFERENCE SPECIFICATION</a></li>
+ <li><a href="#time_offset_specification">TIME OFFSET SPECIFICATION</a></li>
+ <li><a href="#time_specification_examples">TIME SPECIFICATION EXAMPLES</a></li>
+ </ul>
+
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool fetch - fetch data from an rrd.</P>
-<div align="right"><a href="rrdfetch.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>fetch</STRONG> <EM>filename</EM> <EM>CF</EM>
-[<STRONG>--resolution</STRONG>|<STRONG>-r</STRONG> <EM>resolution</EM>]
-[<STRONG>--start</STRONG>|<STRONG>-s</STRONG> <EM>start</EM>]
-[<STRONG>--end</STRONG>|<STRONG>-e</STRONG> <EM>end</EM>]</P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>fetch</STRONG> function is normally used internally by the graph function,
-to get data from <STRONG>RRD</STRONG>s. <STRONG>fetch</STRONG> will analyze the <STRONG>RRD</STRONG> and
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool fetch - fetch data from an rrd.</p>
+<div align="right"><a href="rrdfetch.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>fetch</strong> <em>filename</em> <em>CF</em>
+[<strong>--resolution</strong>|<strong>-r</strong> <em>resolution</em>]
+[<strong>--start</strong>|<strong>-s</strong> <em>start</em>]
+[<strong>--end</strong>|<strong>-e</strong> <em>end</em>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>fetch</strong> function is normally used internally by the graph function,
+to get data from <strong>RRD</strong>s. <strong>fetch</strong> will analyze the <strong>RRD</strong> and
will try to retrieve the data in the resolution requested.
-The data fetched is printed to stdout. <EM>*UNKNOWN*</EM> data is often
+The data fetched is printed to stdout. <em>*UNKNOWN*</em> data is often
represented by the string ``NaN'' depending on your OSs printf
-function.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename"><EM>filename</EM></A></STRONG><BR>
-<DD>
-the name of the <STRONG>RRD</STRONG> you want to fetch the data from.
-<P></P>
-<DT><STRONG><A NAME="item_CF"><EM>CF</EM></A></STRONG><BR>
-<DD>
+function.</p>
+<dl>
+<dt><strong><a name="item_filename"><em>filename</em></a></strong><br />
+</dt>
+<dd>
+the name of the <strong>RRD</strong> you want to fetch the data from.
+</dd>
+<p></p>
+<dt><strong><a name="item_cf"><em>CF</em></a></strong><br />
+</dt>
+<dd>
which consolidation function should have been applied to the data you
want to fetch? (AVERAGE,MIN,MAX,LAST)
-<P></P>
-<DT><STRONG><A NAME="item_resolution"><STRONG>--resolution</STRONG>|<STRONG>-r</STRONG> <EM>resolution</EM> (default is the highest resolution)</A></STRONG><BR>
-<DD>
-what interval should the values have (seconds per value). <STRONG>rrdfetch</STRONG> will try
+</dd>
+<p></p>
+<dt><strong><a name="item_resolution"><strong>--resolution</strong>|<strong>-r</strong> <em>resolution</em> (default is the highest resolution)</a></strong><br />
+</dt>
+<dd>
+what interval should the values have (seconds per value). <strong>rrdfetch</strong> will try
to match your request, but it will return data even if no absolute
-match is possible. <STRONG>NB.</STRONG> See note below.
-<P></P>
-<DT><STRONG><A NAME="item_start"><STRONG>--start</STRONG>|<STRONG>-s</STRONG> <EM>start</EM> (default end-1day)</A></STRONG><BR>
-<DD>
+match is possible. <strong>NB.</strong> See note below.
+</dd>
+<p></p>
+<dt><strong><a name="item_start"><strong>--start</strong>|<strong>-s</strong> <em>start</em> (default end-1day)</a></strong><br />
+</dt>
+<dd>
when should the data begin. A time in seconds since epoch (1970-01-01)
is required. Negative numbers are relative to the current time. By default
one day worth of data will be fetched. See also AT-STYLE TIME SPECIFICATION
section for a detailed explanation on ways to specify start time.
-<P></P>
-<DT><STRONG><A NAME="item_end"><STRONG>--end</STRONG>|<STRONG>-e</STRONG> <EM>end</EM> (default now)</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_end"><strong>--end</strong>|<strong>-e</strong> <em>end</em> (default now)</a></strong><br />
+</dt>
+<dd>
when should the data end. Time in seconds since epoch. See also
AT-STYLE TIME SPECIFICATION section for a detailed explanation of how to specify
end time.
-<P></P></DL>
-<P>
-<H2><A NAME="resolution interval">RESOLUTION INTERVAL</A></H2>
-<P>In order to get rrdtool to fetch anything other than the finest resolution RRA
-<STRONG>both</STRONG> the start and end time must be specified on boundaries that are
-multiples of the wanted resolution. Consider the following example:</P>
-<PRE>
+</dd>
+<p></p></dl>
+<p>
+</p>
+<h2><a name="resolution_interval">RESOLUTION INTERVAL</a></h2>
+<p>In order to get rrdtool to fetch anything other than the finest resolution RRA
+<strong>both</strong> the start and end time must be specified on boundaries that are
+multiples of the wanted resolution. Consider the following example:</p>
+<pre>
rrdtool create subdata.rrd -s 10 DS:ds0:GAUGE:300:0:U \
RRA:AVERAGE:0.5:30:3600 \
RRA:AVERAGE:0.5:90:1200 \
RRA:AVERAGE:0.5:360:1200 \
RRA:MAX:0.5:360:1200 \
RRA:AVERAGE:0.5:8640:600 \
- RRA:MAX:0.5:8640:600</PRE>
-<P>This RRD collects data every 10 seconds and stores its averages over 5 minutes,
-15 minutes, 1 hour and 1 day as well as the maxima for 1 hour and 1 day.</P>
-<P>Consider now that you want too fetch the 15 minute average data for last hour.
-So you might try</P>
-<PRE>
- rrdtool fetch subdata.rrd AVERAGE -r 900 -s -1h</PRE>
-<P>However, this will almost always result in a time series that is <STRONG>NOT</STRONG> in the 15
+ RRA:MAX:0.5:8640:600</pre>
+<p>This RRD collects data every 10 seconds and stores its averages over 5 minutes,
+15 minutes, 1 hour and 1 day as well as the maxima for 1 hour and 1 day.</p>
+<p>Consider now that you want too fetch the 15 minute average data for last hour.
+So you might try</p>
+<pre>
+ rrdtool fetch subdata.rrd AVERAGE -r 900 -s -1h</pre>
+<p>However, this will almost always result in a time series that is <strong>NOT</strong> in the 15
minute RRA. Therefore the highest resolution RRA, i.e. 5 minute averages, will
-be chosen which, in this case, is not what you want.</P>
-<P>Hence, make sure that</P>
-<OL>
-<LI>
+be chosen which, in this case, is not what you want.</p>
+<p>Hence, make sure that</p>
+<ol>
+<li></li>
both start and end time are a multiple of 900
-<P></P>
-<LI>
+<p></p>
+<li></li>
both start and end time are within the wanted RRA
-<P></P></OL>
-<P>So, if time now is called ``t'',</P>
-<PRE>
+<p></p></ol>
+<p>So, if time now is called ``t'',</p>
+<pre>
do end time == int(t/900)*900,
- start time == end time -1hour, resolution == 900.</PRE>
-<P>In e.g. bash this could look as:</P>
-<PRE>
+ start time == end time -1hour, resolution == 900.</pre>
+<p>In e.g. bash this could look as:</p>
+<pre>
TIME=$(date +%s); RRDRES=900; rrdtool fetch subdata.rrd AVERAGE -r $RRDRES \
- -e $(echo $(($TIME/$RRDRES*$RRDRES))) -s e-1h</PRE>
-<P>Or in perl:</P>
-<PRE>
+ -e $(echo $(($TIME/$RRDRES*$RRDRES))) -s e-1h</pre>
+<p>Or in perl:</p>
+<pre>
perl -e '$ctime = time; $rrdres = 900; system "rrdtool fetch subdata.rrd AVERAGE \
- -r $rrdres -e @{[int($ctime/$rrdres)*$rrdres]} -s e-1h"'</PRE>
-<P>
-<H2><A NAME="atstyle time specification">AT-STYLE TIME SPECIFICATION</A></H2>
-<P>Apart from the traditional <EM>Seconds since epoch</EM>, rrdtool does also
+ -r $rrdres -e @{[int($ctime/$rrdres)*$rrdres]} -s e-1h"'</pre>
+<p>
+</p>
+<h2><a name="atstyle_time_specification">AT-STYLE TIME SPECIFICATION</a></h2>
+<p>Apart from the traditional <em>Seconds since epoch</em>, rrdtool does also
understand at-style time specification. The specification is called
-``at-style'' after Unix command <CODE>at(1)</CODE> that has moderately complex ways
+``at-style'' after Unix command <code>at(1)</code> that has moderately complex ways
to specify time to run your job at. The at-style specification
-consists of two parts: <STRONG>TIME REFERENCE</STRONG> specification and <STRONG>TIME
-OFFSET</STRONG> specification.</P>
-<P>
-<H2><A NAME="time reference specification">TIME REFERENCE SPECIFICATION</A></H2>
-<P>Time reference specification is used, well,... to establish a reference
+consists of two parts: <strong>TIME REFERENCE</strong> specification and <strong>TIME
+OFFSET</strong> specification.</p>
+<p>
+</p>
+<h2><a name="time_reference_specification">TIME REFERENCE SPECIFICATION</a></h2>
+<p>Time reference specification is used, well,... to establish a reference
moment in time (for time offset to be applied to). When present,
-it should come first, when omitted, it defaults to <STRONG>now</STRONG>. On its own part,
-time reference consists of <EM>time-of-day</EM> reference (which should come
-first, if present) and <EM>day</EM> reference.</P>
-<P><EM>Time-of-day</EM> can be specified as <STRONG>HH:MM</STRONG>, <STRONG>HH.MM</STRONG>,
-or just <STRONG>HH</STRONG>, you can suffix it with <STRONG>am</STRONG> or <STRONG>pm</STRONG> or use
+it should come first, when omitted, it defaults to <strong>now</strong>. On its own part,
+time reference consists of <em>time-of-day</em> reference (which should come
+first, if present) and <em>day</em> reference.</p>
+<p><em>Time-of-day</em> can be specified as <strong>HH:MM</strong>, <strong>HH.MM</strong>,
+or just <strong>HH</strong>, you can suffix it with <strong>am</strong> or <strong>pm</strong> or use
24-hours clock. The few special times of day are understood as well,
-these include <STRONG>midnight</STRONG> (00:00), <STRONG>noon</STRONG> (12:00) and British
-<STRONG>teatime</STRONG> (16:00).</P>
-<P>The <EM>day</EM> can be specified as <EM>month-name</EM> <EM>day-of-the-month</EM>
-and optional 2- or 4-digit <EM>year</EM> number (e.g. March 8 1999).
-Alternatively, you can use <EM>day-of-week-name</EM> (e.g. Monday),
-or one of the words: <STRONG>yesterday</STRONG>, <STRONG>today</STRONG>, <STRONG>tomorrow</STRONG>.
-You can also specify <EM>day</EM> as a full date in several numerical formats;
-these include: <STRONG>MM/DD/[YY]YY</STRONG>, <STRONG>DD.MM.[YY]YY</STRONG>, <STRONG>YYYYMMDD</STRONG>.</P>
-<P><EM>NOTE1</EM>: this is different from the original <CODE>at(1)</CODE> behavior,
-which interprets a single-number date as MMDD[YY]YY.</P>
-<P><EM>NOTE2</EM>: if you specify <EM>day</EM> this way, the <EM>time-of-day</EM> is REQUIRED
-to be present.</P>
-<P>Finally, you can use words <STRONG>now</STRONG>, <STRONG>start</STRONG>, or <STRONG>end</STRONG> as your time
-reference. <STRONG>Now</STRONG> refers to the current moment (and is also a default
-time reference). <STRONG>Start</STRONG> (<STRONG>end</STRONG>) can be used to specify time
+these include <strong>midnight</strong> (00:00), <strong>noon</strong> (12:00) and British
+<strong>teatime</strong> (16:00).</p>
+<p>The <em>day</em> can be specified as <em>month-name</em> <em>day-of-the-month</em>
+and optional 2- or 4-digit <em>year</em> number (e.g. March 8 1999).
+Alternatively, you can use <em>day-of-week-name</em> (e.g. Monday),
+or one of the words: <strong>yesterday</strong>, <strong>today</strong>, <strong>tomorrow</strong>.
+You can also specify <em>day</em> as a full date in several numerical formats;
+these include: <strong>MM/DD/[YY]YY</strong>, <strong>DD.MM.[YY]YY</strong>, <strong>YYYYMMDD</strong>.</p>
+<p><em>NOTE1</em>: this is different from the original <code>at(1)</code> behavior,
+which interprets a single-number date as MMDD[YY]YY.</p>
+<p><em>NOTE2</em>: if you specify <em>day</em> this way, the <em>time-of-day</em> is REQUIRED
+to be present.</p>
+<p>Finally, you can use words <strong>now</strong>, <strong>start</strong>, or <strong>end</strong> as your time
+reference. <strong>Now</strong> refers to the current moment (and is also a default
+time reference). <strong>Start</strong> (<strong>end</strong>) can be used to specify time
relative to the start (end) time for those tools that use these
-categories (rrdfetch, rrdgraph).</P>
-<P>Month and weekday names can be used in their naturally abbreviated form
-(e.g., Dec for December, Sun for Sunday, etc.). The words <STRONG>now</STRONG>,
-<STRONG>start</STRONG>, <STRONG>end</STRONG> can be abbreviated to <STRONG>n</STRONG>, <STRONG>s</STRONG>, <STRONG>e</STRONG>.</P>
-<P>
-<H2><A NAME="time offset specification">TIME OFFSET SPECIFICATION</A></H2>
-<P>Time offset specification is used to add (or subtract) certain time
-interval to (from) the time reference moment. It consists of <EM>sign</EM>
-(<STRONG>+</STRONG> or <STRONG>-</STRONG>) and <EM>amount</EM>. The following time units can be used
-to specify the <EM>amount</EM>: <STRONG>years</STRONG>, <STRONG>months</STRONG>, <STRONG>weeks</STRONG>, <STRONG>days</STRONG>,
-<STRONG>hours</STRONG>, <STRONG>minutes</STRONG>, <STRONG>seconds</STRONG>, these can be used in singular
+categories (rrdfetch, rrdgraph).</p>
+<p>Month and weekday names can be used in their naturally abbreviated form
+(e.g., Dec for December, Sun for Sunday, etc.). The words <strong>now</strong>,
+<strong>start</strong>, <strong>end</strong> can be abbreviated to <strong>n</strong>, <strong>s</strong>, <strong>e</strong>.</p>
+<p>
+</p>
+<h2><a name="time_offset_specification">TIME OFFSET SPECIFICATION</a></h2>
+<p>Time offset specification is used to add (or subtract) certain time
+interval to (from) the time reference moment. It consists of <em>sign</em>
+(<strong>+</strong> or <strong>-</strong>) and <em>amount</em>. The following time units can be used
+to specify the <em>amount</em>: <strong>years</strong>, <strong>months</strong>, <strong>weeks</strong>, <strong>days</strong>,
+<strong>hours</strong>, <strong>minutes</strong>, <strong>seconds</strong>, these can be used in singular
or plural form, and abbreviated naturally or to a single letter
(e.g. +3days, -1wk, -3y). Several time units can be combined
together (e.g., -5mon1w2d), as well as several time offsets can be
-concatenated (e.g., -5h45min = -5h-45min = -6h+15min = -7h+1h30m-15min, etc.)</P>
-<P><EM>NOTE3</EM>: If you specify time offset in days, weeks, months, or years,
+concatenated (e.g., -5h45min = -5h-45min = -6h+15min = -7h+1h30m-15min, etc.)</p>
+<p><em>NOTE3</em>: If you specify time offset in days, weeks, months, or years,
you will end with the time offset that may vary depending on you time
reference, because all those time units have no single well defined
time interval value (1 year contains either 365 or 366 days, 1 month
@@ -177,10 +195,10 @@
To cope with this, when you use days, weeks, months, or years
as your time offset units your time reference date is adjusted
accordingly without taking too much further effort to ensure anything
-about it (in the hope that <CODE>mktime(3)</CODE> will take care of this later).
+about it (in the hope that <code>mktime(3)</code> will take care of this later).
This may lead to some surprising (or even invalid!) results,
e.g. 'May 31 -1month' = 'Apr 31' (meaningless) = 'May 1'
-(after <CODE>mktime(3)</CODE> normalization); in the EET timezone
+(after <code>mktime(3)</code> normalization); in the EET timezone
'3:30am Mar 29 1999 -1 day' yields '3:30am Mar 28 1999' (Sunday)
which is invalid time/date combination (because of 3am -> 4am DST
forward clock adjustment, see the below example).
@@ -190,54 +208,56 @@
'8:00 Mar 29 1999', but since there is 1-hour DST forward clock adjustment
takes place around 3:00 Mar 28 1999, the actual time interval between
8:00 Mar 27 1999 and 8:00 Mar 29 1999 equals 47 hours; on the other hand,
-'8:00 Mar 27 1999 +48 hours' = '9:00 Mar 29 1999', as expected)</P>
-<P><EM>NOTE4</EM>: The single-letter abbreviation for both <STRONG>months</STRONG> and <STRONG>minutes</STRONG>
-is <STRONG>m</STRONG>. To disambiguate, the parser tries to read your mind :)
-by applying the following two heuristics:</P>
-<OL>
-<LI>
-If <STRONG>m</STRONG> is used in context of (i.e. right after the) years,
-months, weeks, or days it is assumed to mean <STRONG>months</STRONG>, while
+'8:00 Mar 27 1999 +48 hours' = '9:00 Mar 29 1999', as expected)</p>
+<p><em>NOTE4</em>: The single-letter abbreviation for both <strong>months</strong> and <strong>minutes</strong>
+is <strong>m</strong>. To disambiguate, the parser tries to read your mind :)
+by applying the following two heuristics:</p>
+<ol>
+<li></li>
+If <strong>m</strong> is used in context of (i.e. right after the) years,
+months, weeks, or days it is assumed to mean <strong>months</strong>, while
in the context of hours, minutes, and seconds it means minutes.
-(e.g., in -1y6m or +3w1m <STRONG>m</STRONG> means <STRONG>months</STRONG>, while in
--3h20m or +5s2m <STRONG>m</STRONG> means <STRONG>minutes</STRONG>)
-<P></P>
-<LI>
-Out of context (i.e. right after the <STRONG>+</STRONG> or <STRONG>-</STRONG> sign) the
-meaning of <STRONG>m</STRONG> is guessed from the number it directly follows.
+(e.g., in -1y6m or +3w1m <strong>m</strong> means <strong>months</strong>, while in
+-3h20m or +5s2m <strong>m</strong> means <strong>minutes</strong>)
+<p></p>
+<li></li>
+Out of context (i.e. right after the <strong>+</strong> or <strong>-</strong> sign) the
+meaning of <strong>m</strong> is guessed from the number it directly follows.
Currently, if the number absolute value is below 25 it is assumed
-that <STRONG>m</STRONG> means <STRONG>months</STRONG>, otherwise it is treated as <STRONG>minutes</STRONG>.
+that <strong>m</strong> means <strong>months</strong>, otherwise it is treated as <strong>minutes</strong>.
(e.g., -25m == -25 minutes, while +24m == +24 months)
-<P></P></OL>
-<P><EM>Final NOTES</EM>: Time specification is case-insensitive.
+<p></p></ol>
+<p><em>Final NOTES</em>: Time specification is case-insensitive.
Whitespace can be inserted freely or omitted altogether,
there are, however, cases when whitespace is required
(e.g., 'midnight Thu'). In this case you should either quote the
whole phrase to prevent it from being taken apart by your shell or use
'_' (underscore) or ',' (comma) which also count as whitespace
-(e.g., midnight_Thu or midnight,Thu)</P>
-<P>
-<H2><A NAME="time specification examples">TIME SPECIFICATION EXAMPLES</A></H2>
-<P><EM>Oct 12</EM> -- October 12 this year</P>
-<P><EM>-1month</EM> or <EM>-1m</EM> -- current time of day, only a month before
-(may yield surprises, see the NOTE3 above)</P>
-<P><EM>noon yesterday -3hours</EM> -- yesterday morning; can be put also as <EM>9am-1day</EM></P>
-<P><EM>23:59 31.12.1999</EM> -- 1 minute to the year 2000</P>
-<P><EM>12/31/99 11:59pm</EM> -- 1 minute to the year 2000 for imperialists</P>
-<P><EM>12am 01/01/01</EM> -- start of the new millennium</P>
-<P><EM>end-3weeks</EM> or <EM>e-3w</EM> -- 3 weeks before end time
-(may be used as start time specification)</P>
-<P><EM>start+6hours</EM> or <EM>s+6h</EM> -- 6 hours after start time
-(may be used as end time specification)</P>
-<P><EM>931225537</EM> -- 18:45 July 5th, 1999
-(yes, seconds since 1970 are valid as well)</P>
-<P><EM>19970703 12:45</EM> -- 12:45 July 3th, 1997
-(not quote standard, but I love this ...)</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+(e.g., midnight_Thu or midnight,Thu)</p>
+<p>
+</p>
+<h2><a name="time_specification_examples">TIME SPECIFICATION EXAMPLES</a></h2>
+<p><em>Oct 12</em> -- October 12 this year</p>
+<p><em>-1month</em> or <em>-1m</em> -- current time of day, only a month before
+(may yield surprises, see the NOTE3 above)</p>
+<p><em>noon yesterday -3hours</em> -- yesterday morning; can be put also as <em>9am-1day</em></p>
+<p><em>23:59 31.12.1999</em> -- 1 minute to the year 2000</p>
+<p><em>12/31/99 11:59pm</em> -- 1 minute to the year 2000 for imperialists</p>
+<p><em>12am 01/01/01</em> -- start of the new millennium</p>
+<p><em>end-3weeks</em> or <em>e-3w</em> -- 3 weeks before end time
+(may be used as start time specification)</p>
+<p><em>start+6hours</em> or <em>s+6h</em> -- 6 hours after start time
+(may be used as end time specification)</p>
+<p><em>931225537</em> -- 18:45 July 5th, 1999
+(yes, seconds since 1970 are valid as well)</p>
+<p><em>19970703 12:45</em> -- 12:45 July 3th, 1997
+(not quote standard, but I love this ...)</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/bin_dec_hex.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/bin_dec_hex.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/bin_dec_hex.txt 2003-02-20 15:24:01.000000000 -0800
@@ -2,10 +2,10 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
Binary Decimal Hexadecimal - How does it work
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
+DDEESSCCRRIIPPTTIIOONN
Most people use the decimal numbering system. This system
uses ten symbols to represent numbers. When those ten sym-
bols are used up, they start all over again and increment
@@ -74,7 +74,7 @@
the decimal system. If we are talking about another num-
bering system, we'll have to make that clear. There are a
few wide-spread methods to do so. One common form is to
- write _1_0_1_0(2) which means that you wrote down a number in
+ write 1010(2) which means that you wrote down a number in
the binary form. It is the number ten. If you would write
1010 it means the number one thousand and ten.
@@ -94,7 +94,7 @@
We can use the binary form when talking to computers
(...programming...) but the numbers will have large rep-
resentations. The number 65535 would be written down as
- _1_1_1_1_1_1_1_1_1_1_1_1_1_1_1_1(2) which is 16 times the digit 1. This
+ 1111111111111111(2) which is 16 times the digit 1. This
is difficult and prone to errors. Therefore we normally
would use another base, called hexadecimal. It uses 16
different symbols. First the symbols from the decimal sys-
@@ -400,7 +400,7 @@
view->scientific. You now have a scientific calculator and
can compute in binary or hexadecimal.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
I hope you enjoyed the examples and their descriptions. If
you do, help other people by pointing them to this docu-
ment when they are asking basic questions. They will not
@@ -411,4 +411,4 @@
-2002-02-26 1.0.40 BIN_DEC_HEX(1)
+1.0.41 2002-02-26 BIN_DEC_HEX(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdinfo.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdinfo.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdinfo.html 2003-02-20 15:24:01.000000000 -0800
@@ -1,50 +1,55 @@
-<HTML>
-<HEAD>
-<TITLE>rrdinfo</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdinfo</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#example">EXAMPLE</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#example">EXAMPLE</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool info - extract header information from an rrd</P>
-<div align="right"><a href="rrdinfo.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>info</STRONG> <EM>filename.rrd</EM></P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>info</STRONG> function prints the header information from an rrd in
-a parsing friendly format.</P>
-<P>Check <A HREF="././rrdcreate.html">the rrdcreate manpage</A> if you are uncertain about the meaning of the
-individual keys.</P>
-<P>
-<HR>
-<H1><A NAME="example">EXAMPLE</A></H1>
-<P>This is the output generated by running <STRONG>info</STRONG> on a simple rrd which
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool info - extract header information from an rrd</p>
+<div align="right"><a href="rrdinfo.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>info</strong> <em>filename.rrd</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>info</strong> function prints the header information from an rrd in
+a parsing friendly format.</p>
+<p>Check <a href="././rrdcreate.html">the rrdcreate manpage</a> if you are uncertain about the meaning of the
+individual keys.</p>
+<p>
+</p>
+<hr />
+<h1><a name="example">EXAMPLE</a></h1>
+<p>This is the output generated by running <strong>info</strong> on a simple rrd which
contains two datasources and one rra. Note that the number after the
-<EM>last_update</EM> keyword is in seconds since 1970. The string <STRONG>NaN</STRONG>
-stands for <EM>*UNKNOWN*</EM> data. In the example it means that this rrd
+<em>last_update</em> keyword is in seconds since 1970. The string <strong>NaN</strong>
+stands for <em>*UNKNOWN*</em> data. In the example it means that this rrd
has neither minimum not maximum values defined for either of its
-datasources.</P>
-<PRE>
+datasources.</p>
+<pre>
filename = "randome.rrd"
rrd_version = "0001"
step = 300
@@ -68,17 +73,20 @@
rra[0].cdp_prep[0].value = nan
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[0].cdp_prep[1].value = nan
- rra[0].cdp_prep[1].unknown_datapoints = 0</PRE>
-<DL>
-<DT><STRONG><A NAME="item_filename%2Errd"><EM>filename.rrd</EM></A></STRONG><BR>
-<DD>
-The name of the <STRONG>RRD</STRONG> you want to dump.
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+ rra[0].cdp_prep[1].unknown_datapoints = 0</pre>
+<dl>
+<dt><strong><a name="item_filename%2errd"><em>filename.rrd</em></a></strong><br />
+</dt>
+<dd>
+The name of the <strong>RRD</strong> you want to dump.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/RRDp.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/RRDp.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/RRDp.html 2003-02-20 15:24:01.000000000 -0800
@@ -1,90 +1,109 @@
-<HTML>
-<HEAD>
-<TITLE>RRDp</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>RRDp</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#example">EXAMPLE</A></LI>
- <LI><A HREF="#see also">SEE ALSO</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#example">EXAMPLE</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>RRDp - Attach rrdtool from within a perl script via a set of pipes;</P>
-<P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P>use <STRONG>RRDp</STRONG></P>
-<P><STRONG>RRDp::start</STRONG> <EM>path to rrdtool executable</EM></P>
-<P><STRONG>RRDp::cmd</STRONG> <EM>rrdtool commandline</EM></P>
-<P>$answer = <STRONG>RRD::read</STRONG></P>
-<P>$status = <STRONG>RRD::end</STRONG></P>
-<P><STRONG>$RRDp::user</STRONG>, <STRONG>$RRDp::sys</STRONG>, <STRONG>$RRDp::real</STRONG></P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>With this module you can safely communicate with the rrdtool.</P>
-<P>After every <STRONG>RRDp::cmd</STRONG> you have to issue an <STRONG>RRDp::read</STRONG> command to get
-<STRONG>rrdtool</STRONG>s answer to your command. The answer is returned as a pointer,
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>RRDp - Attach rrdtool from within a perl script via a set of pipes;</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>use <strong>RRDp</strong></p>
+<p><strong>RRDp::start</strong> <em>path to rrdtool executable</em></p>
+<p><strong>RRDp::cmd</strong> <em>rrdtool commandline</em></p>
+<p>$answer = <strong>RRD::read</strong></p>
+<p>$status = <strong>RRD::end</strong></p>
+<p><strong>$RRDp::user</strong>, <strong>$RRDp::sys</strong>, <strong>$RRDp::real</strong></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>With this module you can safely communicate with the rrdtool.</p>
+<p>After every <strong>RRDp::cmd</strong> you have to issue an <strong>RRDp::read</strong> command to get
+<strong>rrdtool</strong>s answer to your command. The answer is returned as a pointer,
in order to speed things up. If the last command did not return any
-data, <STRONG>RRDp::read</STRONG> will return an undefined variable.</P>
-<P>If you import the PERFORMANCE variables into your namespace,
-you can access rrdtools internal performance measurements.</P>
-<DL>
-<DT><STRONG><A NAME="item_use_RRDp">use <STRONG>RRDp</STRONG></A></STRONG><BR>
-<DD>
+data, <strong>RRDp::read</strong> will return an undefined variable.</p>
+<p>If you import the PERFORMANCE variables into your namespace,
+you can access rrdtools internal performance measurements.</p>
+<dl>
+<dt><strong><a name="item_use_rrdp">use <strong>RRDp</strong></a></strong><br />
+</dt>
+<dd>
Load the RRDp::pipe module.
-<P></P>
-<DT><STRONG><A NAME="item_RRDp%3A%3Astart_path_to_rrdtool_executable"><STRONG>RRDp::start</STRONG> <EM>path to rrdtool executable</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrdp%3a%3astart_path_to_rrdtool_executable"><strong>RRDp::start</strong> <em>path to rrdtool executable</em></a></strong><br />
+</dt>
+<dd>
start rrdtool. The argument must be the path to the rrdtool executable
-<P></P>
-<DT><STRONG><A NAME="item_RRDp%3A%3Acmd_rrdtool_commandline"><STRONG>RRDp::cmd</STRONG> <EM>rrdtool commandline</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrdp%3a%3acmd_rrdtool_commandline"><strong>RRDp::cmd</strong> <em>rrdtool commandline</em></a></strong><br />
+</dt>
+<dd>
pass commands on to rrdtool. check the rrdtool documentation for
more info on the rrdtool commands.
-<P></P>
-<DT><STRONG><A NAME="item_%24answer_%3D_RRDp%3A%3Aread">$answer = <STRONG>RRDp::read</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%24answer_%3d_rrdp%3a%3aread">$answer = <strong>RRDp::read</strong></a></strong><br />
+</dt>
+<dd>
read rrdtools response to your command. Note that the $answer variable will
only contain a pointer to the returned data. The reason for this is, that
rrdtool can potentially return quite excessive amounts of data
and we don't want to copy this around in memory. So when you want to
access the contents of $answer you have to use $$answer which dereferences
the variable.
-<P></P>
-<DT><STRONG><A NAME="item_%24status_%3D_RRDp%3A%3Aend">$status = <STRONG>RRDp::end</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%24status_%3d_rrdp%3a%3aend">$status = <strong>RRDp::end</strong></a></strong><br />
+</dt>
+<dd>
terminates rrdtool and returns rrdtools status ...
-<P></P>
-<DT><STRONG><A NAME="item_%24RRDp%3A%3Auser%2C_%24RRDp%3A%3Asys%2C_%24RRDp%3"><STRONG>$RRDp::user</STRONG>, <STRONG>$RRDp::sys</STRONG>, <STRONG>$RRDp::real</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%24rrdp%3a%3auser%2c_%24rrdp%3a%3asys%2c_%24rrdp%3"><strong>$RRDp::user</strong>, <strong>$RRDp::sys</strong>, <strong>$RRDp::real</strong></a></strong><br />
+</dt>
+<dd>
these variables will contain totals of the user time, system time and
real time as seen by rrdtool. User time is the time rrdtool is
running, System time is the time spend in system calls and real time
is the total time rrdtool has been running.
-<P>The difference between user + system and real is the time spent
+</dd>
+<dd>
+<p>The difference between user + system and real is the time spent
waiting for things like the hard disk and new input from the perl
-script.</P>
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="example">EXAMPLE</A></H1>
-<PRE>
+script.</p>
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="example">EXAMPLE</a></h1>
+<pre>
use RRDp;
RRDp::start "/usr/local/bin/rrdtool";
RRDp::cmd qw(create demo.rrd --step 100
@@ -92,16 +111,18 @@
RRA:AVERAGE:0.5:1:10);
$answer = RRDp::read;
print $$answer;
- ($usertime,$systemtime,$realtime) = ($RRDp::user,$RRDp::sys,$RRDp::real);</PRE>
-<P>
-<HR>
-<H1><A NAME="see also">SEE ALSO</A></H1>
-<P>For more information on how to use rrdtool, check the manpages.</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+ ($usertime,$systemtime,$realtime) = ($RRDp::user,$RRDp::sys,$RRDp::real);</pre>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>For more information on how to use rrdtool, check the manpages.</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdgraph.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.html 2003-02-20 15:24:01.000000000 -0800
@@ -1,167 +1,219 @@
-<HTML>
-<HEAD>
-<TITLE>rrdgraph</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdgraph</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#notes on legend arguments">NOTES on legend arguments</A></LI>
- <UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#notes_on_legend_arguments">NOTES on legend arguments</a></li>
+ <ul>
- <LI><A HREF="#escaping the colon">Escaping the colon</A></LI>
- <LI><A HREF="#string formatting">String Formatting</A></LI>
- </UL>
+ <li><a href="#escaping_the_colon">Escaping the colon</a></li>
+ <li><a href="#string_formatting">String Formatting</a></li>
+ </ul>
- <LI><A HREF="#note on return values">NOTE on Return Values</A></LI>
- <LI><A HREF="#example 1">EXAMPLE 1</A></LI>
- <LI><A HREF="#example 2">EXAMPLE 2</A></LI>
- <LI><A HREF="#example 3">EXAMPLE 3</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
- <LI><A HREF="#references">REFERENCES</A></LI>
-</UL>
+ <li><a href="#note_on_return_values">NOTE on Return Values</a></li>
+ <li><a href="#example_1">EXAMPLE 1</a></li>
+ <li><a href="#example_2">EXAMPLE 2</a></li>
+ <li><a href="#example_3">EXAMPLE 3</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+ <li><a href="#references">REFERENCES</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool graph - Create a graph based on data from one or several RRD</P>
-<div align="right"><a href="rrdgraph.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>graph</STRONG> <EM>filename</EM>
-[<STRONG>-s</STRONG>|<STRONG>--start</STRONG> <EM>seconds</EM>]
-[<STRONG>-e</STRONG>|<STRONG>--end</STRONG> <EM>seconds</EM>]
-[<STRONG>-x</STRONG>|<STRONG>--x-grid</STRONG> <EM>x-axis grid and label</EM>]
-[<STRONG>-y</STRONG>|<STRONG>--y-grid</STRONG> <EM>y-axis grid and label</EM>]
-[<STRONG>--alt-y-grid</STRONG>]
-[<STRONG>--alt-y-mrtg</STRONG>]
-[<STRONG>--alt-autoscale</STRONG>]
-[<STRONG>--alt-autoscale-max</STRONG>]
-[<STRONG>--units-exponent</STRONG>] <EM>value</EM>]>
-[<STRONG>-v</STRONG>|<STRONG>--vertical-label</STRONG> <EM>text</EM>]
-[<STRONG>-w</STRONG>|<STRONG>--width</STRONG> <EM>pixels</EM>]
-[<STRONG>-h</STRONG>|<STRONG>--height</STRONG> <EM>pixels</EM>]
-[<STRONG>-i</STRONG>|<STRONG>--interlaced</STRONG>]
-[<STRONG>-f</STRONG>|<STRONG>--imginfo</STRONG> <EM>formatstring</EM>]
-[<STRONG>-a</STRONG>|<STRONG>--imgformat</STRONG> <STRONG>GIF</STRONG>|<STRONG>PNG</STRONG>|<STRONG>GD</STRONG>]
-[<STRONG>-B</STRONG>|<STRONG>--background</STRONG> <EM>value</EM>]
-[<STRONG>-O</STRONG>|<STRONG>--overlay</STRONG> <EM>value</EM>]
-[<STRONG>-U</STRONG>|<STRONG>--unit</STRONG> <EM>value</EM>]
-[<STRONG>-z</STRONG>|<STRONG>--lazy</STRONG>]
-[<STRONG>-o</STRONG>|<STRONG>--logarithmic</STRONG>]
-[<STRONG>-u</STRONG>|<STRONG>--upper-limit</STRONG> <EM>value</EM>]
-[<STRONG>-l</STRONG>|<STRONG>--lower-limit</STRONG> <EM>value</EM>]
-[<STRONG>-g</STRONG>|<STRONG>--no-legend</STRONG>]
-[<STRONG>-r</STRONG>|<STRONG>--rigid</STRONG>]
-[<STRONG>--step</STRONG> <EM>value</EM>]
-[<STRONG>-b</STRONG>|<STRONG>--base</STRONG> <EM>value</EM>]
-[<STRONG>-c</STRONG>|<STRONG>--color</STRONG> <EM>COLORTAG</EM><STRONG>#</STRONG><EM>rrggbb</EM>]
-[<STRONG>-t</STRONG>|<STRONG>--title</STRONG> <EM>title</EM>]
-[<STRONG>DEF:</STRONG><EM>vname</EM><STRONG>=</STRONG><EM>rrd</EM><STRONG>:</STRONG><EM>ds-name</EM><STRONG>:</STRONG><EM>CF</EM>]
-[<STRONG>CDEF:</STRONG><EM>vname</EM><STRONG>=</STRONG><EM>rpn-expression</EM>]
-[<STRONG>PRINT:</STRONG><EM>vname</EM><STRONG>:</STRONG><EM>CF</EM><STRONG>:</STRONG><EM>format</EM>]
-[<STRONG>GPRINT:</STRONG><EM>vname</EM><STRONG>:</STRONG><EM>CF</EM><STRONG>:</STRONG><EM>format</EM>]
-[<STRONG>COMMENT:</STRONG><EM>text</EM>]
-[<STRONG>HRULE:</STRONG><EM>value</EM><STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]]
-[<STRONG>VRULE:</STRONG><EM>time</EM><STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]]
-[<STRONG>LINE</STRONG>{<STRONG>1</STRONG>|<STRONG>2</STRONG>|<STRONG>3</STRONG>}<STRONG>:</STRONG><EM>vname</EM>[<STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]]]
-[<STRONG>AREA:</STRONG><EM>vname</EM>[<STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]]]
-[<STRONG>STACK:</STRONG><EM>vname</EM>[<STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]]]</P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>graph</STRONG> functions main purpose is to create graphical
-representations of the data stored in one or several <STRONG>RRD</STRONG>s. Apart
-from generating graphs, it can also extract numerical reports.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename"><EM>filename</EM></A></STRONG><BR>
-<DD>
-The name of the graph to generate. Since <STRONG>rrdtool</STRONG> outputs
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool graph - Create a graph based on data from one or several RRD</p>
+<div align="right"><a href="rrdgraph.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>graph</strong> <em>filename</em>
+[<strong>-s</strong>|<strong>--start</strong> <em>seconds</em>]
+[<strong>-e</strong>|<strong>--end</strong> <em>seconds</em>]
+[<strong>-x</strong>|<strong>--x-grid</strong> <em>x-axis grid and label</em>]
+[<strong>-y</strong>|<strong>--y-grid</strong> <em>y-axis grid and label</em>]
+[<strong>-Y</strong>|<strong>--alt-y-grid</strong>]
+[<strong>-R</strong>|<strong>--alt-y-mrtg</strong>]
+[<strong>-A</strong>|<strong>--alt-autoscale</strong>]
+[<strong>-M</strong>|<strong>--alt-autoscale-max</strong>]
+[<strong>-N</strong>|<strong>--no-minor</strong>]
+[<strong>-X</strong>|<strong>--units-exponent</strong>] <em>value</em>]>
+[<strong>-v</strong>|<strong>--vertical-label</strong> <em>text</em>]
+[<strong>-w</strong>|<strong>--width</strong> <em>pixels</em>]
+[<strong>-h</strong>|<strong>--height</strong> <em>pixels</em>]
+[<strong>-i</strong>|<strong>--interlaced</strong>]
+[<strong>-f</strong>|<strong>--imginfo</strong> <em>formatstring</em>]
+[<strong>-a</strong>|<strong>--imgformat</strong> <strong>GIF</strong>|<strong>PNG</strong>|<strong>GD</strong>]
+[<strong>-B</strong>|<strong>--background</strong> <em>value</em>]
+[<strong>-O</strong>|<strong>--overlay</strong> <em>value</em>]
+[<strong>-U</strong>|<strong>--unit</strong> <em>value</em>]
+[<strong>-z</strong>|<strong>--lazy</strong>]
+[<strong>-o</strong>|<strong>--logarithmic</strong>]
+[<strong>-u</strong>|<strong>--upper-limit</strong> <em>value</em>]
+[<strong>-l</strong>|<strong>--lower-limit</strong> <em>value</em>]
+[<strong>-g</strong>|<strong>--no-legend</strong>]
+[<strong>-r</strong>|<strong>--rigid</strong>]
+[<strong>-S</strong>|<strong>--step</strong> <em>value</em>]
+[<strong>-b</strong>|<strong>--base</strong> <em>value</em>]
+[<strong>-c</strong>|<strong>--color</strong> <em>COLORTAG</em><strong>#</strong><em>rrggbb</em>]
+[<strong>-t</strong>|<strong>--title</strong> <em>title</em>]
+[<strong>DEF:</strong><em>vname</em><strong>=</strong><em>rrd</em><strong>:</strong><em>ds-name</em><strong>:</strong><em>CF</em>]
+[<strong>CDEF:</strong><em>vname</em><strong>=</strong><em>rpn-expression</em>]
+[<strong>PRINT:</strong><em>vname</em><strong>:</strong><em>CF</em><strong>:</strong><em>format</em>]
+[<strong>GPRINT:</strong><em>vname</em><strong>:</strong><em>CF</em><strong>:</strong><em>format</em>]
+[<strong>COMMENT:</strong><em>text</em>]
+[<strong>HRULE:</strong><em>value</em><strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]]
+[<strong>VRULE:</strong><em>time</em><strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]]
+[<strong>LINE</strong>{<strong>1</strong>|<strong>2</strong>|<strong>3</strong>}<strong>:</strong><em>vname</em>[<strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]]]
+[<strong>AREA:</strong><em>vname</em>[<strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]]]
+[<strong>STACK:</strong><em>vname</em>[<strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]]]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>graph</strong> functions main purpose is to create graphical
+representations of the data stored in one or several <strong>RRD</strong>s. Apart
+from generating graphs, it can also extract numerical reports.</p>
+<dl>
+<dt><strong><a name="item_filename"><em>filename</em></a></strong><br />
+</dt>
+<dd>
+The name of the graph to generate. Since <strong>rrdtool</strong> outputs
GIFs and PNGs, it's recommended that the filename end in either
-<EM>.gif</EM> or <EM>.png</EM>. <STRONG>rrdtool</STRONG> does not enforce this, however.
-If the <EM>filename</EM> is set to '-' the image file will be written
+<em>.gif</em> or <em>.png</em>. <strong>rrdtool</strong> does not enforce this, however.
+If the <em>filename</em> is set to '-' the image file will be written
to standard out. All other output will get suppressed.
-<P>PNG output is recommended, since it takes up to 40% less disk space
-and 20-30% less time to generate than a GIF file.</P>
-<P>If no graph functions are called, the graph will not be created.</P>
-<P></P>
-<DT><STRONG><A NAME="item_seconds"><STRONG>-s</STRONG>|<STRONG>--start</STRONG> <EM>seconds</EM> (default end-1day)</A></STRONG><BR>
-<DD>
+</dd>
+<dd>
+<p>PNG output is recommended, since it takes up to 40% less disk space
+and 20-30% less time to generate than a GIF file.</p>
+</dd>
+<dd>
+<p>If no graph functions are called, the graph will not be created.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_seconds"><strong>-s</strong>|<strong>--start</strong> <em>seconds</em> (default end-1day)</a></strong><br />
+</dt>
+<dd>
The time when the graph should begin. Time in seconds since
epoch (1970-01-01) is required. Negative numbers are relative to the
current time. By default one day worth of data will be graphed.
-See also AT-STYLE TIME SPECIFICATION section in the <EM>rrdfetch</EM>
+See also AT-STYLE TIME SPECIFICATION section in the <em>rrdfetch</em>
documentation for a detailed explanation on how to specify time.
-<P></P>
-<DT><STRONG><STRONG>-e</STRONG>|<STRONG>--end</STRONG> <EM>seconds</EM> (default now)</STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><strong>-e</strong>|<strong>--end</strong> <em>seconds</em> (default now)</strong><br />
+</dt>
+<dd>
The time when the graph should end. Time in seconds since epoch.
-See also AT-STYLE TIME SPECIFICATION section in the <EM>rrdfetch</EM>
+See also AT-STYLE TIME SPECIFICATION section in the <em>rrdfetch</em>
documentation for a detailed explanation of ways to specify time.
-<P></P>
-<DT><STRONG><A NAME="item_label"><STRONG>-x</STRONG>|<STRONG>--x-grid</STRONG> <EM>x-axis grid and label</EM> (default autoconfigure)</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_label"><strong>-x</strong>|<strong>--x-grid</strong> <em>x-axis grid and label</em> (default autoconfigure)</a></strong><br />
+</dt>
+<dd>
The x-axis label is quite complex to configure. So if you don't have
very special needs, you can rely on the autoconfiguration to get this
right.
-<P>If you want no x-grid at all, use the magic setting <STRONG>none</STRONG>.</P>
-<P>The x-axis label and grid can be configured, using the following format:</P>
-<P><EM>GTM</EM><STRONG>:</STRONG><EM>GST</EM><STRONG>:</STRONG><EM>MTM</EM><STRONG>:</STRONG><EM>MST</EM><STRONG>:</STRONG><EM>LTM</EM>:<EM>LST</EM><STRONG>:</STRONG><EM>LPR</EM><STRONG>:</STRONG><EM>LFM</EM></P>
-<P>You have to configure three elements making up the x-axis labels and
-grid. The base grid (<EM>G??</EM>), the major grid (<EM>M??</EM>) and the labels
-(<EM>L??</EM>). The configuration is based on the idea that you first
-specify a well known amount of time (<EM>?TM</EM>) and then say how many
-times it has to pass between each grid line or label (<EM>?ST</EM>). For the
+</dd>
+<dd>
+<p>If you want no x-grid at all, use the magic setting <strong>none</strong>.</p>
+</dd>
+<dd>
+<p>The x-axis label and grid can be configured, using the following format:</p>
+</dd>
+<dd>
+<p><em>GTM</em><strong>:</strong><em>GST</em><strong>:</strong><em>MTM</em><strong>:</strong><em>MST</em><strong>:</strong><em>LTM</em>:<em>LST</em><strong>:</strong><em>LPR</em><strong>:</strong><em>LFM</em></p>
+</dd>
+<dd>
+<p>You have to configure three elements making up the x-axis labels and
+grid. The base grid (<em>G??</em>), the major grid (<em>M??</em>) and the labels
+(<em>L??</em>). The configuration is based on the idea that you first
+specify a well known amount of time (<em>?TM</em>) and then say how many
+times it has to pass between each grid line or label (<em>?ST</em>). For the
label you have to define two additional items: The precision of the
-label in seconds (<EM>LPR</EM>) and the strftime format used to generate the
-text of the label (<EM>LFM</EM>).</P>
-<P>The <EM>?TM</EM> elements must be one of the following keywords: <STRONG>SECOND</STRONG>,
-<STRONG>MINUTE</STRONG>, <STRONG>HOUR</STRONG>, <STRONG>DAY</STRONG>, <STRONG>WEEK</STRONG>, <STRONG>MONTH</STRONG> or <STRONG>YEAR</STRONG>.</P>
-<P>If you wanted a graph with a base grid every 10 minutes and a major
+label in seconds (<em>LPR</em>) and the strftime format used to generate the
+text of the label (<em>LFM</em>).</p>
+</dd>
+<dd>
+<p>The <em>?TM</em> elements must be one of the following keywords: <strong>SECOND</strong>,
+<strong>MINUTE</strong>, <strong>HOUR</strong>, <strong>DAY</strong>, <strong>WEEK</strong>, <strong>MONTH</strong> or <strong>YEAR</strong>.</p>
+</dd>
+<dd>
+<p>If you wanted a graph with a base grid every 10 minutes and a major
one every hour, with labels every hour you would use the following
-x-axis definition.</P>
-<P><CODE>MINUTE:10:HOUR:1:HOUR:1:0:%X</CODE></P>
-<P>The precision in this example is 0 because the %X format is exact. If
+x-axis definition.</p>
+</dd>
+<dd>
+<p><code>MINUTE:10:HOUR:1:HOUR:1:0:%X</code></p>
+</dd>
+<dd>
+<p>The precision in this example is 0 because the %X format is exact. If
the label was the name of the day, we would have had a precision of 24
hours, because when you say something like 'Monday' you mean the whole
day and not Monday morning 00:00. Thus the label should be positioned
at noon. By defining a precision of 24 hours or rather 86400 seconds,
-you make sure that this happens.</P>
-<P>If you want to alter the genertated text to another language, use the
+you make sure that this happens.</p>
+</dd>
+<dd>
+<p>If you want to alter the genertated text to another language, use the
LC_TIME environment variable to set the locale you prefere prior to calling
-the graph function.</P>
-<P></P>
-<DT><STRONG><A NAME="item_factor"><STRONG>-y</STRONG>|<STRONG>--y-grid</STRONG> <EM>grid step</EM>:<EM>label factor</EM> (default autoconfigure)</A></STRONG><BR>
-<DD>
-Makes vertical grid lines appear at <EM>grid step</EM> interval. Every
-<EM>label factor</EM> gridstep, a major grid line is printed, along with
+the graph function.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_factor"><strong>-y</strong>|<strong>--y-grid</strong> <em>grid step</em>:<em>label factor</em> (default autoconfigure)</a></strong><br />
+</dt>
+<dd>
+Makes vertical grid lines appear at <em>grid step</em> interval. Every
+<em>label factor</em> gridstep, a major grid line is printed, along with
label showing the value of the grid line.
-<P>If you want no y-grid at all set specify the magic word <STRONG>none</STRONG>.</P>
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Dalt%2Dy%2Dgrid"><STRONG>--alt-y-grid</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<dd>
+<p>If you want no y-grid at all set specify the magic word <strong>none</strong>.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dy%7c%2d%2dalt%2dy%2dgrid"><strong>-Y</strong>|<strong>--alt-y-grid</strong></a></strong><br />
+</dt>
+<dd>
Place Y grid dynamically based on graph Y range. Algorithm ensures
that you always have grid, that there are enough but not too many
grid lines and the grid is metric. That is grid lines are placed
every 1, 2, 5 or 10 units. (contributed by Sasha Mikheev)
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Dalt%2Dy%2Dmrtg"><STRONG>--alt-y-mrtg</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2dno%2dminor"><strong>--no-minor</strong></a></strong><br />
+</dt>
+<dd>
+Turn off the minor grid lines. This is partcularly useful for small
+graphs which can be cluttered with the minor grid lines. (contributed
+by Travis Brown)
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dr%7c%2d%2dalt%2dy%2dmrtg"><strong>-R</strong>|<strong>--alt-y-mrtg</strong></a></strong><br />
+</dt>
+<dd>
Y grid placed on graph Y range mimmics mrtg's (rateup-generated) graphs.
Currently axis is split into 4 parts, just as rateup does.
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Dalt%2Dautoscale"><STRONG>--alt-autoscale</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2da%7c%2d%2dalt%2dautoscale"><strong>-A</strong>|<strong>--alt-autoscale</strong></a></strong><br />
+</dt>
+<dd>
Compute Y range based on function absolute minimum and
maximum values. Default algorithm uses predefined set of ranges.
This is good in many cases but it fails miserably when you need
@@ -170,17 +222,21 @@
almost straight line. With --alt-autoscale Y range will be
from slightly less the 260 - 0.001 to slightly more then 260 + 0.001
and periodic behavior will be seen. (contributed by Sasha Mikheev)
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Dalt%2Dautoscale%2Dmax"><STRONG>--alt-autoscale-max</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dm%7c%2d%2dalt%2dautoscale%2dmax"><strong>-M</strong>|<strong>--alt-autoscale-max</strong></a></strong><br />
+</dt>
+<dd>
Where --alt-autoscale will modify both the absolute maximum AND minimum
values, this option will only affect the maximum value. The minimum
value, if not defined on the command line, will be 0. This option can
be useful when graphing router traffic when the WAN line uses compression,
and thus the throughput may be higher than the WAN line speed.
-<P></P>
-<DT><STRONG><A NAME="item_value"><STRONG>--units-exponent</STRONG> <EM>value</EM> (default autoconfigure)</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_value"><strong>-X</strong>|<strong>--units-exponent</strong> <em>value</em> (default autoconfigure)</a></strong><br />
+</dt>
+<dd>
This sets the 10**exponent scaling of the y-axis values. Normally
values will be scaled to the appropriate units (k, M, etc.). However
you may wish to display units always in k (Kilo, 10e3) even if the data
@@ -190,135 +246,181 @@
display the y-axis values in k (Kilo, 10e3, thousands), use -6 to
display the y-axis values in u (Micro, 10e-6, millionths). Use a value
of 0 to prevent any scaling of the y-axis values.
-<P></P>
-<DT><STRONG><A NAME="item_%2Dv%7C%2D%2Dvertical%2Dlabel_text"><STRONG>-v</STRONG>|<STRONG>--vertical-label</STRONG> <EM>text</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dv%7c%2d%2dvertical%2dlabel_text"><strong>-v</strong>|<strong>--vertical-label</strong> <em>text</em></a></strong><br />
+</dt>
+<dd>
vertical label on the left side of the graph. This is normally used to
specify the units used.
-<P></P>
-<DT><STRONG><A NAME="item_pixels"><STRONG>-w</STRONG>|<STRONG>--width</STRONG> <EM>pixels</EM> (default 400 pixel)</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_pixels"><strong>-w</strong>|<strong>--width</strong> <em>pixels</em> (default 400 pixel)</a></strong><br />
+</dt>
+<dd>
Width of the drawing area within the graph. This affects the size of the
gif.
-<P></P>
-<DT><STRONG><STRONG>-h</STRONG>|<STRONG>--height</STRONG> <EM>pixels</EM> (default 100 pixel)</STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><strong>-h</strong>|<strong>--height</strong> <em>pixels</em> (default 100 pixel)</strong><br />
+</dt>
+<dd>
Width of the drawing area within the graph. This affects the size of the
gif.
-<P></P>
-<DT><STRONG><A NAME="item_interlaced"><STRONG>-i</STRONG>|<STRONG>--interlaced</STRONG> (default: false)</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_interlaced"><strong>-i</strong>|<strong>--interlaced</strong> (default: false)</a></strong><br />
+</dt>
+<dd>
If you set this option, then the resulting GIF will be interlaced.
Most web browsers display these incrementally as they load. If
you do not use this option, the GIFs default to being progressive
scanned. The only effect of this option is to control the format
of the GIF on disk. It makes no changes to the layout or contents
of the graph.
-<P></P>
-<DT><STRONG><A NAME="item_%2Df%7C%2D%2Dimginfo_formatstring"><STRONG>-f</STRONG>|<STRONG>--imginfo</STRONG> <EM>formatstring</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2df%7c%2d%2dimginfo_formatstring"><strong>-f</strong>|<strong>--imginfo</strong> <em>formatstring</em></a></strong><br />
+</dt>
+<dd>
After the image has been created, the graph function uses printf
together with this format string to create output similar to the PRINT
function, only that the printf is supplied with the parameters
-<EM>filename</EM>, <EM>xsize</EM> and <EM>ysize</EM>. In order to generate an <STRONG>IMG</STRONG> tag
+<em>filename</em>, <em>xsize</em> and <em>ysize</em>. In order to generate an <strong>IMG</strong> tag
suitable for including the graph into a web page, the command line
would look like this:
-<PRE>
- --imginfo '<IMG SRC="/img/%s" WIDTH="%lu" HEIGHT="%lu" ALT="Demo">'</PRE>
-<P></P>
-<DT><STRONG><A NAME="item_GD"><STRONG>-a</STRONG>|<STRONG>--imgformat</STRONG> <STRONG>GIF</STRONG>|<STRONG>PNG</STRONG>|<STRONG>GD</STRONG> (default: GIF)</A></STRONG><BR>
-<DD>
+</dd>
+<dd>
+<pre>
+ --imginfo '<IMG SRC="/img/%s" WIDTH="%lu" HEIGHT="%lu" ALT="Demo">'</pre>
+</dd>
+<p></p>
+<dt><strong><a name="item_gd"><strong>-a</strong>|<strong>--imgformat</strong> <strong>GIF</strong>|<strong>PNG</strong>|<strong>GD</strong> (default: GIF)</a></strong><br />
+</dt>
+<dd>
Allows you to produce PNG or GD output from rrdtool.
-<P></P>
-<DT><STRONG><A NAME="item_%2DB%7C%2D%2Dbackground_value"><STRONG>-B</STRONG>|<STRONG>--background</STRONG> <EM>value</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2db%7c%2d%2dbackground_value"><strong>-B</strong>|<strong>--background</strong> <em>value</em></a></strong><br />
+</dt>
+<dd>
You could use image in (currently only) GD format for background. It is
used as background at the very beginning of graph creation.
-<P></P>
-<DT><STRONG><A NAME="item_%2DO%7C%2D%2Doverlay_value"><STRONG>-O</STRONG>|<STRONG>--overlay</STRONG> <EM>value</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2do%7c%2d%2doverlay_value"><strong>-O</strong>|<strong>--overlay</strong> <em>value</em></a></strong><br />
+</dt>
+<dd>
You could use image in (currently only) GD format as overlay. It is
placed over created graph so that white pixel (color 255,255,255) is
considered transparent, all other is replacing corresponding pixel in created graph.
-<P></P>
-<DT><STRONG><A NAME="item_%2DU%7C%2D%2Dunit_value"><STRONG>-U</STRONG>|<STRONG>--unit</STRONG> <EM>value</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2du%7c%2d%2dunit_value"><strong>-U</strong>|<strong>--unit</strong> <em>value</em></a></strong><br />
+</dt>
+<dd>
You could use unit to be displayed on y axis. It is wise to use only short
units on graph, however.
-<P></P>
-<DT><STRONG><A NAME="item_lazy"><STRONG>-z</STRONG>|<STRONG>--lazy</STRONG> (default: false)</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_lazy"><strong>-z</strong>|<strong>--lazy</strong> (default: false)</a></strong><br />
+</dt>
+<dd>
Only generate the graph, if the current gif is out of date or not
existent.
-<P></P>
-<DT><STRONG><STRONG>-u</STRONG>|<STRONG>--upper-limit</STRONG> <EM>value</EM> (default autoconfigure)</STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><strong>-u</strong>|<strong>--upper-limit</strong> <em>value</em> (default autoconfigure)</strong><br />
+</dt>
+<dd>
Defines the value normally located at the upper border of the
graph. If the graph contains higher values, the upper border will
move upwards to accomodate these values as well.
-<P>If you want to define an upper-limit which will not move in any
-event you have to set the <STRONG>--rigid</STRONG> option as well.</P>
-<P></P>
-<DT><STRONG><STRONG>-l</STRONG>|<STRONG>--lower-limit</STRONG> <EM>value</EM> (default autoconfigure)</STRONG><BR>
-<DD>
+</dd>
+<dd>
+<p>If you want to define an upper-limit which will not move in any
+event you have to set the <strong>--rigid</strong> option as well.</p>
+</dd>
+<p></p>
+<dt><strong><strong>-l</strong>|<strong>--lower-limit</strong> <em>value</em> (default autoconfigure)</strong><br />
+</dt>
+<dd>
This is not the lower limit of a graph. But rather, this is the
maximum lower bound of a graph. For example, the value -100 will
result in a graph that has a lower limit of -100 or less. Use this
keyword to expand graphs down.
-<P></P>
-<DT><STRONG><A NAME="item_%2Dr%7C%2D%2Drigid"><STRONG>-r</STRONG>|<STRONG>--rigid</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dr%7c%2d%2drigid"><strong>-r</strong>|<strong>--rigid</strong></a></strong><br />
+</dt>
+<dd>
rigid boundaries mode. Normally rrdgraph will automatically expand the
lower and upper limit if the graph contains a value outside the valid
range. With the r option you can disable this behavior
-<P></P>
-<DT><STRONG><A NAME="item_%2Db%7C%2D%2Dbase_value"><STRONG>-b</STRONG>|<STRONG>--base</STRONG> <EM>value</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2db%7c%2d%2dbase_value"><strong>-b</strong>|<strong>--base</strong> <em>value</em></a></strong><br />
+</dt>
+<dd>
if you are graphing memory (and NOT network traffic) this switch
should be set to 1024 so that one Kb is 1024 byte. For traffic
measurement, 1 kb/s is 1000 b/s.
-<P></P>
-<DT><STRONG><A NAME="item_%2Do%7C%2D%2Dlogarithmic"><STRONG>-o</STRONG>|<STRONG>--logarithmic</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2do%7c%2d%2dlogarithmic"><strong>-o</strong>|<strong>--logarithmic</strong></a></strong><br />
+</dt>
+<dd>
logarithmic y-axis scaling
-<P></P>
-<DT><STRONG><A NAME="item_rrggbb"><STRONG>-c</STRONG>|<STRONG>--color</STRONG> <EM>COLORTAG</EM><STRONG>#</STRONG><EM>rrggbb</EM> (default colors)</A></STRONG><BR>
-<DD>
-override the colors for the standard elements of the graph. The <EM>COLORTAG</EM>
-must be one of the following symbolic names: <STRONG>BACK</STRONG> ground, <STRONG>CANVAS</STRONG>,
-<STRONG>SHADEA</STRONG> left/top border, <STRONG>SHADEB</STRONG> right/bottom border, <STRONG>GRID</STRONG>, <STRONG>MGRID</STRONG>
-major grid, <STRONG>FONT</STRONG>, <STRONG>FRAME</STRONG> and axis of the graph or <STRONG>ARROW</STRONG>. This option
+</dd>
+<p></p>
+<dt><strong><a name="item_rrggbb"><strong>-c</strong>|<strong>--color</strong> <em>COLORTAG</em><strong>#</strong><em>rrggbb</em> (default colors)</a></strong><br />
+</dt>
+<dd>
+override the colors for the standard elements of the graph. The <em>COLORTAG</em>
+must be one of the following symbolic names: <strong>BACK</strong> ground, <strong>CANVAS</strong>,
+<strong>SHADEA</strong> left/top border, <strong>SHADEB</strong> right/bottom border, <strong>GRID</strong>, <strong>MGRID</strong>
+major grid, <strong>FONT</strong>, <strong>FRAME</strong> and axis of the graph or <strong>ARROW</strong>. This option
can be called multiple times to set several colors.
-<P></P>
-<DT><STRONG><A NAME="item_%2Dg%7C%2D%2Dno%2Dlegend"><STRONG>-g</STRONG>|<STRONG>--no-legend</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_%2dg%7c%2d%2dno%2dlegend"><strong>-g</strong>|<strong>--no-legend</strong></a></strong><br />
+</dt>
+<dd>
Suppress generation of legend; only render the graph.
-<P></P>
-<DT><STRONG><A NAME="item_text"><STRONG>-t</STRONG>|<STRONG>--title</STRONG> <EM>text</EM> (default no title)</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_text"><strong>-t</strong>|<strong>--title</strong> <em>text</em> (default no title)</a></strong><br />
+</dt>
+<dd>
Define a title to be written into the graph
-<P></P>
-<DT><STRONG><STRONG>--step</STRONG> <EM>value</EM> (default automatic)</STRONG><BR>
-<DD>
-By default rrdgraph calculates the width of one pixle in the time domain and
+</dd>
+<p></p>
+<dt><strong><strong>-S</strong>|<strong>--step</strong> <em>value</em> (default automatic)</strong><br />
+</dt>
+<dd>
+By default rrdgraph calculates the width of one pixel in the time domain and
tries to get data at that resolution from the RRD. With this switch you can
override this behaviour. If you want rrdgraph to get data at 1 hour
resolution from the RRD, then you can set the step to 3600 seconds. Note,
-that a step smaller than 1 pixle will be silently ignored.
-<P></P>
-<DT><STRONG><A NAME="item_DEF%3Avname%3Drrd%3Ads%2Dname%3ACF"><STRONG>DEF:</STRONG><EM>vname</EM><STRONG>=</STRONG><EM>rrd</EM><STRONG>:</STRONG><EM>ds-name</EM><STRONG>:</STRONG><EM>CF</EM></A></STRONG><BR>
-<DD>
+that a step smaller than 1 pixel will be silently ignored.
+</dd>
+<p></p>
+<dt><strong><a name="item_def%3avname%3drrd%3ads%2dname%3acf"><strong>DEF:</strong><em>vname</em><strong>=</strong><em>rrd</em><strong>:</strong><em>ds-name</em><strong>:</strong><em>CF</em></a></strong><br />
+</dt>
+<dd>
Define virtual name for a data source. This name can then be used
in the functions explained below. The
-DEF call automatically chooses an <STRONG>RRA</STRONG> which contains <EM>CF</EM> consolidated data in a
+DEF call automatically chooses an <strong>RRA</strong> which contains <em>CF</em> consolidated data in a
resolution appropriate for the size of the graph to be drawn. Ideally
-this means that one data point from the <STRONG>RRA</STRONG> should be represented
-by one pixel in the graph. If the resolution of the <STRONG>RRA</STRONG> is higher
+this means that one data point from the <strong>RRA</strong> should be represented
+by one pixel in the graph. If the resolution of the <strong>RRA</strong> is higher
than the resolution of the graph, the data in the RRA will be further
-consolidated according to the consolidation function (<EM>CF</EM>) chosen.
-<P></P>
-<DT><STRONG><A NAME="item_CDEF%3Avname%3Drpn%2Dexpression"><STRONG>CDEF:</STRONG><EM>vname</EM><STRONG>=</STRONG><EM>rpn-expression</EM></A></STRONG><BR>
-<DD>
+consolidated according to the consolidation function (<em>CF</em>) chosen.
+</dd>
+<p></p>
+<dt><strong><a name="item_cdef%3avname%3drpn%2dexpression"><strong>CDEF:</strong><em>vname</em><strong>=</strong><em>rpn-expression</em></a></strong><br />
+</dt>
+<dd>
Create a new virtual data source by evaluating a mathematical expression,
specified in Reverse Polish Notation (RPN). If you have ever used a traditional
HP calculator you already know RPN. The idea behind RPN notation is,
@@ -326,9 +428,11 @@
you execute an operation, it takes as many data values from the stack
as needed. The pushing of data is implicit, so when ever you specify a number
or a variable, it gets pushed automatically.
-<P>If this is all a big load of incomprehensible words for you, maybe an
+</dd>
+<dd>
+<p>If this is all a big load of incomprehensible words for you, maybe an
example helps (a more complete explanation is given in [1]): The
-expression <EM>vname+3/2</EM> becomes <CODE>vname,3,2,/,+</CODE> in RPN. First the three
+expression <em>vname+3/2</em> becomes <code>vname,3,2,/,+</code> in RPN. First the three
values get pushed onto the stack (which now contains (the current
value of) vname, a 3 and a 2). Then the / operator pops two values
from the stack (3 and 2), divides the first argument by the second
@@ -336,228 +440,302 @@
operator pops two values (vname and 1.5) from the stack; both values
are added up and the result gets pushes back onto the stack. In the
end there is only one value left on the stack: The result of the
-expression.</P>
-<P>The <EM>rpn-expression</EM> in the <STRONG>CDEF</STRONG> function takes both, constant values
-as well as <EM>vname</EM> variables. The following operators can be used on these
-values:</P>
-<DL>
-<DT><STRONG><A NAME="item_%2B%2C_%2D%2C_%2A%2C_%2F%2C_%25">+, -, *, /, %</A></STRONG><BR>
-<DD>
+expression.</p>
+</dd>
+<dd>
+<p>The <em>rpn-expression</em> in the <strong>CDEF</strong> function takes both, constant values
+as well as <em>vname</em> variables. The following operators can be used on these
+values:</p>
+</dd>
+<dl>
+<dt><strong><a name="item_%2b%2c_%2d%2c_%2a%2c_%2f%2c_%25">+, -, *, /, %</a></strong><br />
+</dt>
+<dd>
pops two values from the stack applies the selected operator and pushes
the result back onto the stack. The % operator stands for the modulo
operation.
-<P></P>
-<DT><STRONG><A NAME="item_SIN%2C_COS%2C_LOG%2C_EXP%2C_FLOOR%2C_CEIL">SIN, COS, LOG, EXP, FLOOR, CEIL</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_sin%2c_cos%2c_log%2c_exp%2c_floor%2c_ceil">SIN, COS, LOG, EXP, FLOOR, CEIL</a></strong><br />
+</dt>
+<dd>
pops one value from the stack, applies the selected function and pushes
the result back onto the stack.
-<P></P>
-<DT><STRONG><A NAME="item_LT%2C_LE%2C_GT%2C_GE%2C_EQ">LT, LE, GT, GE, EQ</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_lt%2c_le%2c_gt%2c_ge%2c_eq">LT, LE, GT, GE, EQ</a></strong><br />
+</dt>
+<dd>
pops two values from the stack, compares them according to the selected
condition and pushes either 1 back onto the stack if the condition is true
and 0 if the condition was not true.
-<P></P>
-<DT><STRONG><A NAME="item_IF">IF</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_if">IF</a></strong><br />
+</dt>
+<dd>
pops three values from the stack. If the last value is not 0, the
second value will be pushed back onto the stack, otherwise the
first value is pushed back.
-<P>If the stack contains the values A, B, C, D, E are presently on the
+</dd>
+<dd>
+<p>If the stack contains the values A, B, C, D, E are presently on the
stack, the IF operator will pop the values E D and C of the stack. It will
look at C and if it is not 0 it will push D back onto the stack, otherwise
-E will be sent back to the stack.</P>
-<P></P>
-<DT><STRONG><A NAME="item_MIN%2C_MAX">MIN, MAX</A></STRONG><BR>
-<DD>
+E will be sent back to the stack.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_min%2c_max">MIN, MAX</a></strong><br />
+</dt>
+<dd>
selects the lesser or larger of the two top stack values respectively
-<P></P>
-<DT><STRONG><A NAME="item_LIMIT">LIMIT</A></STRONG><BR>
-<DD>
-replaces the value with <EM>*UNKNOWN*</EM> if it is outside the limits specified
+</dd>
+<p></p>
+<dt><strong><a name="item_limit">LIMIT</a></strong><br />
+</dt>
+<dd>
+replaces the value with <em>*UNKNOWN*</em> if it is outside the limits specified
by the two values above it on the stack.
-<PRE>
- CDEF:a=alpha,0,100,LIMIT</PRE>
-<P></P>
-<DT><STRONG><A NAME="item_DUP%2C_EXC%2C_POP">DUP, EXC, POP</A></STRONG><BR>
-<DD>
+</dd>
+<dd>
+<pre>
+ CDEF:a=alpha,0,100,LIMIT</pre>
+</dd>
+<p></p>
+<dt><strong><a name="item_dup%2c_exc%2c_pop">DUP, EXC, POP</a></strong><br />
+</dt>
+<dd>
These manipulate the stack directly. DUP will duplicate the top of the
stack, pushing the result back onto the stack. EXC will exchange the top
two elements of the stack, and POP will pop off the top element of the
stack. Having insufficient elements on the stack for these operations is
an error.
-<P></P>
-<DT><STRONG><A NAME="item_UN">UN</A></STRONG><BR>
-<DD>
-Pops one value off the stack, if it is <EM>*UNKNOWN*</EM>, 1 will be pushed
+</dd>
+<p></p>
+<dt><strong><a name="item_un">UN</a></strong><br />
+</dt>
+<dd>
+Pops one value off the stack, if it is <em>*UNKNOWN*</em>, 1 will be pushed
back otherwise 0.
-<P></P>
-<DT><STRONG><A NAME="item_UNKN">UNKN</A></STRONG><BR>
-<DD>
-Push an <EM>*UNKNOWN*</EM> value onto the stack.
-<P></P>
-<DT><STRONG><A NAME="item_PREV">PREV</A></STRONG><BR>
-<DD>
-Push <EM>*UNKNOWN*</EM> if its at the first value of a data set or otherwise
+</dd>
+<p></p>
+<dt><strong><a name="item_unkn">UNKN</a></strong><br />
+</dt>
+<dd>
+Push an <em>*UNKNOWN*</em> value onto the stack.
+</dd>
+<p></p>
+<dt><strong><a name="item_prev">PREV</a></strong><br />
+</dt>
+<dd>
+Push <em>*UNKNOWN*</em> if its at the first value of a data set or otherwise
the value of this CDEF at the previous time step. This allows you to
perform calculations across the data.
-<P></P>
-<DT><STRONG><CODE>PREV(vname)</CODE></STRONG><BR>
-<DD>
-Push <EM>*UNKNOWN*</EM> if its at the first value of the data set named vname
+</dd>
+<p></p>
+<dt><strong><code>PREV(vname)</code></strong><br />
+</dt>
+<dd>
+Push <em>*UNKNOWN*</em> if its at the first value of the data set named vname
or otherwise the value of the CDEF named vname at the previous time step.
This allows you to perform complex calculations across the data.
-<P></P>
-<DT><STRONG><A NAME="item_INF%2C_NEGINF">INF, NEGINF</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_inf%2c_neginf">INF, NEGINF</a></strong><br />
+</dt>
+<dd>
Push a positive or negative infinite (oo) value onto the stack. When
drawing an infinite number it appears right at the top or bottom edge of the
graph, depending whether you have a positive or negative infinite number.
-<P></P>
-<DT><STRONG><A NAME="item_NOW">NOW</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_now">NOW</a></strong><br />
+</dt>
+<dd>
Push the current (real world) time onto the stack.
-<P></P>
-<DT><STRONG><A NAME="item_TIME">TIME</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_time">TIME</a></strong><br />
+</dt>
+<dd>
Push the time the current sample was taken onto the stack. This is the
number of non-skip seconds since 0:00:00 January 1, 1970.
-<P></P>
-<DT><STRONG><A NAME="item_LTIME">LTIME</A></STRONG><BR>
-<DD>
-This is like TIME <STRONG>+ current timezone offset in seconds</STRONG>. The current
+</dd>
+<p></p>
+<dt><strong><a name="item_ltime">LTIME</a></strong><br />
+</dt>
+<dd>
+This is like TIME <strong>+ current timezone offset in seconds</strong>. The current
offset takes daylight saving time into account, given your OS supports
this. If you were looking at a sample, in Zurich, in summer, the
offset would be 2*3600 seconds, as Zurich at that time of year is 2
hours ahead of UTC.
-<P>Note that the timezone offset is always calculated for the time the
+</dd>
+<dd>
+<p>Note that the timezone offset is always calculated for the time the
current sample was taken at. It has nuthing todo with the time you are
-doing the calculation.</P>
-<P></P></DL>
-<P>Please note that you may only use <EM>vname</EM> variables that you
-previously defined by either <STRONG>DEF</STRONG> or <STRONG>CDEF</STRONG>. Furthermore, as of
-this writing (version 0.99.25), you must use at least one <EM>vname</EM>
+doing the calculation.</p>
+</dd>
+<p></p></dl>
+<p>Please note that you may only use <em>vname</em> variables that you
+previously defined by either <strong>DEF</strong> or <strong>CDEF</strong>. Furthermore, as of
+this writing (version 0.99.25), you must use at least one <em>vname</em>
per expression, that is ``CDEF:fourtytwo=2,40,+'' will yield an error
-message but not a <EM>vname</EM> fourtytwo that's always equal to 42.</P>
-<DT><STRONG><A NAME="item_PRINT%3Avname%3ACF%3Aformat"><STRONG>PRINT:</STRONG><EM>vname</EM><STRONG>:</STRONG><EM>CF</EM><STRONG>:</STRONG><EM>format</EM></A></STRONG><BR>
-<DD>
-Calculate the chosen consolidation function <EM>CF</EM> over the data-source
-variable <EM>vname</EM> and <CODE>printf</CODE> the result to stdout using <EM>format</EM>.
-In the <EM>format</EM> string there should be a '%lf' or '%le' marker in the
+message but not a <em>vname</em> fourtytwo that's always equal to 42.</p>
+<dt><strong><a name="item_print%3avname%3acf%3aformat"><strong>PRINT:</strong><em>vname</em><strong>:</strong><em>CF</em><strong>:</strong><em>format</em></a></strong><br />
+</dt>
+<dd>
+Calculate the chosen consolidation function <em>CF</em> over the data-source
+variable <em>vname</em> and <code>printf</code> the result to stdout using <em>format</em>.
+In the <em>format</em> string there should be a '%lf'or '%le' marker in the
place where the number should be printed.
-<P>If an additional '%s' is found AFTER the marker, the value will be scaled
+</dd>
+<dd>
+<p>If an additional '%s' is found AFTER the marker, the value will be scaled
and an appropriate SI magnitude unit will be printed in place of the '%s'
-marker. The scaling will take the '--base' argument into consideration!</P>
-<P>If a '%S' is used instead of a '%s', then instead of calculating the
+marker. The scaling will take the '--base' argument into consideration!</p>
+</dd>
+<dd>
+<p>If a '%S' is used instead of a '%s', then instead of calculating the
appropriate SI magnitude unit for this value, the previously calculated
SI magnitude unit will be used. This is useful if you want all the values
in a PRINT statement to have the same SI magnitude unit. If there was
no previous SI magnitude calculation made, then '%S' behaves like a '%s',
unless the value is 0, in which case it does not remember a SI magnitude
unit and a SI magnitude unit will only be calculated when the next '%s' is
-seen or the next '%S' for a non-zero value.</P>
-<P>If you want to put a '%' into your PRINT string, use '%%' instead.</P>
-<P></P>
-<DT><STRONG><A NAME="item_GPRINT%3Avname%3ACF%3Aformat"><STRONG>GPRINT:</STRONG><EM>vname</EM><STRONG>:</STRONG><EM>CF</EM><STRONG>:</STRONG><EM>format</EM></A></STRONG><BR>
-<DD>
-Same as <STRONG>PRINT</STRONG> but the result is printed into the graph below the legend.
-<P></P></DL>
-<P><STRONG>Caveat:</STRONG> When using the <STRONG>PRINT</STRONG> and <STRONG>GRPRINT</STRONG> functions to
+seen or the next '%S' for a non-zero value.</p>
+</dd>
+<dd>
+<p>If you want to put a '%' into your PRINT string, use '%%' instead.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_gprint%3avname%3acf%3aformat"><strong>GPRINT:</strong><em>vname</em><strong>:</strong><em>CF</em><strong>:</strong><em>format</em></a></strong><br />
+</dt>
+<dd>
+Same as <strong>PRINT</strong> but the result is printed into the graph below the legend.
+</dd>
+<p></p></dl>
+<p><strong>Caveat:</strong> When using the <strong>PRINT</strong> and <strong>GRPRINT</strong> functions to
calculate data summaries over time periods bounded by the current
time, it is important to note that the last sample will almost always
yield a value of UNKNOWN as it lies after the last update time. This
-can result in slight data skewing, particularly with the <STRONG>AVERAGE</STRONG>
+can result in slight data skewing, particularly with the <strong>AVERAGE</strong>
function. In order to avoid this, make sure that your end time is at
-least one heartbeat prior to the current time.</P>
-<DL>
-<DT><STRONG><A NAME="item_COMMENT%3Atext"><STRONG>COMMENT:</STRONG><EM>text</EM></A></STRONG><BR>
-<DD>
-Like <STRONG>GPRINT</STRONG> but the <EM>text</EM> is simply printed into the graph.
-<P></P>
-<DT><STRONG><A NAME="item_HRULE%3Avalue%23rrggbb%5B%3Alegend%5D"><STRONG>HRULE:</STRONG><EM>value</EM><STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]</A></STRONG><BR>
-<DD>
+least one heartbeat prior to the current time.</p>
+<dl>
+<dt><strong><a name="item_comment%3atext"><strong>COMMENT:</strong><em>text</em></a></strong><br />
+</dt>
+<dd>
+Like <strong>GPRINT</strong> but the <em>text</em> is simply printed into the graph.
+</dd>
+<p></p>
+<dt><strong><a name="item_hrule%3avalue%23rrggbb%5b%3alegend%5d"><strong>HRULE:</strong><em>value</em><strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]</a></strong><br />
+</dt>
+<dd>
Draw a horizontal rule into the graph and optionally add a legend
-<P></P>
-<DT><STRONG><A NAME="item_VRULE%3Atime%23rrggbb%5B%3Alegend%5D"><STRONG>VRULE:</STRONG><EM>time</EM><STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_vrule%3atime%23rrggbb%5b%3alegend%5d"><strong>VRULE:</strong><em>time</em><strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]</a></strong><br />
+</dt>
+<dd>
Draw a vertical rule into the graph and optionally add a legend
-<P></P>
-<DT><STRONG><A NAME="item_LINE%7B1%7C2%7C3%7D%3Avname%5B%23rrggbb%5B%3Alegen"><STRONG>LINE</STRONG>{<STRONG>1</STRONG>|<STRONG>2</STRONG>|<STRONG>3</STRONG>}<STRONG>:</STRONG><EM>vname</EM>[<STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]]</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_line%7b1%7c2%7c3%7d%3avname%5b%23rrggbb%5b%3alegen"><strong>LINE</strong>{<strong>1</strong>|<strong>2</strong>|<strong>3</strong>}<strong>:</strong><em>vname</em>[<strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]]</a></strong><br />
+</dt>
+<dd>
Plot for the requested data, using the color specified. Write a legend
-into the graph. The 3 possible keywords <STRONG>LINE1</STRONG>, <STRONG>LINE2</STRONG>, and <STRONG>LINE3</STRONG>
+into the graph. The 3 possible keywords <strong>LINE1</strong>, <strong>LINE2</strong>, and <strong>LINE3</strong>
generate increasingly wide lines. If no color is defined,
the drawing is done 'blind' this is useful in connection with the
-<STRONG>STACK</STRONG> function when you want to ADD the values of two
+<strong>STACK</strong> function when you want to ADD the values of two
data-sources without showing it in the graph.
-<P></P>
-<DT><STRONG><A NAME="item_AREA%3Avname%5B%23rrggbb%5B%3Alegend%5D%5D"><STRONG>AREA</STRONG>:<EM>vname</EM>[<STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]]</A></STRONG><BR>
-<DD>
-Does the same as <STRONG>LINE?</STRONG>, but the area between 0 and
+</dd>
+<p></p>
+<dt><strong><a name="item_area%3avname%5b%23rrggbb%5b%3alegend%5d%5d"><strong>AREA</strong>:<em>vname</em>[<strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]]</a></strong><br />
+</dt>
+<dd>
+Does the same as <strong>LINE?</strong>, but the area between 0 and
the graph will be filled with the color specified.
-<P></P>
-<DT><STRONG><A NAME="item_STACK%3Avname%5B%23rrggbb%5B%3Alegend%5D%5D"><STRONG>STACK</STRONG>:<EM>vname</EM>[<STRONG>#</STRONG><EM>rrggbb</EM>[<STRONG>:</STRONG><EM>legend</EM>]]</A></STRONG><BR>
-<DD>
-Does the same as <STRONG>LINE?</STRONG>, but the graph gets stacked on top of the previous
-<STRONG>LINE?</STRONG>, <STRONG>AREA</STRONG> or <STRONG>STACK</STRONG> graph. Depending on the type of the
-previous graph, the <STRONG>STACK</STRONG> will be either a <STRONG>LINE?</STRONG> or an <STRONG>AREA</STRONG>.
-This obviously implies that the first <STRONG>STACK</STRONG> must be preceded by an
-<STRONG>AREA</STRONG> or <STRONG>LINE?</STRONG> -- you need something to stack something onto in
+</dd>
+<p></p>
+<dt><strong><a name="item_stack%3avname%5b%23rrggbb%5b%3alegend%5d%5d"><strong>STACK</strong>:<em>vname</em>[<strong>#</strong><em>rrggbb</em>[<strong>:</strong><em>legend</em>]]</a></strong><br />
+</dt>
+<dd>
+Does the same as <strong>LINE?</strong>, but the graph gets stacked on top of the previous
+<strong>LINE?</strong>, <strong>AREA</strong> or <strong>STACK</strong> graph. Depending on the type of the
+previous graph, the <strong>STACK</strong> will be either a <strong>LINE?</strong> or an <strong>AREA</strong>.
+This obviously implies that the first <strong>STACK</strong> must be preceded by an
+<strong>AREA</strong> or <strong>LINE?</strong> -- you need something to stack something onto in
the first place ;)
-<P>Note, that when you STACK onto *UNKNOWN* data, rrdtool will not draw
+</dd>
+<dd>
+<p>Note, that when you STACK onto *UNKNOWN* data, rrdtool will not draw
any graphics ... *UNKNOWN* is not zero ... if you want it to zero
then you might want to use a CDEF argument with IF and UN functions to
-turn *UNKNOWN* into zero ...</P>
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="notes on legend arguments">NOTES on legend arguments</A></H1>
-<P>
-<H2><A NAME="escaping the colon">Escaping the colon</A></H2>
-<P>In a ':' in a <EM>legend</EM> argument will mark the end of the legend. To
+turn *UNKNOWN* into zero ...</p>
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="notes_on_legend_arguments">NOTES on legend arguments</a></h1>
+<p>
+</p>
+<h2><a name="escaping_the_colon">Escaping the colon</a></h2>
+<p>In a ':' in a <em>legend</em> argument will mark the end of the legend. To
enter a ':' into a legend, the colon must be escaped with a backslash '\:'.
Beware, that many environments look for backslashes themselves, so it may
-be necessary to write two backslashes so that one is passed onto rrd_graph.</P>
-<P>
-<H2><A NAME="string formatting">String Formatting</A></H2>
-<P>The text printed below the actual graph can be formated by appending special
+be necessary to write two backslashes so that one is passed onto rrd_graph.</p>
+<p>
+</p>
+<h2><a name="string_formatting">String Formatting</a></h2>
+<p>The text printed below the actual graph can be formated by appending special
escaped characters at the end of a text. When ever such a character occurs,
all pending text is pushed onto the graph according to the character
-specified.</P>
-<P>Valid markers are: <STRONG>\j</STRONG> for justified, <STRONG>\l</STRONG> for left aligned, <STRONG>\r</STRONG> for
-right aligned and <STRONG>\c</STRONG> for centered. In the next section there is an
-example showing how to use centered formating.</P>
-<P>Normally there are two space characters inserted between every two items
+specified.</p>
+<p>Valid markers are: <strong>\j</strong> for justified, <strong>\l</strong> for left aligned, <strong>\r</strong> for
+right aligned and <strong>\c</strong> for centered. In the next section there is an
+example showing how to use centered formating.</p>
+<p>Normally there are two space characters inserted between every two items
printed into the graph. The space following a string can be suppressed by
-putting a <STRONG>\g</STRONG> at the end of the string. The <STRONG>\g</STRONG> also squshes any space
+putting a <strong>\g</strong> at the end of the string. The <strong>\g</strong> also squshes any space
inside the string if it is at the very end of the string. This can be used
-in connection with <STRONG>%s</STRONG> to supress empty unit strings.</P>
-<PRE>
- GPRINT:a:MAX:%lf%s\g</PRE>
-<P>A special case is COMMENT:<STRONG>\s</STRONG> this inserts some additional vertical space
-before placing the next row of legends.</P>
-<P>
-<HR>
-<H1><A NAME="note on return values">NOTE on Return Values</A></H1>
-<P>Whenever rrd_graph gets called, it prints a line telling the size of
-the gif it has just created to STDOUT. This line looks like this: XSIZExYSIZE.</P>
-<P>
-<HR>
-<H1><A NAME="example 1">EXAMPLE 1</A></H1>
-<PRE>
+in connection with <strong>%s</strong> to supress empty unit strings.</p>
+<pre>
+ GPRINT:a:MAX:%lf%s\g</pre>
+<p>A special case is COMMENT:<strong>\s</strong> this inserts some additional vertical space
+before placing the next row of legends.</p>
+<p>When text has to be formated without special instructions from your side,
+rrdtool will automatically justify the text as soon as one string goes over
+the right edge. If you want to prevent the justification without forcing a
+newline, you can use the special tag <strong>\J</strong> at the end of the string to
+disable the auto justification.</p>
+<p>
+</p>
+<hr />
+<h1><a name="note_on_return_values">NOTE on Return Values</a></h1>
+<p>Whenever rrd_graph gets called, it prints a line telling the size of
+the gif it has just created to STDOUT. This line looks like this: XSIZExYSIZE.</p>
+<p>
+</p>
+<hr />
+<h1><a name="example_1">EXAMPLE 1</a></h1>
+<pre>
rrdtool graph demo.gif --title="Demo Graph" \
DEF:cel=demo.rrd:exhaust:AVERAGE \
"CDEF:far=cel,1.8,*,32,+"" \
LINE2:cel#00a000:"D. Celsius" \
- LINE2:far#ff0000:"D. Fahrenheit\c"</PRE>
-<P>
-<HR>
-<H1><A NAME="example 2">EXAMPLE 2</A></H1>
-<P>This example demonstrates the syntax for using IF and UN to set
-<EM>*UNKNOWN*</EM> values to 0. This technique is useful if you are
+ LINE2:far#ff0000:"D. Fahrenheit\c"</pre>
+<p>
+</p>
+<hr />
+<h1><a name="example_2">EXAMPLE 2</a></h1>
+<p>This example demonstrates the syntax for using IF and UN to set
+<em>*UNKNOWN*</em> values to 0. This technique is useful if you are
aggregating interface data where the start dates of the data sets
-doesn't match.</P>
-<PRE>
+doesn't match.</p>
+<pre>
rrdtool graph demo.gif --title="Demo Graph" \
DEF:idat1=interface1.rrd:ds0:AVERAGE \
DEF:idat2=interface2.rrd:ds0:AVERAGE \
@@ -567,24 +745,23 @@
CDEF:aggoutput=odat1,UN,0,odat1,IF,odat2,UN,0,odat2,IF,+,8,* \
AREA:agginput#00cc00:Input Aggregate \
LINE1:aggoutput#0000FF:Output Aggregate
-</PRE>
-<PRE>
-
-Assuming that idat1 has a data value of I<*UNKNOWN*>, the CDEF expression</PRE>
-<PRE>
- idat1,UN,0,idat1,IF</PRE>
-<P>leaves us with a stack with contents of 1,0,NaN and the IF function
+
+Assuming that idat1 has a data value of I<*UNKNOWN*>, the CDEF expression</pre>
+<pre>
+ idat1,UN,0,idat1,IF</pre>
+<p>leaves us with a stack with contents of 1,0,NaN and the IF function
will pop off the 3 values and replace them with 0. If idat1 had a
real value like 7942099, then the stack would have 0,0,7942099 and the
-real value would be the replacement.</P>
-<P>
-<HR>
-<H1><A NAME="example 3">EXAMPLE 3</A></H1>
-<P>This example shows two ways to use the INF function. First it makes
+real value would be the replacement.</p>
+<p>
+</p>
+<hr />
+<h1><a name="example_3">EXAMPLE 3</a></h1>
+<p>This example shows two ways to use the INF function. First it makes
the background change color during half of the hours. Then, it uses
AREA and STACK to draw a picture. If one of the inputs was UNKNOWN,
-all inputs are overlaid with another AREA.</P>
-<PRE>
+all inputs are overlaid with another AREA.</p>
+<pre>
rrdtool graph example.png --title="INF demo" \
DEF:val1=some.rrd:ds0:AVERAGE \
DEF:val2=some.rrd:ds1:AVERAGE \
@@ -597,30 +774,32 @@
STACK:val2#00C000:Value2 \
STACK:val3#FFFF00:Value3 \
STACK:val4#FFC000:Value4 \
- AREA:wipeout#FF0000:Unknown</PRE>
-<P>The first CDEF uses val4 as a dummy value. It's value is removed immediately
+ AREA:wipeout#FF0000:Unknown</pre>
+<p>The first CDEF uses val4 as a dummy value. It's value is removed immediately
from the stack. Then a decision is made based on the time that a sample was
taken. If it is an even hour (UTC time !) then the area will be filled. If
-it is not, the value is set to UNKN and is not plotted.</P>
-<P>The second CDEF looks if any of val1,val2,val3,val4 is unknown. It does so by
+it is not, the value is set to UNKN and is not plotted.</p>
+<p>The second CDEF looks if any of val1,val2,val3,val4 is unknown. It does so by
checking the outcome of sum(val1,val2,val3,val4). Again, INF is returned when
-the condition is true, UNKN is used to not plot the data.</P>
-<P>The different items are plotted in a particular order. First do the background, then use a
+the condition is true, UNKN is used to not plot the data.</p>
+<p>The different items are plotted in a particular order. First do the background, then use a
normal area to overlay it with data. Stack the other data until they are all plotted. Last but
not least, overlay everything with eye-hurting red
-to signal any unknown data.</P>
-<P>Note that this example assumes that your data is in the positive half of the y-axis
+to signal any unknown data.</p>
+<p>Note that this example assumes that your data is in the positive half of the y-axis
otherwhise you would would have to add NEGINF in order to extend the coverage
-of the rea to whole graph.</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
-<P>
-<HR>
-<H1><A NAME="references">REFERENCES</A></H1>
-<P>[1] <A HREF="http://www.dotpoint.com/xnumber/rpn_or_adl.htm">http://www.dotpoint.com/xnumber/rpn_or_adl.htm</A></P>
+of the rea to whole graph.</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
+<p>
+</p>
+<hr />
+<h1><a name="references">REFERENCES</a></h1>
+<p>[1] <a href="http://www.dotpoint.com/xnumber/rpn_or_adl.htm">http://www.dotpoint.com/xnumber/rpn_or_adl.htm</a></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtutorial.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.html 2003-02-20 15:24:01.000000000 -0800
@@ -1,78 +1,84 @@
-<HTML>
-<HEAD>
-<TITLE>rrdtutorial</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdtutorial</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#tutorial">TUTORIAL</A></LI>
- <UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#tutorial">TUTORIAL</a></li>
+ <ul>
- <LI><A HREF="#important">Important</A></LI>
- <LI><A HREF="#what is rrdtool ">What is RRDtool ?</A></LI>
- <LI><A HREF="#what data can be put into an rdd ">What data can be put into an RDD ?</A></LI>
- <LI><A HREF="#what can i do with this tool ">What can I do with this tool ?</A></LI>
- <LI><A HREF="#what if i still have problems after reading this document ">What if I still have problems after reading this document ?</A></LI>
- <LI><A HREF="#how will you help me ">How will you help me ?</A></LI>
- <LI><A HREF="#your first round robin database">Your first Round Robin Database</A></LI>
- <LI><A HREF="#what has been created ">What has been created ?</A></LI>
- <LI><A HREF="#it is time to create some graphics">It is time to create some graphics</A></LI>
- <LI><A HREF="#graphics with some math">Graphics with some math</A></LI>
- <LI><A HREF="#graphics magic">Graphics Magic</A></LI>
- <LI><A HREF="#updates in reality">Updates in Reality</A></LI>
- <LI><A HREF="#some words on snmp">Some words on SNMP</A></LI>
- <LI><A HREF="#a real world example">A Real World Example</A></LI>
- <LI><A HREF="#consolidation functions">Consolidation Functions</A></LI>
- <LI><A HREF="#let's review what you now should know.">Let's review what you now should know.</A></LI>
- <LI><A HREF="#data source types">Data Source Types</A></LI>
- <LI><A HREF="#rrdtool under the microscope">RRDtool under the Microscope</A></LI>
- <LI><A HREF="#counter wraps">Counter Wraps</A></LI>
- <LI><A HREF="#data resampling">Data Resampling</A></LI>
- </UL>
+ <li><a href="#important">Important</a></li>
+ <li><a href="#what_is_rrdtool_">What is RRDtool ?</a></li>
+ <li><a href="#what_data_can_be_put_into_an_rdd_">What data can be put into an RDD ?</a></li>
+ <li><a href="#what_can_i_do_with_this_tool_">What can I do with this tool ?</a></li>
+ <li><a href="#what_if_i_still_have_problems_after_reading_this_document_">What if I still have problems after reading this document ?</a></li>
+ <li><a href="#how_will_you_help_me_">How will you help me ?</a></li>
+ <li><a href="#your_first_round_robin_database">Your first Round Robin Database</a></li>
+ <li><a href="#what_has_been_created_">What has been created ?</a></li>
+ <li><a href="#it_is_time_to_create_some_graphics">It is time to create some graphics</a></li>
+ <li><a href="#graphics_with_some_math">Graphics with some math</a></li>
+ <li><a href="#graphics_magic">Graphics Magic</a></li>
+ <li><a href="#updates_in_reality">Updates in Reality</a></li>
+ <li><a href="#some_words_on_snmp">Some words on SNMP</a></li>
+ <li><a href="#a_real_world_example">A Real World Example</a></li>
+ <li><a href="#consolidation_functions">Consolidation Functions</a></li>
+ <li><a href="#let's_review_what_you_now_should_know.">Let's review what you now should know.</a></li>
+ <li><a href="#data_source_types">Data Source Types</a></li>
+ <li><a href="#rrdtool_under_the_microscope">RRDtool under the Microscope</a></li>
+ <li><a href="#counter_wraps">Counter Wraps</a></li>
+ <li><a href="#data_resampling">Data Resampling</a></li>
+ </ul>
- <LI><A HREF="#wrapup">WRAPUP</A></LI>
- <LI><A HREF="#mailinglist">MAILINGLIST</A></LI>
- <LI><A HREF="#see also">SEE ALSO</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#wrapup">WRAPUP</a></li>
+ <li><a href="#mailinglist">MAILINGLIST</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtutorial - Alex van den Bogaerdt's RRDtool tutorial</P>
-<div align="right">Go <a href="rrdtutorial.es.html">Spanish</a></div><div align="right"><a href="rrdtutorial.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>RRDtool is written by Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>> with
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtutorial - Alex van den Bogaerdt's RRDtool tutorial</p>
+<div align="right">Go <a href="rrdtutorial.es.html">Spanish</a></div><div align="right"><a href="rrdtutorial.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>RRDtool is written by Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>> with
contributions from many people all around the world. This document is
-written by Alex van den Bogaerdt <<A HREF="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</A>> to help you
-understand what RRDtool is and what it can do for you.</P>
-<P>The documentation provided with RRDtool can be too technical for some
+written by Alex van den Bogaerdt <<a href="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</a>> to help you
+understand what RRDtool is and what it can do for you.</p>
+<p>The documentation provided with RRDtool can be too technical for some
people. This tutorial is here to help you understand the basics of
RRDtool. It should prepare you to read the documentation yourself.
It also explains the general things about statistics with a focus on
-networking.</P>
-<P>
-<HR>
-<H1><A NAME="tutorial">TUTORIAL</A></H1>
-<P>
-<H2><A NAME="important">Important</A></H2>
-<P>Please don't skip ahead in this document! The first part of this
+networking.</p>
+<p>
+</p>
+<hr />
+<h1><a name="tutorial">TUTORIAL</a></h1>
+<p>
+</p>
+<h2><a name="important">Important</a></h2>
+<p>Please don't skip ahead in this document! The first part of this
document explains the basics and may be boring. But if you don't
-understand the basics, the examples will not be as meaningful to you.</P>
-<P>
-<H2><A NAME="what is rrdtool ">What is RRDtool ?</A></H2>
-<P>RRDtool refers to Round Robin Database tool.
+understand the basics, the examples will not be as meaningful to you.</p>
+<p>
+</p>
+<h2><a name="what_is_rrdtool_">What is RRDtool ?</a></h2>
+<p>RRDtool refers to Round Robin Database tool.
Round robin is a technique that works with a fixed amount of data, and a
pointer to the current element. Think of a circle with some dots plotted
on the edge, these dots are the places where data can be stored. Draw an
@@ -83,23 +89,25 @@
the process automatically reuses old locations. This way, the database
will not grow in size and therefore requires no mainenance.
RRDtool works with with Round Robin Databases (RRDs). It stores and retrieves
-data from them.</P>
-<P>
-<H2><A NAME="what data can be put into an rdd ">What data can be put into an RDD ?</A></H2>
-<P>You name it, it will probably fit. You should be able to measure some value
+data from them.</p>
+<p>
+</p>
+<h2><a name="what_data_can_be_put_into_an_rdd_">What data can be put into an RDD ?</a></h2>
+<p>You name it, it will probably fit. You should be able to measure some value
at several points in time and provide this information to RRDtool. If you
can do this, RRDtool will be able to store it. The values need to be
-numerical but don't have to be, as opposed to MRTG, integers.</P>
-<P>Many examples talk about SNMP which is an acronym for
+numerical but don't have to be, as opposed to MRTG, integers.</p>
+<p>Many examples talk about SNMP which is an acronym for
Simple Network Management Protocol. ``Simple'' refers to the protocol --
it does not mean it is simple to manage or monitor a network. After working your
way through this document, you should know enough to be able to understand
what people are talking about. For now, just realize that SNMP is a way to
ask devices for the values of counters they keep.
-It is the value from those counters that are kept in the RRD.</P>
-<P>
-<H2><A NAME="what can i do with this tool ">What can I do with this tool ?</A></H2>
-<P>RRDtool originated from MRTG (Multi Router Traffic Grapher). MRTG started
+It is the value from those counters that are kept in the RRD.</p>
+<p>
+</p>
+<h2><a name="what_can_i_do_with_this_tool_">What can I do with this tool ?</a></h2>
+<p>RRDtool originated from MRTG (Multi Router Traffic Grapher). MRTG started
as a tiny little script for graphing the use of a connection
to the Internet. MRTG evolved into a tool for graphing other data sources
including temperature, speed, voltage, number of printouts and
@@ -114,48 +122,51 @@
consumption, number of visitors at an exhibition, noise levels near an
airport, temperature on your favorite holiday location, temperature in the
fridge and whatever you imagination can come up with. You need a sensor to
-measure the data and be able to feed the numbers to RRDtool.</P>
-<P>
-<H2><A NAME="what if i still have problems after reading this document ">What if I still have problems after reading this document ?</A></H2>
-<P>First of all: read it again! You may have missed something.
+measure the data and be able to feed the numbers to RRDtool.</p>
+<p>
+</p>
+<h2><a name="what_if_i_still_have_problems_after_reading_this_document_">What if I still have problems after reading this document ?</a></h2>
+<p>First of all: read it again! You may have missed something.
If you are unable to compile the sources and you have a fairly common
OS, it will probably not be the fault of RRDtool. There may be precompiled
versions around on the Internet. If they come from trusted sources, get
one of those.
If on the other hand the program works but does not give you the
expected results, it will be a problem with configuring it. Review
-your configuration and compare it with the examples that follow.</P>
-<P>There is a mailing list and an archive of it. Read the list for a few
+your configuration and compare it with the examples that follow.</p>
+<p>There is a mailing list and an archive of it. Read the list for a few
weeks and search the archive. It is considered rude to just ask
a question without searching the archives: your problem may already have been
solved for somebody else! This is true for most, if not all, mailing lists
and not only for this particular list! Look in the documentation that
-came with RRDtool for the location and usage of the list.</P>
-<P>I suggest you take a moment to subscribe to the mailing list right now
-by sending an email to <<A HREF="mailto:rrd-users-request at list.ee.ethz.ch">rrd-users-request at list.ee.ethz.ch</A>> with a
+came with RRDtool for the location and usage of the list.</p>
+<p>I suggest you take a moment to subscribe to the mailing list right now
+by sending an email to <<a href="mailto:rrd-users-request at list.ee.ethz.ch">rrd-users-request at list.ee.ethz.ch</a>> with a
subject of ``subscribe''. If you ever want to leave this list, you write
-an email to the same address but now with a subject of ``unsubscribe''.</P>
-<P>
-<H2><A NAME="how will you help me ">How will you help me ?</A></H2>
-<P>By giving you some detailed descriptions with detailed examples.
+an email to the same address but now with a subject of ``unsubscribe''.</p>
+<p>
+</p>
+<h2><a name="how_will_you_help_me_">How will you help me ?</a></h2>
+<p>By giving you some detailed descriptions with detailed examples.
It is assumed that following the instructions in the order presented
will give you enough knowledge of RRDtool to experiment for yourself.
If it doesn't work the first time, don't give up. Reread the stuff that
you did understand, you may have missed something.
By following the examples you get some hands-on experience and, even
-more important, some background information of how it works.</P>
-<P>You will need to know something about hexadecimal numbers. If you don't
-then start with reading <A HREF="././bin_dec_hex.html">the bin_dec_hex manpage</A> before you continue here.</P>
-<P>
-<H2><A NAME="your first round robin database">Your first Round Robin Database</A></H2>
-<P>In my opinion the best way to learn something is to actually do it.
+more important, some background information of how it works.</p>
+<p>You will need to know something about hexadecimal numbers. If you don't
+then start with reading <a href="././bin_dec_hex.html">the bin_dec_hex manpage</a> before you continue here.</p>
+<p>
+</p>
+<h2><a name="your_first_round_robin_database">Your first Round Robin Database</a></h2>
+<p>In my opinion the best way to learn something is to actually do it.
Why not start right now? We will create a database, put some values
in it and extract this data again. Your output should be the same
-as the output that is included in this document.</P>
-<P>We will start with some easy stuff and compare a car with a router,
+as the output that is included in this document.</p>
+<p>We will start with some easy stuff and compare a car with a router,
or compare kilometers (miles if you wish) with bits and bytes. It's
-all the same: some number over some time.</P>
-<P>Assume we have a device that transfers bytes to and from the Internet.
+all the same: some number over some time.</p>
+<p>Assume we have a device that transfers bytes to and from the Internet.
This device keeps a counter that starts at zero when it is turned on,
increasing with every byte that is transfered. This counter will have
a maximum value, if that value is reached and an extra byte is counted,
@@ -169,69 +180,70 @@
The device, when asked, returns the current value of the counter. We
know the time that has passes since we last asked so we now know how
many bytes have been transfered ***on average*** per second. This is
-not very hard to calculate. First in words, then in calculations:</P>
-<OL>
-<LI>
+not very hard to calculate. First in words, then in calculations:</p>
+<ol>
+<li></li>
Take the current counter, subtract the previous value from it.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Do the same with the current time and the previous time.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Divide the outcome of (1) by the outcome of (2), the result is
the amount of bytes per second. Multiply by eight to get the
number of bits per second (bps).
-<P></P></OL>
-<PRE>
- bps = (counter_now - counter_before) / (time_now - time_before) * 8</PRE>
-<P>For some people it may help to translate this to a automobile example:
-Do not try this example, and if you do, don't blame me for the results.</P>
-<P>People who are not used to think in kilometers per hour can translate
+<p></p></ol>
+<pre>
+ bps = (counter_now - counter_before) / (time_now - time_before) * 8</pre>
+<p>For some people it may help to translate this to a automobile example:
+Do not try this example, and if you do, don't blame me for the results.</p>
+<p>People who are not used to think in kilometers per hour can translate
most into miles per hour by dividing km by 1.6 (close enough).
-I will use the following abbreviations:</P>
-<PRE>
+I will use the following abbreviations:</p>
+<pre>
M: meter
KM: kilometer (= 1000 meters).
H: hour
S: second
KM/H: kilometers per hour
- M/S: meters per second</PRE>
-<P>You're driving a car. At 12:05 you read the counter in the dashboard
+ M/S: meters per second</pre>
+<p>You're driving a car. At 12:05 you read the counter in the dashboard
and it tells you that the car has moved 12345 KM until that moment.
At 12:10 you look again, it reads 12357 KM. This means you have
traveled 12 KM in five minutes. A scientist would translate that
into meters per second and this makes a nice comparison towards the
-problem of (bytes per five minutes) versus (bits per second).</P>
-<P>We traveled 12 kilometers which is 12000 meters. We did that in five
+problem of (bytes per five minutes) versus (bits per second).</p>
+<p>We traveled 12 kilometers which is 12000 meters. We did that in five
minutes which translates into 300 seconds. Our speed is 12000M / 300S
-equals 40 M/S.</P>
-<P>We could also calculate the speed in KM/H: 12 times five minutes
+equals 40 M/S.</p>
+<p>We could also calculate the speed in KM/H: 12 times five minutes
is an hour so we have to multiply 12 KM by 12 to get 144 KM/H.
For our native English speaking friends: that's 90 MPH so don't
-try this example at home or where I live :)</P>
-<P>Remember: these numbers are averages only. There is no way to figure out
+try this example at home or where I live :)</p>
+<p>Remember: these numbers are averages only. There is no way to figure out
from the numbers, if you drove at a constant speed. There is an example
-later on in this tutorial that explains this.</P>
-<P>I hope you understand that there is no difference in calculating M/S or
+later on in this tutorial that explains this.</p>
+<p>I hope you understand that there is no difference in calculating M/S or
bps; only the way we collect the data is different. Even the K from kilo
-is the same as in networking terms k also means 1000.</P>
-<P>We will now create a database where we can keep all these interesting
+is the same as in networking terms k also means 1000.</p>
+<p>We will now create a database where we can keep all these interesting
numbers. The method used to start the program may differ slightly from
OS to OS but I assume you can figure it out if it works different on
your OS. Make sure you do not overwrite any file on your system when
executing the following command and type the whole line as one long
line (I had to split it for readability)
-and skip all of the '\' characters.</P>
-<PRE>
+and skip all of the '\' characters.</p>
+<pre>
rrdtool create test.rrd \
--start 920804400 \
DS:speed:COUNTER:600:U:U \
RRA:AVERAGE:0.5:1:24 \
- RRA:AVERAGE:0.5:6:10</PRE>
-<P>(So enter: <CODE>rrdtool create test.rrd --start 920804400 DS ...</CODE>)</P>
-<P>
-<H2><A NAME="what has been created ">What has been created ?</A></H2>
-<P>We created the round robin database called test (test.rrd)
+ RRA:AVERAGE:0.5:6:10</pre>
+<p>(So enter: <code>rrdtool create test.rrd --start 920804400 DS ...</code>)</p>
+<p>
+</p>
+<h2><a name="what_has_been_created_">What has been created ?</a></h2>
+<p>We created the round robin database called test (test.rrd)
which starts at noon the day I started (7th of march, 1999) writing
this document. It holds one data source (DS) named ``speed'' that gets
built from a counter. This counter is read every five minutes (default)
@@ -239,19 +251,19 @@
averages the data every time it is read (eg there's nothing to average)
and keeps 24 samples (24 times 5 minutes is 2 hours). The other averages
6 values (half hour) and contains 10 of such averages (eg 5 hours)
-The remaining options will be discussed later on.</P>
-<P>RRDtool works with special time stamps coming from the UNIX world.
+The remaining options will be discussed later on.</p>
+<p>RRDtool works with special time stamps coming from the UNIX world.
This time stamp is the number of seconds that passed since January
1st 1970 UTC. This time stamp is translated into local time and
-it will therefore look different for the different time zones.</P>
-<P>Chances are that you are not in the same part of the world as I am.
+it will therefore look different for the different time zones.</p>
+<p>Chances are that you are not in the same part of the world as I am.
This means your time zone is different. In all examples where I talk
about time, the hours may be wrong for you. This has little effect on
the results of the examples, just correct the hours while reading.
-As an example: where I will see ``12:05'' the UK folks will see ``11:05''.</P>
-<P>We now have to fill our database with some numbers. We'll pretend to
-have read the following numbers:</P>
-<PRE>
+As an example: where I will see ``12:05'' the UK folks will see ``11:05''.</p>
+<p>We now have to fill our database with some numbers. We'll pretend to
+have read the following numbers:</p>
+<pre>
12:05 12345 KM
12:10 12357 KM
12:15 12363 KM
@@ -266,29 +278,29 @@
13:00 12415 KM
13:05 12420 KM
13:10 12422 KM
- 13:15 12423 KM</PRE>
-<P>We fill the database as follows:</P>
-<PRE>
+ 13:15 12423 KM</pre>
+<p>We fill the database as follows:</p>
+<pre>
rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
- rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423</PRE>
-<P>This reads: update our test database with the following numbers</P>
-<PRE>
+ rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423</pre>
+<p>This reads: update our test database with the following numbers</p>
+<pre>
time 920804700, value 12345
- time 920805000, value 12357</PRE>
-<P>etcetera.</P>
-<P>As you can see, it is possible to feed more than one value into the
+ time 920805000, value 12357</pre>
+<p>etcetera.</p>
+<p>As you can see, it is possible to feed more than one value into the
database in one command. I had to stop at three for readability but
-the real maximum is OS dependent.</P>
-<P>We can now retrieve the data from our database using ``rrdtool fetch'':</P>
-<PRE>
- rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200</PRE>
-<P>It should return the following output:</P>
-<PRE>
- speed</PRE>
-<PRE>
+the real maximum is OS dependent.</p>
+<p>We can now retrieve the data from our database using ``rrdtool fetch'':</p>
+<pre>
+ rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200</pre>
+<p>It should return the following output:</p>
+<pre>
+ speed</pre>
+<pre>
920804700: NaN
920805000: 0.04
920805300: 0.02
@@ -304,48 +316,50 @@
920808300: 0.02
920808600: 0.01
920808900: 0.00
- 920809200: NaN</PRE>
-<P>If it doesn't, something may be wrong. Perhaps your OS will print
+ 920809200: NaN</pre>
+<p>If it doesn't, something may be wrong. Perhaps your OS will print
``NaN'' in a different form. It represents ``Not A Number''. If your OS
writes ``U'' or ``UNKN'' or something similar that's okay. If something
else is wrong, it will probably be due to an error you made (assuming
that my tutorial is correct of course :-). In that case: delete the
-database and try again.</P>
-<P>What this output represents will become clear in the rest of the tutorial.</P>
-<P>
-<H2><A NAME="it is time to create some graphics">It is time to create some graphics</A></H2>
-<P>Try the following command:</P>
-<PRE>
+database and try again.</p>
+<p>What this output represents will become clear in the rest of the tutorial.</p>
+<p>
+</p>
+<h2><a name="it_is_time_to_create_some_graphics">It is time to create some graphics</a></h2>
+<p>Try the following command:</p>
+<pre>
rrdtool graph speed.gif \
--start 920804400 --end 920808000 \
DEF:myspeed=test.rrd:speed:AVERAGE \
- LINE2:myspeed#FF0000</PRE>
-<P>This will create speed.gif which starts at 12:00 and ends at 13:00.
+ LINE2:myspeed#FF0000</pre>
+<p>This will create speed.gif which starts at 12:00 and ends at 13:00.
There is a definition of variable myspeed, it is the data from RRA
``speed'' out of database ``test.rrd''. The line drawn is 2 pixels high,
and comes from variable myspeed. The color is red.
You'll notice that the start of the graph is not at 12:00 but at 12:05
and this is because we have insufficient data to tell the average before
that time. This will only happen when you miss some samples, this will
-not happen a lot, hopefully.</P>
-<P>If this has worked: congratulations! If not, check what went wrong.</P>
-<P>The colors are built up from red, green and blue. For each of the
+not happen a lot, hopefully.</p>
+<p>If this has worked: congratulations! If not, check what went wrong.</p>
+<p>The colors are built up from red, green and blue. For each of the
components, you specify how much to use in hexadecimal where 00 means
not included and FF means fully included.
The ``color'' white is a mixture of red, green and blue: FFFFFF
-The ``color'' black is all colors off: 000000</P>
-<PRE>
+The ``color'' black is all colors off: 000000</p>
+<pre>
red #FF0000
green #00FF00
blue #0000FF
magenta #FF00FF (mixed red with blue)
- gray #555555 (one third of all components)</PRE>
-<P>The GIF you just created can be displayed using your favorite image
+ gray #555555 (one third of all components)</pre>
+<p>The GIF you just created can be displayed using your favorite image
viewer. Web browsers will display the GIF via the URL
-``file://the/path/to/speed.gif''</P>
-<P>
-<H2><A NAME="graphics with some math">Graphics with some math</A></H2>
-<P>When looking at the image, you notice that the horizontal axis is labeled
+``file://the/path/to/speed.gif''</p>
+<p>
+</p>
+<h2><a name="graphics_with_some_math">Graphics with some math</a></h2>
+<p>When looking at the image, you notice that the horizontal axis is labeled
12:10, 12:20, 12:30, 12:40 and 12:50. The two remaining times (12:00 and
13:00) would not be displayed nicely so they are skipped.
The vertical axis displays the range we entered. We provided kilometers
@@ -353,38 +367,38 @@
the first value was 12 (12357-12345) and divided by 300 this makes 0.04,
which is displayed by RRDtool as ``40 m'' meaning ``40/1000''. The ``m'' has
nothing to do with meters, kilometers or millimeters! RRDtool doesn't
-know about all this, it just works with numbers and not with meters...</P>
-<P>What we did wrong was that we should have measured in meters, this would
-have been (12357000-12345000)/300 = 12000/300 = 40.</P>
-<P>Let's correct that. We could recreate our database and store the correct
+know about all this, it just works with numbers and not with meters...</p>
+<p>What we did wrong was that we should have measured in meters, this would
+have been (12357000-12345000)/300 = 12000/300 = 40.</p>
+<p>Let's correct that. We could recreate our database and store the correct
data but there is a better way: do some calculations while creating the
-gif file !</P>
-<PRE>
+gif file !</p>
+<pre>
rrdtool graph speed2.gif \
--start 920804400 --end 920808000 \
--vertical-label m/s \
DEF:myspeed=test.rrd:speed:AVERAGE \
CDEF:realspeed=myspeed,1000,* \
- LINE2:realspeed#FF0000</PRE>
-<P>After viewing this GIF, you notice the ``m'' has disappeared. This it what
+ LINE2:realspeed#FF0000</pre>
+<p>After viewing this GIF, you notice the ``m'' has disappeared. This it what
the correct result would be. Also, a label has been added to the image.
-Apart from the things mentioned above, the GIF should be the same.</P>
-<P>The calculations are in the CDEF part and are in Reverse Polish Notation
+Apart from the things mentioned above, the GIF should be the same.</p>
+<p>The calculations are in the CDEF part and are in Reverse Polish Notation
(``RPN''). What it says is: ``take the data source myspeed and the number
1000; multiply those''. Don't bother with RPN yet, it will be explained
later on in more detail. Also, you may want to read my tutorial on CDEFs
-and Steve Rader's tutorial on RPN. But first finish this tutorial.</P>
-<P>Hang on! If we can multiply values with 1000, it should also be possible
-to display kilometers per hour from the same data!</P>
-<P>To change a value that is measured in meters per second:
+and Steve Rader's tutorial on RPN. But first finish this tutorial.</p>
+<p>Hang on! If we can multiply values with 1000, it should also be possible
+to display kilometers per hour from the same data!</p>
+<p>To change a value that is measured in meters per second:
-*- Calculate meters per hour: value * 3600
-*- Calculate kilometers per hour: value / 1000
- -*- Together this makes: value * (3600/1000) == value * 3.6</P>
-<P>In our example database we made a mistake and we need to compensate for
+ -*- Together this makes: value * (3600/1000) == value * 3.6</p>
+<p>In our example database we made a mistake and we need to compensate for
this by multiplying with 1000. Applying that correction:
- -*- value * 3.6 *1000 == value * 3600</P>
-<P>Now let's create this GIF, and add some more magic ...</P>
-<PRE>
+ -*- value * 3.6 *1000 == value * 3600</p>
+<p>Now let's create this GIF, and add some more magic ...</p>
+<pre>
rrdtool graph speed3.gif \
--start 920804400 --end 920808000 \
--vertical-label km/h \
@@ -394,24 +408,25 @@
CDEF:good=kmh,100,GT,0,kmh,IF \
HRULE:100#0000FF:"Maximum allowed" \
AREA:good#00FF00:"Good speed" \
- AREA:fast#FF0000:"Too fast"</PRE>
-<P>This looks much better. Speed in KM/H and even an extra line with the
+ AREA:fast#FF0000:"Too fast"</pre>
+<p>This looks much better. Speed in KM/H and even an extra line with the
maximum allowed speed (on the road I travel at). I also changed the
-colors used to display speed and changed it from a line into an area.</P>
-<P>The calculations are more complex now. For the ``good'' speed they are:</P>
-<PRE>
+colors used to display speed and changed it from a line into an area.</p>
+<p>The calculations are more complex now. For the ``good'' speed they are:</p>
+<pre>
Check if kmh is greater than 100 ( kmh,100 ) GT
- If so, return 0, else kmh ((( kmh,100 ) GT ), 0, kmh) IF</PRE>
-<P>For the other speed:</P>
-<PRE>
+ If so, return 0, else kmh ((( kmh,100 ) GT ), 0, kmh) IF</pre>
+<p>For the other speed:</p>
+<pre>
Check if kmh is greater than 100 ( kmh,100 ) GT
- If so, return kmh, else return 0 ((( kmh,100) GT ), kmh, 0) IF</PRE>
-<P>
-<H2><A NAME="graphics magic">Graphics Magic</A></H2>
-<P>I like to believe there are virtually no limits to how RRDtool graph
+ If so, return kmh, else return 0 ((( kmh,100) GT ), kmh, 0) IF</pre>
+<p>
+</p>
+<h2><a name="graphics_magic">Graphics Magic</a></h2>
+<p>I like to believe there are virtually no limits to how RRDtool graph
can manipulate data. I will not explain how it works, but look at the
-following GIF:</P>
-<PRE>
+following GIF:</p>
+<pre>
rrdtool graph speed4.gif \
--start 920804400 --end 920808000 \
--vertical-label km/h \
@@ -423,43 +438,45 @@
HRULE:100#0000FF:"Maximum allowed" \
AREA:good#00FF00:"Good speed" \
AREA:fast#550000:"Too fast" \
- STACK:over#FF0000:"Over speed"</PRE>
-<P>Let's create a quick and dirty HTML page to view three GIFs:</P>
-<PRE>
+ STACK:over#FF0000:"Over speed"</pre>
+<p>Let's create a quick and dirty HTML page to view three GIFs:</p>
+<pre>
<HTML><HEAD><TITLE>Speed</TITLE></HEAD><BODY>
<IMG src="speed2.gif" alt="Speed in meters per second">
<BR>
<IMG src="speed3.gif" alt="Speed in kilometers per hour">
<BR>
<IMG src="speed4.gif" alt="Traveled too fast?">
- </BODY></HTML></PRE>
-<P>Name the file ``speed.html'' or similar, and view it.</P>
-<P>Now, all you have to do is measure the values regularly and update the
+ </BODY></HTML></pre>
+<p>Name the file ``speed.html'' or similar, and view it.</p>
+<p>Now, all you have to do is measure the values regularly and update the
database. When you want to view the data, recreate the GIFs and make
sure to refresh them in your browser. (Note: just clicking reload may
not be enough; Netscape in particular has a problem doing so and you'll
-need to click reload while pressing the shift key).</P>
-<P>
-<H2><A NAME="updates in reality">Updates in Reality</A></H2>
-<P>We've already used the ``update'' command: it took one or more parameters
+need to click reload while pressing the shift key).</p>
+<p>
+</p>
+<h2><a name="updates_in_reality">Updates in Reality</a></h2>
+<p>We've already used the ``update'' command: it took one or more parameters
in the form of ``<time>:<value>''. You'll be glad to know that you can
get the current time by filling in a ``N'' as the time.
If you wish, you can also use the ``time'' function in perl.
-The shortest example in this doc :)</P>
-<PRE>
- perl -e 'print time, "\n" '</PRE>
-<P>How you can run a program on regular intervals is OS specific. But here's
-an example in pseudo code:</P>
-<PRE>
+The shortest example in this doc :)</p>
+<pre>
+ perl -e 'print time, "\n" '</pre>
+<p>How you can run a program on regular intervals is OS specific. But here's
+an example in pseudo code:</p>
+<pre>
Get the value, put it in variable "$speed"
- rrdtool update speed.rrd N:$speed</PRE>
-<P>(Do not try this with our test database, it is used in further examples)</P>
-<P>This is all. Run this script every five minutes. When you need to know
+ rrdtool update speed.rrd N:$speed</pre>
+<p>(Do not try this with our test database, it is used in further examples)</p>
+<p>This is all. Run this script every five minutes. When you need to know
what the graphics look like, run the examples above. You could put them
-in a script. After running that script, view index.html</P>
-<P>
-<H2><A NAME="some words on snmp">Some words on SNMP</A></H2>
-<P>I can imagine very few people will be able to get real data from their
+in a script. After running that script, view index.html</p>
+<p>
+</p>
+<h2><a name="some_words_on_snmp">Some words on SNMP</a></h2>
+<p>I can imagine very few people will be able to get real data from their
car every five minutes, all other people will have to settle for some
other kind of counter. You could measure the number of pages printed by
a printer, the coffee made by the coffee machine, a device that counts
@@ -472,128 +489,129 @@
Some people will make a remark that there are tools who can do this data
collection for you. They are right! However, I feel it is important that
you understand they are not necessary. When you have to determine why
-things went wrong you need to know how they work.</P>
-<P>One tool used in the example has been talked about very briefly in the
+things went wrong you need to know how they work.</p>
+<p>One tool used in the example has been talked about very briefly in the
beginning of this document, it is called SNMP. It is a way of talking to
equipment. The tool I use below is called ``snmpget'' and this is how it
-works:</P>
-<PRE>
- snmpget device password OID</PRE>
-<P>For device you substitute the name, or the IP address, of your device.
+works:</p>
+<pre>
+ snmpget device password OID</pre>
+<p>For device you substitute the name, or the IP address, of your device.
For password you use the ``community read string'' as it is called in the
SNMP world. For some devices the default of ``public'' might work, however
this can be disabled, altered or protected for privacy and security
-reasons. Read the documentation that comes with your device or program.</P>
-<P>Then there is this third parameter, called OID, which means ``object
-identifier''.</P>
-<P>When you start to learn about SNMP it looks very confusing. It isn't
+reasons. Read the documentation that comes with your device or program.</p>
+<p>Then there is this third parameter, called OID, which means ``object
+identifier''.</p>
+<p>When you start to learn about SNMP it looks very confusing. It isn't
all that difficult when you look at the Management Information Base
(``MIB''). It is an upside-down tree that describes data, with a single node
as the root and from there a number of branches. These branches end
up in another node, they branch out, etc. All the branches have a name
and they form the path that we follow all the way down. The branches
that we follow are named: iso, org, dod, internet, mgmt and mib-2.
-These names can also be written down as numbers and are 1 3 6 1 2 1.</P>
-<PRE>
- iso.org.dod.internet.mgmt.mib-2 (1.3.6.1.2.1)</PRE>
-<P>There is a lot of confusion about the leading dot that some programs
+These names can also be written down as numbers and are 1 3 6 1 2 1.</p>
+<pre>
+ iso.org.dod.internet.mgmt.mib-2 (1.3.6.1.2.1)</pre>
+<p>There is a lot of confusion about the leading dot that some programs
use. There is *no* leading dot in an OID. However, some programs
can use above part of OIDs as a default. To indicate the difference
between abbreviated OIDs and full OIDs they need a leading dot when
you specify the complete OID. Often those programs will leave out
the default portion when returning the data to you. To make things
-worse, they have several default prefixes ...</P>
-<P>Right, lets continue to the start of our OID: we had 1.3.6.1.2.1
+worse, they have several default prefixes ...</p>
+<p>Right, lets continue to the start of our OID: we had 1.3.6.1.2.1
From there, we are especially interested in the branch ``interfaces''
-which has number 2 (eg 1.3.6.1.2.1.2 or 1.3.6.1.2.1.interfaces).</P>
-<P>First, we have to get some SNMP program. First look if there is a
+which has number 2 (eg 1.3.6.1.2.1.2 or 1.3.6.1.2.1.interfaces).</p>
+<p>First, we have to get some SNMP program. First look if there is a
pre-compiled package available for your OS. This is the preferred way.
If not, you will have to get yourself the sources and compile those.
The Internet is full of sources, programs etc. Find information using
a search engine or whatever you prefer. As a suggestion: look for
-CMU-SNMP. It is commonly used.</P>
-<P>Assume you got the program. First try to collect some data that is
+CMU-SNMP. It is commonly used.</p>
+<p>Assume you got the program. First try to collect some data that is
available on most systems. Remember: there is a short name for the
-part of the tree that interests us most in the world we live in!</P>
-<P>I will use the short version as I think this document is large enough
+part of the tree that interests us most in the world we live in!</p>
+<p>I will use the short version as I think this document is large enough
as it is. If that doesn't work for you, prefix with .1.3.6.1.2.1 and
try again. Also, Read The Fine Manual. Skip the parts you cannot
understand yet, you should be able to find out how to start the
-program and use it.</P>
-<PRE>
- snmpget myrouter public system.sysDescr.0</PRE>
-<P>The device should answer with a description of itself, perhaps empty.
+program and use it.</p>
+<pre>
+ snmpget myrouter public system.sysDescr.0</pre>
+<p>The device should answer with a description of itself, perhaps empty.
Until you got a valid answer from a device, perhaps using a different
-``password'', or a different device, there is no point in continuing.</P>
-<PRE>
- snmpget myrouter public interfaces.ifNumber.0</PRE>
-<P>Hopefully you get a number as a result, the number of interfaces.
-If so, you can carry on and try a different program called ``snmpwalk''.</P>
-<PRE>
- snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr</PRE>
-<P>If it returns with a list of interfaces, you're almost there.
+``password'', or a different device, there is no point in continuing.</p>
+<pre>
+ snmpget myrouter public interfaces.ifNumber.0</pre>
+<p>Hopefully you get a number as a result, the number of interfaces.
+If so, you can carry on and try a different program called ``snmpwalk''.</p>
+<pre>
+ snmpwalk myrouter public interfaces.iftable.ifentry.ifdescr</pre>
+<p>If it returns with a list of interfaces, you're almost there.
Here's an example:
- [user at host /home/alex]$ snmpwalk cisco public 2.2.1.2</P>
-<PRE>
+ [user at host /home/alex]$ snmpwalk cisco public 2.2.1.2</p>
+<pre>
interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1"
interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2"
interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30
interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0"
- interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0"</PRE>
-<P>On this cisco equipment, I would like to monitor the ``Ethernet0''
-interface and see that it is number four. I try:</P>
-<PRE>
- [user at host /home/alex]$ snmpget cisco public 2.2.1.10.4 2.2.1.16.4</PRE>
-<PRE>
+ interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0"</pre>
+<p>On this cisco equipment, I would like to monitor the ``Ethernet0''
+interface and see that it is number four. I try:</p>
+<pre>
+ [user at host /home/alex]$ snmpget cisco public 2.2.1.10.4 2.2.1.16.4</pre>
+<pre>
interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126
- interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519</PRE>
-<P>So now I have two OIDs to monitor and they are (in full, this time):</P>
-<PRE>
- 1.3.6.1.2.1.2.2.1.10</PRE>
-<P>and</P>
-<PRE>
- 1.3.6.1.2.1.2.2.1.16</PRE>
-<P>both with an interface number of 4.</P>
-<P>Don't get fooled, this wasn't my first try. It took some time for me too
+ interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519</pre>
+<p>So now I have two OIDs to monitor and they are (in full, this time):</p>
+<pre>
+ 1.3.6.1.2.1.2.2.1.10</pre>
+<p>and</p>
+<pre>
+ 1.3.6.1.2.1.2.2.1.16</pre>
+<p>both with an interface number of 4.</p>
+<p>Don't get fooled, this wasn't my first try. It took some time for me too
to understand what all these numbers mean, it does help a lot when they
get translated into descriptive text... At least, when people are talking
about MIBs and OIDs you know what it's all about.
Do not forget the interface number (0 if it is not interface dependent)
-and try snmpwalk if you don't get an answer from snmpget.</P>
-<P>If you understand above part, and get numbers from your device, continue
-on with this tutorial. If not, then go back and re-read this part.</P>
-<P>
-<H2><A NAME="a real world example">A Real World Example</A></H2>
-<P>Let the fun begin. First, create a new database. It contains data from
+and try snmpwalk if you don't get an answer from snmpget.</p>
+<p>If you understand above part, and get numbers from your device, continue
+on with this tutorial. If not, then go back and re-read this part.</p>
+<p>
+</p>
+<h2><a name="a_real_world_example">A Real World Example</a></h2>
+<p>Let the fun begin. First, create a new database. It contains data from
two counters, called input and output. The data is put into archives
that average it. They take 1, 6, 24 or 288 samples at a time.
They also go into archives that keep the maximum numbers. This will be
explained later on. The time in-between samples is 300 seconds, a good
-starting point, which is the same as five minutes.</P>
-<PRE>
+starting point, which is the same as five minutes.</p>
+<pre>
1 sample "averaged" stays 1 period of 5 minutes
6 samples averaged become one average on 30 minutes
24 samples averaged become one average on 2 hours
- 288 samples averaged become one average on 1 day</PRE>
-<P>Lets try to be compatible with MRTG:
-MRTG stores about the following amount of data:</P>
-<PRE>
+ 288 samples averaged become one average on 1 day</pre>
+<p>Lets try to be compatible with MRTG:
+MRTG stores about the following amount of data:</p>
+<pre>
600 5-minute samples: 2 days and 2 hours
600 30-minute samples: 12.5 days
600 2-hour samples: 50 days
- 732 1-day samples: 732 days</PRE>
-<P>These ranges are appended so the total amount of data kept is approximately
+ 732 1-day samples: 732 days</pre>
+<p>These ranges are appended so the total amount of data kept is approximately
797 days. RRDtool stores the data differently, it doesn't start the ``weekly''
archive where the ``daily'' archive stopped. For both archives the most recent
data will be near ``now'' and therefore we will need to keep more data than
-MRTG does!</P>
-<P>We will need:</P>
-<PRE>
+MRTG does!</p>
+<p>We will need:</p>
+<pre>
600 samples of 5 minutes (2 days and 2 hours)
700 samples of 30 minutes (2 days and 2 hours, plus 12.5 days)
775 samples of 2 hours (above + 50 days)
- 797 samples of 1 day (above + 732 days, rounded up to 797)</PRE>
-<PRE>
+ 797 samples of 1 day (above + 732 days, rounded up to 797)</pre>
+<pre>
rrdtool create myrouter.rrd \
DS:input:COUNTER:600:U:U \
DS:output:COUNTER:600:U:U \
@@ -604,11 +622,11 @@
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
- RRA:MAX:0.5:288:797</PRE>
-<P>Next thing to do is collect data and store it. Here is an example.
+ RRA:MAX:0.5:288:797</pre>
+<p>Next thing to do is collect data and store it. Here is an example.
It is written partially in pseudo code so you will have to find out what
-to do exactly on your OS to make it work.</P>
-<PRE>
+to do exactly on your OS to make it work.</p>
+<pre>
while not the end of the universe
do
get result of
@@ -616,49 +634,50 @@
into variable $in
get result of
snmpget router community 2.2.1.16.4
- into variable $out</PRE>
-<PRE>
- rrdtool update myrouter.rrd N:$in:$out</PRE>
-<PRE>
+ into variable $out</pre>
+<pre>
+ rrdtool update myrouter.rrd N:$in:$out</pre>
+<pre>
wait for 5 minutes
- done</PRE>
-<P>Then, after collecting data for a day, try to create an image using:</P>
-<PRE>
+ done</pre>
+<p>Then, after collecting data for a day, try to create an image using:</p>
+<pre>
rrdtool graph myrouter-day.gif --start -86400 \
DEF:inoctets=myrouter.rrd:input:AVERAGE \
DEF:outoctets=myrouter.rrd:output:AVERAGE \
AREA:inoctets#00FF00:"In traffic" \
- LINE1:outoctets#0000FF:"Out traffic"</PRE>
-<P>This should produce a picture with one day worth of traffic.
+ LINE1:outoctets#0000FF:"Out traffic"</pre>
+<p>This should produce a picture with one day worth of traffic.
One day is 24 hours of 60 minutes of 60 seconds: 24*60*60=86400, we
start at now minus 86400 seconds. We define (with DEFs) inoctets and
outoctets as the average values from the database myrouter.rrd and draw
-an area for the ``in'' traffic and a line for the ``out'' traffic.</P>
-<P>View the image and keep logging data for a few more days.
+an area for the ``in'' traffic and a line for the ``out'' traffic.</p>
+<p>View the image and keep logging data for a few more days.
If you like, you could try the examples from the test database and
-see if you can get various options and calculations working.</P>
-<P>Suggestion:</P>
-<P>Display in bytes per second and in bits per second. Make the Ethernet
-graphics go red if they are over four megabits per second.</P>
-<P>
-<H2><A NAME="consolidation functions">Consolidation Functions</A></H2>
-<P>A few paragraphs back I mentioned the possibility of keeping
+see if you can get various options and calculations working.</p>
+<p>Suggestion:</p>
+<p>Display in bytes per second and in bits per second. Make the Ethernet
+graphics go red if they are over four megabits per second.</p>
+<p>
+</p>
+<h2><a name="consolidation_functions">Consolidation Functions</a></h2>
+<p>A few paragraphs back I mentioned the possibility of keeping
the maximum values instead of the average values. Let's go
-into this a bit more.</P>
-<P>Recall all the stuff about the speed of the car. Suppose we drove at 144
+into this a bit more.</p>
+<p>Recall all the stuff about the speed of the car. Suppose we drove at 144
KM/H during 5 minutes and then were stopped by the police for 25 minutes.
At the end of the lecture we would take our laptop and create+view the
image taken from the database. If we look at the second RRA we did
create, we would have the average from 6 samples. The samples measured
would be 144+0+0+0+0+0=144, divided by 30 minutes, corrected for the
error by 1000, translated into KM/H, with a result of 24 KM/H.
-I would still get a ticket but not for speeding anymore :)</P>
-<P>Obviously, in this case, we shouldn't look at the averages. In some
+I would still get a ticket but not for speeding anymore :)</p>
+<p>Obviously, in this case, we shouldn't look at the averages. In some
cases they are handy. If you want to know how much KM you had traveled,
the picture would be the right one to look at. On the other hand, for
the speed that we traveled at, the maximum number seen is much more
-valuable. (later we will see more types)</P>
-<P>It is the same for data. If you want to know the amount, look at the
+valuable. (later we will see more types)</p>
+<p>It is the same for data. If you want to know the amount, look at the
averages. If you want to know the rate, look at the maximum.
Over time, they will grow apart more and more. In the last database
we have created, there are two archives that keep data per day. The
@@ -666,12 +685,12 @@
shows maxima will have higher numbers.
For my car this would translate in averages per day of 96/24=4 KM/H
(as I travel about 94 kilometers on a day) during week days, and
-maximum of 120 KM/H on weekdays (my top speed that I reach every day).</P>
-<P>Big difference. Do not look at the second graph to estimate the
+maximum of 120 KM/H on weekdays (my top speed that I reach every day).</p>
+<p>Big difference. Do not look at the second graph to estimate the
distances that I travel and do not look at the first graph to
estimate my speed. This will work if the samples are close together,
-as they are in five minutes, but not if you average.</P>
-<P>On some days, I go for a long ride. If I go across Europe and travel
+as they are in five minutes, but not if you average.</p>
+<p>On some days, I go for a long ride. If I go across Europe and travel
for over 12 hours, the first graph will rise to about 60 KM/H. The
second one will show 180 KM/H. This means that I traveled a distance
of 60 KM/H times 24 H = 1440 KM. I did this with a higher speed and
@@ -688,31 +707,33 @@
higher, so you can see more. However, this takes 12 samples per hour,
or 288 values per day, so it would be too much to keep for a long
period of time. Therefore we average it, eventually to one value per
-day. From this one value, we cannot see much detail.</P>
-<P>Make sure you understand the last few paragraphs. There is no value
+day. From this one value, we cannot see much detail.</p>
+<p>Make sure you understand the last few paragraphs. There is no value
in only a line and a few axis, you need to know what they mean and
-interpret the data in a good way. This is true for all data.</P>
-<P>The biggest mistake you can make is to use the collected data for
+interpret the data in a good way. This is true for all data.</p>
+<p>The biggest mistake you can make is to use the collected data for
something that it is not suitable for. You would be better off if
-you would not have the graphics at all in that case.</P>
-<P>
-<H2><A NAME="let's review what you now should know.">Let's review what you now should know.</A></H2>
-<P>You now know how to create a database. You can put the numbers in it,
+you would not have the graphics at all in that case.</p>
+<p>
+</p>
+<h2><a name="let's_review_what_you_now_should_know.">Let's review what you now should know.</a></h2>
+<p>You now know how to create a database. You can put the numbers in it,
get them out again by creating an image, do math on the data from the
database and view the outcome instead of the raw data.
You know about the difference between averages and maxima, and when
-to use which (or at least you have an idea).</P>
-<P>RRDtool can do more than what we have learned up to now. Before you
+to use which (or at least you have an idea).</p>
+<p>RRDtool can do more than what we have learned up to now. Before you
continue with the rest of this doc, I recommend that you reread from
the start and try some modifications on the examples. Make sure you
fully understand everything. It will be worth the effort and helps
you not only with the rest of this doc but also in your day to day
-monitoring long after you read this introduction.</P>
-<P>
-<H2><A NAME="data source types">Data Source Types</A></H2>
-<P>All right, you feel like continuing. Welcome back and get ready
-for an increased speed in the examples and explanation.</P>
-<P>You know that in order to view a counter over time, you have to
+monitoring long after you read this introduction.</p>
+<p>
+</p>
+<h2><a name="data_source_types">Data Source Types</a></h2>
+<p>All right, you feel like continuing. Welcome back and get ready
+for an increased speed in the examples and explanation.</p>
+<p>You know that in order to view a counter over time, you have to
take two numbers and divide the difference of them between the
time lapsed. This makes sense for the examples I gave you but there
are other possibilities. For instance, I'm able to retrieve the
@@ -720,8 +741,8 @@
so called hot-spot and the exhaust. These values are not counters.
If I take the difference of the two samples and divide that by
300 seconds I would be asking for the temperature change per second.
-Hopefully this is zero! If not, the computerroom is on fire :)</P>
-<P>So, what can we do ? We can tell RRDtool to store the values we measure
+Hopefully this is zero! If not, the computerroom is on fire :)</p>
+<p>So, what can we do ? We can tell RRDtool to store the values we measure
directly as they are (this is not entirely true but close enough). The
graphs we make will look much better, they will show a rather constant
value. I know when the router is busy (it
@@ -731,13 +752,13 @@
computer room -> the inlet temperature rises) etc. The data type we
use when creating the database before was counter, we now have a
different data type and thus a different name for it. It is called
-GAUGE. There are more such data types:</P>
-<PRE>
+GAUGE. There are more such data types:</p>
+<pre>
- COUNTER we already know this one
- GAUGE we just learned this one
- DERIVE
- - ABSOLUTE</PRE>
-<P>The two new types are DERIVE and ABSOLUTE. Absolute can be used like
+ - ABSOLUTE</pre>
+<p>The two new types are DERIVE and ABSOLUTE. Absolute can be used like
counter with one difference: RRDtool assumes the counter is reset when
it's read. That is: its delta is known without calculation by RRDtool
whereas RRDtool needs to calculate it for the counter type.
@@ -745,9 +766,9 @@
unknown, 12, 6, 0. The rest of the calculations stay the same.
The other one, derive, is like counter. Unlike counter, it can also
decrease so it can have a negative delta. Again, the rest of the
-calculations stay the same.</P>
-<P>Let's try them all:</P>
-<PRE>
+calculations stay the same.</p>
+<p>Let's try them all:</p>
+<pre>
rrdtool create all.rrd --start 978300900 \
DS:a:COUNTER:600:U:U \
DS:b:GAUGE:600:U:U \
@@ -769,44 +790,45 @@
DEF:linea=all.rrd:a:AVERAGE LINE3:linea#FF0000:"Line A" \
DEF:lineb=all.rrd:b:AVERAGE LINE3:lineb#00FF00:"Line B" \
DEF:linec=all.rrd:c:AVERAGE LINE3:linec#0000FF:"Line C" \
- DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D"</PRE>
-<P>
-<H2><A NAME="rrdtool under the microscope">RRDtool under the Microscope</A></H2>
-<UL>
-<LI>
+ DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D"</pre>
+<p>
+</p>
+<h2><a name="rrdtool_under_the_microscope">RRDtool under the Microscope</a></h2>
+<ul>
+<li></li>
Line A is a counter so it should continuously increment and RRDtool
should calculate the differences. Also, RRDtool needs to divide the
difference by the amount of time lapsed. This should end up as a
straight line at 1 (the deltas are 300, the time is 300).
-<P></P>
-<LI>
+<p></p>
+<li></li>
Line B is of type gauge. These are ``real'' values so they should match
what we put in: a sort of a wave.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Line C is derive. It should be a counter that can decrease. It does
so between 2400 and 0, with 1800 in-between.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Line D is of type absolute. This is like counter but it works on
values without calculating the difference. The numbers are the same
and as you can see (hopefully) this has a different result.
-<P></P></UL>
-<P>This translates in the following values, starting at 23:10 and ending
-at 00:10 the next day (where U means unknown/unplotted):</P>
-<PRE>
+<p></p></ul>
+<p>This translates in the following values, starting at 23:10 and ending
+at 00:10 the next day (where U means unknown/unplotted):</p>
+<pre>
- Line A: u u 1 1 1 1 1 1 1 1 1 u
- Line B: u 1 3 5 3 1 2 4 6 4 2 u
- Line C: u u 2 2 2 0 -2 -6 2 0 2 u
- - Line D: u 1 2 3 4 5 6 7 8 9 10 u</PRE>
-<P>If your GIF shows all this, you know you have typed the data correct,
+ - Line D: u 1 2 3 4 5 6 7 8 9 10 u</pre>
+<p>If your GIF shows all this, you know you have typed the data correct,
the RRDtool executable is working properly, your viewer doesn't fool you
and you successfully entered the year 2000 :)
You could try the same example four times, each time with only one of
-the lines.</P>
-<P>Let's go over the data again:</P>
-<UL>
-<LI>
+the lines.</p>
+<p>Let's go over the data again:</p>
+<ul>
+<li></li>
Line A: 300,600,900 and so on. The counter delta is a constant 300 and
so it the time delta. A number divided by itself is always 1 (except
when dividing by zero which is undefined/illegal).
@@ -814,29 +836,30 @@
the database ? True ! But we didn't have a value to calculate the delta
from so we don't know where we started. It would be wrong to assume we
started at zero so we don't !
-<P></P>
-<LI>
+<p></p>
+<li></li>
Line B: There is nothing to calculate. The numbers are as is.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Line C: Again, the start-out value is unknown. The same story is valid
like for line A. In this case the deltas are not constant so the line
is not. If we would put the same numbers in the database as we did for
line A, we would have gotten the same line. Unlike type counter,
this type can decrease and I hope to show you later on why
there is a difference.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Line D: Here the device calculates the deltas. Therefore we DO know the
first delta and it is plotted. We had the same input as with line A but
the meaning of this input is different. Therefore the line is different.
In this case the deltas increase each time with 300. The time delta
stays at a constant 300 and therefore the division of the two gives
increasing results.
-<P></P></UL>
-<P>
-<H2><A NAME="counter wraps">Counter Wraps</A></H2>
-<P>There are a few more basics to show. Some important options are still to
+<p></p></ul>
+<p>
+</p>
+<h2><a name="counter_wraps">Counter Wraps</a></h2>
+<p>There are a few more basics to show. Some important options are still to
be covered and we haven't look at counter wraps yet. First the counter wrap:
In our car we notice that our counter shows 999987. We travel 20 KM and
the counter should go to 1000007. Unfortunately, there are only six digits
@@ -847,23 +870,23 @@
anyways. How does it work ? Type counter should never decrease and
therefore RRDtool must assume it wrapped if it does decrease !
If the delta is negative, this can be compensated for by adding the
-maximum value of the counter + 1. For our car this would be:</P>
-<PRE>
- Delta = 7 - 999987 = -999980 (instead of 1000007-999987=20)</PRE>
-<PRE>
- Real delta = -999980 + 999999 + 1 = 20</PRE>
-<P>At the time of writing this document, RRDtool knows of counters that
+maximum value of the counter + 1. For our car this would be:</p>
+<pre>
+ Delta = 7 - 999987 = -999980 (instead of 1000007-999987=20)</pre>
+<pre>
+ Real delta = -999980 + 999999 + 1 = 20</pre>
+<p>At the time of writing this document, RRDtool knows of counters that
are either 32 bits or 64 bits of size. These counters can handle the
-following different values:</P>
-<PRE>
+following different values:</p>
+<pre>
- 32 bits: 0 .. 4294967295
- - 64 bits: 0 .. 18446744073709551615</PRE>
-<P>If these numbers look strange to you, you would like to view them in
-their hexadecimal form:</P>
-<PRE>
+ - 64 bits: 0 .. 18446744073709551615</pre>
+<p>If these numbers look strange to you, you would like to view them in
+their hexadecimal form:</p>
+<pre>
- 32 bits: 0 .. FFFFFFFF
- - 64 bits: 0 .. FFFFFFFFFFFFFFFF</PRE>
-<P>RRDtool handles both counters the same. If an overflow occurs and
+ - 64 bits: 0 .. FFFFFFFFFFFFFFFF</pre>
+<p>RRDtool handles both counters the same. If an overflow occurs and
the delta would be negative, RRDtool first adds the maximum of a small
counter + 1 to the delta. If the delta is still negative, it had to be
the large counter that wrapped. Add the maximum possible value of the
@@ -875,46 +898,46 @@
counter value for that to happen so chances are you would have several
other problems as well and this particular problem would not even be
worth thinking about. Even though I did include an example of it so you
-can judge that for yourself.</P>
-<P>The next section gives you some numerical examples for counter-wraps.
+can judge that for yourself.</p>
+<p>The next section gives you some numerical examples for counter-wraps.
Try to do the calculations yourself or just believe me if your calculator
-can't handle the numbers :)</P>
-<P>Correction numbers:</P>
-<PRE>
+can't handle the numbers :)</p>
+<p>Correction numbers:</p>
+<pre>
- 32 bits: (4294967295+1) = 4294967296
- - 64 bits: (18446744073709551615+1)-correction1 = 18446744069414584320</PRE>
-<PRE>
+ - 64 bits: (18446744073709551615+1)-correction1 = 18446744069414584320</pre>
+<pre>
Before: 4294967200
Increase: 100
Should become: 4294967300
But really is: 4
Delta: -4294967196
- Correction1: -4294967196 +4294967296 = 100</PRE>
-<PRE>
+ Correction1: -4294967196 +4294967296 = 100</pre>
+<pre>
Before: 18446744073709551000
Increase: 800
Should become: 18446744073709551800
But really is: 184
Delta: -18446744073709550816
Correction1: -18446744073709550816 +4294967296 = -18446744069414583520
- Correction2: -18446744069414583520 +18446744069414584320 = 800</PRE>
-<PRE>
+ Correction2: -18446744069414583520 +18446744069414584320 = 800</pre>
+<pre>
Before: 18446744073709551615 ( maximum value )
Increase: 18446744069414584320 ( absurd increase, minimum for
Should become: 36893488143124135935 this example to work )
But really is: 18446744069414584319
Delta: -4294967296
Correction1: -4294967296 + 4294967296 = 0
- (not negative -> no correction2)</PRE>
-<PRE>
+ (not negative -> no correction2)</pre>
+<pre>
Before: 18446744073709551615 ( maximum value )
Increase: 18446744069414584319 ( one less increase )
Should become: 36893488143124135934
But really is: 18446744069414584318
Delta: -4294967297
Correction1: -4294967297 +4294967296 = -1
- Correction2: -1 +18446744069414584320 = 18446744069414584319</PRE>
-<P>As you can see from the last two examples, you need strange numbers
+ Correction2: -1 +18446744069414584320 = 18446744069414584319</pre>
+<p>As you can see from the last two examples, you need strange numbers
for RRDtool to fail (provided it's bug free of course) so this should
not happen. However, SNMP or whatever method you choose to collect the
data might also report wrong numbers occasionally. We can't prevent all
@@ -931,15 +954,16 @@
expect numbers to be higher than 230. Anything else, and there must have
been an error. Remember: the opposite is not true, if the numbers pass
this check it doesn't mean that they are correct. Always judge the
-graph with a healthy dose of paranoia if it looks weird.</P>
-<P>
-<H2><A NAME="data resampling">Data Resampling</A></H2>
-<P>One important feature of RRDtool has not been explained yet:
+graph with a healthy dose of paranoia if it looks weird.</p>
+<p>
+</p>
+<h2><a name="data_resampling">Data Resampling</a></h2>
+<p>One important feature of RRDtool has not been explained yet:
It is virtually impossible to collect the data and feed it into RRDtool
on exact intervals. RRDtool therefore interpolates the data so it is on
exact intervals. If you do not know what this means or how it works,
-then here's the help you seek:</P>
-<P>Suppose a counter increases with exactly one for every second. You want
+then here's the help you seek:</p>
+<p>Suppose a counter increases with exactly one for every second. You want
to measure it in 300 seconds intervals. You should retrieve values
that are exactly 300 apart. However, due to various circumstances you
are a few seconds late and the interval is 303. The delta will also be
@@ -949,31 +973,31 @@
would have been stored earlier and it will be 300 in 300 seconds.
Next time you are at exactly the right time. This means that the current
interval is 297 seconds and also the counter increased with 297. Again
-RRDtool alters the value and stores 300 as it should be.</P>
-<PRE>
- in the RDD in reality</PRE>
-<PRE>
+RRDtool alters the value and stores 300 as it should be.</p>
+<pre>
+ in the RDD in reality</pre>
+<pre>
time+000: 0 delta="U" time+000: 0 delta="U"
time+300: 300 delta=300 time+300: 300 delta=300
time+600: 600 delta=300 time+603: 603 delta=303
- time+900: 900 delta=300 time+900: 900 delta=297</PRE>
-<P>Let's create two identical databases. I've chosen the time range 920805000
-to 920805900 as this goes very well with the example numbers.</P>
-<PRE>
+ time+900: 900 delta=300 time+900: 900 delta=297</pre>
+<p>Let's create two identical databases. I've chosen the time range 920805000
+to 920805900 as this goes very well with the example numbers.</p>
+<pre>
rrdtool create seconds1.rrd \
--start 920804700 \
DS:seconds:COUNTER:600:U:U \
- RRA:AVERAGE:0.5:1:24</PRE>
-<PRE>
+ RRA:AVERAGE:0.5:1:24</pre>
+<pre>
for Unix: cp seconds1.rrd seconds2.rrd
for Dos: copy seconds1.rrd seconds2.rrd
- for vms: how would I know :)</PRE>
-<PRE>
+ for vms: how would I know :)</pre>
+<pre>
rrdtool update seconds1.rrd \
920805000:000 920805300:300 920805600:600 920805900:900
rrdtool update seconds2.rrd \
- 920805000:000 920805300:300 920805603:603 920805900:900</PRE>
-<PRE>
+ 920805000:000 920805300:300 920805603:603 920805900:900</pre>
+<pre>
rrdtool graph seconds1.gif \
--start 920804700 --end 920806200 \
--height 200 \
@@ -989,21 +1013,23 @@
DEF:seconds=seconds2.rrd:seconds:AVERAGE \
CDEF:unknown=seconds,UN \
LINE2:seconds#0000FF \
- AREA:unknown#FF0000</PRE>
-<P>Both graphs should show the same.</P>
-<P>
-<HR>
-<H1><A NAME="wrapup">WRAPUP</A></H1>
-<P>It's time to wrap up this document. You now know all the basics to be
+ AREA:unknown#FF0000</pre>
+<p>Both graphs should show the same.</p>
+<p>
+</p>
+<hr />
+<h1><a name="wrapup">WRAPUP</a></h1>
+<p>It's time to wrap up this document. You now know all the basics to be
able to work with RRDtool and to read the documentation available.
There is plenty more to discover about RRDtool and you will find more and
more uses for the package. You could create easy graphics using just the
examples provided and using only RRDtool. You could also use the front
-ends that are available.</P>
-<P>
-<HR>
-<H1><A NAME="mailinglist">MAILINGLIST</A></H1>
-<P>Remember to subscribe to the mailing-list. Even if you are not answering
+ends that are available.</p>
+<p>
+</p>
+<hr />
+<h1><a name="mailinglist">MAILINGLIST</a></h1>
+<p>Remember to subscribe to the mailing-list. Even if you are not answering
the mails that come by, it helps both you and the rest. A lot of the stuff
that I know about MRTG (and therefore about RRDtool) I've learned while
just reading the list without posting to it. I did not need to ask the
@@ -1011,21 +1037,23 @@
in various mails by other users.
With thousands of users all over the world, there will always be people
who ask questions that you can answer because you read this and other
-documentation and they didn't.</P>
-<P>
-<HR>
-<H1><A NAME="see also">SEE ALSO</A></H1>
-<P>The RRDtool manpages</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>I hope you enjoyed the examples and their descriptions. If you do, help
+documentation and they didn't.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>The RRDtool manpages</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>I hope you enjoyed the examples and their descriptions. If you do, help
other people by pointing them to this document when they are asking
basic questions. They will not only get their answer but at the same
-time learn a whole lot more.</P>
-<P>Alex van den Bogaerdt
-<<A HREF="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</A>></P>
+time learn a whole lot more.</p>
+<p>Alex van den Bogaerdt
+<<a href="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdlast.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdlast.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdlast.html 2003-02-20 15:24:01.000000000 -0800
@@ -1,47 +1,54 @@
-<HTML>
-<HEAD>
-<TITLE>rrdlast</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdlast</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool last - Return the date of the last data sample in an <STRONG>RRD</STRONG></P>
-<div align="right"><a href="rrdlast.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>last</STRONG> <EM>filename</EM></P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>last</STRONG> function returns the UNIX timestamp when the RRD was last
-updated.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename"><EM>filename</EM></A></STRONG><BR>
-<DD>
-The name of the <STRONG>RRD</STRONG> that contains the data.
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Russ Wright <<A HREF="mailto:rwwright at home.com">rwwright at home.com</A>></P>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool last - Return the date of the last data sample in an <strong>RRD</strong></p>
+<div align="right"><a href="rrdlast.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>last</strong> <em>filename</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>last</strong> function returns the UNIX timestamp when the RRD was last
+updated.</p>
+<dl>
+<dt><strong><a name="item_filename"><em>filename</em></a></strong><br />
+</dt>
+<dd>
+The name of the <strong>RRD</strong> that contains the data.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Russ Wright <<a href="mailto:rwwright at home.com">rwwright at home.com</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdfetch.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdfetch.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdfetch.txt 2003-02-20 15:24:01.000000000 -0800
@@ -2,37 +2,37 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool fetch - fetch data from an rrd.
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll ffffeeeettttcccchhhh _f_i_l_e_n_a_m_e _C_F [--------rrrreeeessssoooolllluuuuttttiiiioooonnnn|----rrrr _r_e_s_o_l_u_t_i_o_n]
- [--------ssssttttaaaarrrrtttt|----ssss _s_t_a_r_t] [--------eeeennnndddd|----eeee _e_n_d]
-
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The ffffeeeettttcccchhhh function is normally used internally by the
- graph function, to get data from RRRRRRRRDDDDs. ffffeeeettttcccchhhh will analyze
- the RRRRRRRRDDDD and will try to retrieve the data in the resolu-
+SSYYNNOOPPSSIISS
+ rrrrddttooooll ffeettcchh _f_i_l_e_n_a_m_e _C_F [----rreessoolluuttiioonn|--rr _r_e_s_o_l_u_t_i_o_n]
+ [----ssttaarrtt|--ss _s_t_a_r_t] [----eenndd|--ee _e_n_d]
+
+DDEESSCCRRIIPPTTIIOONN
+ The ffeettcchh function is normally used internally by the
+ graph function, to get data from RRRRDDs. ffeettcchh will analyze
+ the RRRRDD and will try to retrieve the data in the resolu-
tion requested. The data fetched is printed to stdout.
_*_U_N_K_N_O_W_N_* data is often represented by the string "NaN"
depending on your OSs printf function.
_f_i_l_e_n_a_m_e
- the name of the RRRRRRRRDDDD you want to fetch the data
+ the name of the RRRRDD you want to fetch the data
from.
_C_F which consolidation function should have been
applied to the data you want to fetch? (AVER-
AGE,MIN,MAX,LAST)
- --------rrrreeeessssoooolllluuuuttttiiiioooonnnn|----rrrr _r_e_s_o_l_u_t_i_o_n (default is the highest resolu-
+ ----rreessoolluuttiioonn|--rr _r_e_s_o_l_u_t_i_o_n (default is the highest resolu-
tion)
what interval should the values have (seconds per
- value). rrrrrrrrddddffffeeeettttcccchhhh will try to match your request,
+ value). rrrrddffeettcchh will try to match your request,
but it will return data even if no absolute match
- is possible. NNNNBBBB.... See note below.
+ is possible. NNBB.. See note below.
- --------ssssttttaaaarrrrtttt|----ssss _s_t_a_r_t (default end-1day)
+ ----ssttaarrtt|--ss _s_t_a_r_t (default end-1day)
when should the data begin. A time in seconds
since epoch (1970-01-01) is required. Negative
numbers are relative to the current time. By
@@ -41,16 +41,16 @@
detailed explanation on ways to specify start
time.
- --------eeeennnndddd|----eeee _e_n_d (default now)
+ ----eenndd|--ee _e_n_d (default now)
when should the data end. Time in seconds since
epoch. See also AT-STYLE TIME SPECIFICATION sec-
tion for a detailed explanation of how to specify
end time.
- RRRREEEESSSSOOOOLLLLUUUUTTTTIIIIOOOONNNN IIIINNNNTTTTEEEERRRRVVVVAAAALLLL
+ RREESSOOLLUUTTIIOONN IINNTTEERRVVAALL
In order to get rrdtool to fetch anything other than the
- finest resolution RRA bbbbooootttthhhh the start and end time must be
+ finest resolution RRA bbootthh the start and end time must be
specified on boundaries that are multiples of the wanted
resolution. Consider the following example:
@@ -72,7 +72,7 @@
rrdtool fetch subdata.rrd AVERAGE -r 900 -s -1h
However, this will almost always result in a time series
- that is NNNNOOOOTTTT in the 15 minute RRA. Therefore the highest
+ that is NNOOTT in the 15 minute RRA. Therefore the highest
resolution RRA, i.e. 5 minute averages, will be chosen
which, in this case, is not what you want.
@@ -97,39 +97,38 @@
perl -e '$ctime = time; $rrdres = 900; system "rrdtool fetch subdata.rrd AVERAGE \
-r $rrdres -e @{[int($ctime/$rrdres)*$rrdres]} -s e-1h"'
-
- AAAATTTT----SSSSTTTTYYYYLLLLEEEE TTTTIIIIMMMMEEEE SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
+ AATT--SSTTYYLLEE TTIIMMEE SSPPEECCIIFFIICCAATTIIOONN
Apart from the traditional _S_e_c_o_n_d_s _s_i_n_c_e _e_p_o_c_h, rrdtool
does also understand at-style time specification. The
specification is called "at-style" after Unix command
_a_t(1) that has moderately complex ways to specify time to
run your job at. The at-style specification consists of
- two parts: TTTTIIIIMMMMEEEE RRRREEEEFFFFEEEERRRREEEENNNNCCCCEEEE specification and TTTTIIIIMMMMEEEE OOOOFFFFFFFFSSSSEEEETTTT
+ two parts: TTIIMMEE RREEFFEERREENNCCEE specification and TTIIMMEE OOFFFFSSEETT
specification.
- TTTTIIIIMMMMEEEE RRRREEEEFFFFEEEERRRREEEENNNNCCCCEEEE SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
+ TTIIMMEE RREEFFEERREENNCCEE SSPPEECCIIFFIICCAATTIIOONN
Time reference specification is used, well,... to estab-
lish a reference moment in time (for time offset to be
applied to). When present, it should come first, when
- omitted, it defaults to nnnnoooowwww. On its own part, time refer-
+ omitted, it defaults to nnooww. On its own part, time refer-
ence consists of _t_i_m_e_-_o_f_-_d_a_y reference (which should come
first, if present) and _d_a_y reference.
- _T_i_m_e_-_o_f_-_d_a_y can be specified as HHHHHHHH::::MMMMMMMM, HHHHHHHH....MMMMMMMM, or just HHHHHHHH,
- you can suffix it with aaaammmm or ppppmmmm or use 24-hours clock. The
+ _T_i_m_e_-_o_f_-_d_a_y can be specified as HHHH::MMMM, HHHH..MMMM, or just HHHH,
+ you can suffix it with aamm or ppmm or use 24-hours clock. The
few special times of day are understood as well, these
- include mmmmiiiiddddnnnniiiigggghhhhtttt (00:00), nnnnoooooooonnnn (12:00) and British tttteeeeaaaattttiiiimmmmeeee
+ include mmiiddnniigghhtt (00:00), nnoooonn (12:00) and British tteeaattiimmee
(16:00).
The _d_a_y can be specified as _m_o_n_t_h_-_n_a_m_e _d_a_y_-_o_f_-_t_h_e_-_m_o_n_t_h
and optional 2- or 4-digit _y_e_a_r number (e.g. March 8
1999). Alternatively, you can use _d_a_y_-_o_f_-_w_e_e_k_-_n_a_m_e (e.g.
- Monday), or one of the words: yyyyeeeesssstttteeeerrrrddddaaaayyyy, ttttooooddddaaaayyyy, ttttoooommmmoooorrrrrrrroooowwww.
+ Monday), or one of the words: yyeesstteerrddaayy, ttooddaayy, ttoommoorrrrooww.
You can also specify _d_a_y as a full date in several numeri-
- cal formats; these include: MMMMMMMM////DDDDDDDD////[[[[YYYYYYYY]]]]YYYYYYYY, DDDDDDDD....MMMMMMMM....[[[[YYYYYYYY]]]]YYYYYYYY,
- YYYYYYYYYYYYYYYYMMMMMMMMDDDDDDDD.
+ cal formats; these include: MMMM//DDDD//[[YYYY]]YYYY, DDDD..MMMM..[[YYYY]]YYYY,
+ YYYYYYYYMMMMDDDD.
_N_O_T_E_1: this is different from the original _a_t(1) behavior,
which interprets a single-number date as MMDD[YY]YY.
@@ -137,24 +136,24 @@
_N_O_T_E_2: if you specify _d_a_y this way, the _t_i_m_e_-_o_f_-_d_a_y is
REQUIRED to be present.
- Finally, you can use words nnnnoooowwww, ssssttttaaaarrrrtttt, or eeeennnndddd as your time
- reference. NNNNoooowwww refers to the current moment (and is also a
- default time reference). SSSSttttaaaarrrrtttt (eeeennnndddd) can be used to spec-
+ Finally, you can use words nnooww, ssttaarrtt, or eenndd as your time
+ reference. NNooww refers to the current moment (and is also a
+ default time reference). SSttaarrtt (eenndd) can be used to spec-
ify time relative to the start (end) time for those tools
that use these categories (rrdfetch, rrdgraph).
Month and weekday names can be used in their naturally
abbreviated form (e.g., Dec for December, Sun for Sunday,
- etc.). The words nnnnoooowwww, ssssttttaaaarrrrtttt, eeeennnndddd can be abbreviated to nnnn,
- ssss, eeee.
+ etc.). The words nnooww, ssttaarrtt, eenndd can be abbreviated to nn,
+ ss, ee.
- TTTTIIIIMMMMEEEE OOOOFFFFFFFFSSSSEEEETTTT SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
+ TTIIMMEE OOFFFFSSEETT SSPPEECCIIFFIICCAATTIIOONN
Time offset specification is used to add (or subtract)
certain time interval to (from) the time reference moment.
- It consists of _s_i_g_n (++++ or ----) and _a_m_o_u_n_t. The following
- time units can be used to specify the _a_m_o_u_n_t: yyyyeeeeaaaarrrrssss,
- mmmmoooonnnntttthhhhssss, wwwweeeeeeeekkkkssss, ddddaaaayyyyssss, hhhhoooouuuurrrrssss, mmmmiiiinnnnuuuutttteeeessss, sssseeeeccccoooonnnnddddssss, these can be
+ It consists of _s_i_g_n (++ or --) and _a_m_o_u_n_t. The following
+ time units can be used to specify the _a_m_o_u_n_t: yyeeaarrss,
+ mmoonntthhss, wweeeekkss, ddaayyss, hhoouurrss, mmiinnuutteess, sseeccoonnddss, these can be
used in singular or plural form, and abbreviated naturally
or to a single letter (e.g. +3days, -1wk, -3y). Several
time units can be combined together (e.g., -5mon1w2d), as
@@ -190,21 +189,21 @@
'8:00 Mar 27 1999 +48 hours' = '9:00 Mar 29 1999', as
expected)
- _N_O_T_E_4: The single-letter abbreviation for both mmmmoooonnnntttthhhhssss and
- mmmmiiiinnnnuuuutttteeeessss is mmmm. To disambiguate, the parser tries to read
+ _N_O_T_E_4: The single-letter abbreviation for both mmoonntthhss and
+ mmiinnuutteess is mm. To disambiguate, the parser tries to read
your mind :) by applying the following two heuristics:
- 1 If mmmm is used in context of (i.e. right after the)
+ 1 If mm is used in context of (i.e. right after the)
years, months, weeks, or days it is assumed to mean
- mmmmoooonnnntttthhhhssss, while in the context of hours, minutes, and
- seconds it means minutes. (e.g., in -1y6m or +3w1m mmmm
- means mmmmoooonnnntttthhhhssss, while in -3h20m or +5s2m mmmm means mmmmiiiinnnnuuuutttteeeessss)
+ mmoonntthhss, while in the context of hours, minutes, and
+ seconds it means minutes. (e.g., in -1y6m or +3w1m mm
+ means mmoonntthhss, while in -3h20m or +5s2m mm means mmiinnuutteess)
- 2 Out of context (i.e. right after the ++++ or ---- sign) the
- meaning of mmmm is guessed from the number it directly
+ 2 Out of context (i.e. right after the ++ or -- sign) the
+ meaning of mm is guessed from the number it directly
follows. Currently, if the number absolute value is
- below 25 it is assumed that mmmm means mmmmoooonnnntttthhhhssss, otherwise
- it is treated as mmmmiiiinnnnuuuutttteeeessss. (e.g., -25m == -25 minutes,
+ below 25 it is assumed that mm means mmoonntthhss, otherwise
+ it is treated as mmiinnuutteess. (e.g., -25m == -25 minutes,
while +24m == +24 months)
_F_i_n_a_l _N_O_T_E_S: Time specification is case-insensitive.
@@ -216,7 +215,7 @@
which also count as whitespace (e.g., midnight_Thu or mid-
night,Thu)
- TTTTIIIIMMMMEEEE SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS
+ TTIIMMEE SSPPEECCIIFFIICCAATTIIOONN EEXXAAMMPPLLEESS
_O_c_t _1_2 -- October 12 this year
@@ -245,9 +244,9 @@
_1_9_9_7_0_7_0_3 _1_2_:_4_5 -- 12:45 July 3th, 1997 (not quote stan-
dard, but I love this ...)
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-07-31 1.0.40 RRDFETCH(1)
+1.0.41 2002-07-31 RRDFETCH(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrddump.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrddump.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrddump.html 2003-02-20 15:24:01.000000000 -0800
@@ -1,50 +1,57 @@
-<HTML>
-<HEAD>
-<TITLE>rrddump</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrddump</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool dump - dump the contents of an <STRONG>RRD</STRONG> to XML format</P>
-<div align="right"><a href="rrddump.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>dump</STRONG> <EM>filename.rrd</EM> > <EM>filename.xml</EM></P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>dump</STRONG> function prints the contents of an <STRONG>RRD</STRONG> in human
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool dump - dump the contents of an <strong>RRD</strong> to XML format</p>
+<div align="right"><a href="rrddump.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>dump</strong> <em>filename.rrd</em> > <em>filename.xml</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>dump</strong> function prints the contents of an <strong>RRD</strong> in human
readable (?) XML format. This format can be read by rrdrestore.
Together they allow you to transfer your files from one architecture
-to another as well as manipulating the contents of an <STRONG>RRD</STRONG> file in a
-somewhat more convenient manner.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename%2Errd"><EM>filename.rrd</EM></A></STRONG><BR>
-<DD>
-The name of the <STRONG>RRD</STRONG> you want to dump.
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+to another as well as manipulating the contents of an <strong>RRD</strong> file in a
+somewhat more convenient manner.</p>
+<dl>
+<dt><strong><a name="item_filename%2errd"><em>filename.rrd</em></a></strong><br />
+</dt>
+<dd>
+The name of the <strong>RRD</strong> you want to dump.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdinfo.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdinfo.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdinfo.txt 2003-02-20 15:24:02.000000000 -0800
@@ -2,24 +2,24 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool info - extract header information from an rrd
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll iiiinnnnffffoooo _f_i_l_e_n_a_m_e_._r_r_d
+SSYYNNOOPPSSIISS
+ rrrrddttooooll iinnffoo _f_i_l_e_n_a_m_e_._r_r_d
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The iiiinnnnffffoooo function prints the header information from an
+DDEESSCCRRIIPPTTIIOONN
+ The iinnffoo function prints the header information from an
rrd in a parsing friendly format.
- Check the rrdcreate manpage if you are uncertain about the
- meaning of the individual keys.
+ Check rrdcreate if you are uncertain about the meaning of
+ the individual keys.
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE
- This is the output generated by running iiiinnnnffffoooo on a simple
+EEXXAAMMPPLLEE
+ This is the output generated by running iinnffoo on a simple
rrd which contains two datasources and one rra. Note that
the number after the _l_a_s_t___u_p_d_a_t_e keyword is in seconds
- since 1970. The string NNNNaaaaNNNN stands for _*_U_N_K_N_O_W_N_* data. In
+ since 1970. The string NNaaNN stands for _*_U_N_K_N_O_W_N_* data. In
the example it means that this rrd has neither minimum not
maximum values defined for either of its datasources.
@@ -48,13 +48,12 @@
rra[0].cdp_prep[1].value = nan
rra[0].cdp_prep[1].unknown_datapoints = 0
-
_f_i_l_e_n_a_m_e_._r_r_d
- The name of the RRRRRRRRDDDD you want to dump.
+ The name of the RRRRDD you want to dump.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-02-26 1.0.40 RRDINFO(1)
+1.0.41 2002-02-26 RRDINFO(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/RRDp.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/RRDp.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/RRDp.txt 2003-02-20 15:24:02.000000000 -0800
@@ -2,50 +2,50 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
RRDp - Attach rrdtool from within a perl script via a set
of pipes;
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- use RRRRRRRRDDDDpppp
+SSYYNNOOPPSSIISS
+ use RRRRDDpp
- RRRRRRRRDDDDpppp::::::::ssssttttaaaarrrrtttt _p_a_t_h _t_o _r_r_d_t_o_o_l _e_x_e_c_u_t_a_b_l_e
+ RRRRDDpp::::ssttaarrtt _p_a_t_h _t_o _r_r_d_t_o_o_l _e_x_e_c_u_t_a_b_l_e
- RRRRRRRRDDDDpppp::::::::ccccmmmmdddd _r_r_d_t_o_o_l _c_o_m_m_a_n_d_l_i_n_e
+ RRRRDDpp::::ccmmdd _r_r_d_t_o_o_l _c_o_m_m_a_n_d_l_i_n_e
- $answer = RRRRRRRRDDDD::::::::rrrreeeeaaaadddd
+ $answer = RRRRDD::::rreeaadd
- $status = RRRRRRRRDDDD::::::::eeeennnndddd
+ $status = RRRRDD::::eenndd
- $$$$RRRRRRRRDDDDpppp::::::::uuuusssseeeerrrr, $$$$RRRRRRRRDDDDpppp::::::::ssssyyyyssss, $$$$RRRRRRRRDDDDpppp::::::::rrrreeeeaaaallll
+ $$RRRRDDpp::::uusseerr, $$RRRRDDpp::::ssyyss, $$RRRRDDpp::::rreeaall
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
+DDEESSCCRRIIPPTTIIOONN
With this module you can safely communicate with the rrd-
tool.
- After every RRRRRRRRDDDDpppp::::::::ccccmmmmdddd you have to issue an RRRRRRRRDDDDpppp::::::::rrrreeeeaaaadddd com-
- mand to get rrrrrrrrddddttttoooooooolllls answer to your command. The answer is
+ After every RRRRDDpp::::ccmmdd you have to issue an RRRRDDpp::::rreeaadd com-
+ mand to get rrrrddttoooolls answer to your command. The answer is
returned as a pointer, in order to speed things up. If the
- last command did not return any data, RRRRRRRRDDDDpppp::::::::rrrreeeeaaaadddd will
+ last command did not return any data, RRRRDDpp::::rreeaadd will
return an undefined variable.
If you import the PERFORMANCE variables into your names-
pace, you can access rrdtools internal performance mea-
surements.
- use RRRRRRRRDDDDpppp
+ use RRRRDDpp
Load the RRDp::pipe module.
- RRRRRRRRDDDDpppp::::::::ssssttttaaaarrrrtttt _p_a_t_h _t_o _r_r_d_t_o_o_l _e_x_e_c_u_t_a_b_l_e
+ RRRRDDpp::::ssttaarrtt _p_a_t_h _t_o _r_r_d_t_o_o_l _e_x_e_c_u_t_a_b_l_e
start rrdtool. The argument must be the path to
the rrdtool executable
- RRRRRRRRDDDDpppp::::::::ccccmmmmdddd _r_r_d_t_o_o_l _c_o_m_m_a_n_d_l_i_n_e
+ RRRRDDpp::::ccmmdd _r_r_d_t_o_o_l _c_o_m_m_a_n_d_l_i_n_e
pass commands on to rrdtool. check the rrdtool
documentation for more info on the rrdtool com-
mands.
- $answer = RRRRRRRRDDDDpppp::::::::rrrreeeeaaaadddd
+ $answer = RRRRDDpp::::rreeaadd
read rrdtools response to your command. Note that
the $answer variable will only contain a pointer
to the returned data. The reason for this is, that
@@ -55,10 +55,10 @@
contents of $answer you have to use $$answer which
dereferences the variable.
- $status = RRRRRRRRDDDDpppp::::::::eeeennnndddd
+ $status = RRRRDDpp::::eenndd
terminates rrdtool and returns rrdtools status ...
- $$$$RRRRRRRRDDDDpppp::::::::uuuusssseeeerrrr, $$$$RRRRRRRRDDDDpppp::::::::ssssyyyyssss, $$$$RRRRRRRRDDDDpppp::::::::rrrreeeeaaaallll
+ $$RRRRDDpp::::uusseerr, $$RRRRDDpp::::ssyyss, $$RRRRDDpp::::rreeaall
these variables will contain totals of the user
time, system time and real time as seen by rrd-
tool. User time is the time rrdtool is running,
@@ -70,7 +70,7 @@
the time spent waiting for things like the hard
disk and new input from the perl script.
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE
+EEXXAAMMPPLLEE
use RRDp;
RRDp::start "/usr/local/bin/rrdtool";
RRDp::cmd qw(create demo.rrd --step 100
@@ -80,14 +80,13 @@
print $$answer;
($usertime,$systemtime,$realtime) = ($RRDp::user,$RRDp::sys,$RRDp::real);
-
-SSSSEEEEEEEE AAAALLLLSSSSOOOO
+SSEEEE AALLSSOO
For more information on how to use rrdtool, check the man-
pages.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-10-11 1.0.40 RRDp(3)
+1.0.41 2003-02-19 RRDp(3)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rpntutorial.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rpntutorial.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rpntutorial.html 2003-02-20 15:24:02.000000000 -0800
@@ -1,57 +1,62 @@
-<HTML>
-<HEAD>
-<TITLE>rpntutorial</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rpntutorial</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#reading comparison operators">Reading Comparison Operators</A></LI>
- <LI><A HREF="#reading the if operator">Reading the IF Operator</A></LI>
- <LI><A HREF="#some examples">Some Examples</A></LI>
- <LI><A HREF="#exercises">Exercises</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#reading_comparison_operators">Reading Comparison Operators</a></li>
+ <li><a href="#reading_the_if_operator">Reading the IF Operator</a></li>
+ <li><a href="#some_examples">Some Examples</a></li>
+ <li><a href="#exercises">Exercises</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rpntutorial - Reading RRDTtool RPN Expressions by Steve Rader</P>
-<div align="right"><a href="rpntutorial.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>This tutorial should help you get to grips with rrdtool RPN expressions
-as seen in CDEF arguments of rrdtool graph.</P>
-<P>
-<HR>
-<H1><A NAME="reading comparison operators">Reading Comparison Operators</A></H1>
-<P>The LT, LE, GT, GE and EQ RPN logic operators are not as tricky as
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rpntutorial - Reading RRDTtool RPN Expressions by Steve Rader</p>
+<div align="right"><a href="rpntutorial.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This tutorial should help you get to grips with rrdtool RPN expressions
+as seen in CDEF arguments of rrdtool graph.</p>
+<p>
+</p>
+<hr />
+<h1><a name="reading_comparison_operators">Reading Comparison Operators</a></h1>
+<p>The LT, LE, GT, GE and EQ RPN logic operators are not as tricky as
they appear. These operators act on the two values on the stack
preceding them (to the left). Read these two values on the stack
from left to right inserting the operator in the middle. If the
resulting statement is true, the replace the three values from the
stack with ``1''. If the statement if false, replace the three values
-with ``0''.</P>
-<P>For example think about ``2,1,GT''. This RPN expression could be
+with ``0''.</p>
+<p>For example think about ``2,1,GT''. This RPN expression could be
read as ``is two greater than one?'' The answer to that question is
``true''. So the three values should be replaced with ``1''. Thus the
-RPN expression 2,1,GT evaluates to 1.</P>
-<P>Now also consider ``2,1,LE''. This RPN expression could be read as ``is
+RPN expression 2,1,GT evaluates to 1.</p>
+<p>Now also consider ``2,1,LE''. This RPN expression could be read as ``is
two less than or equal to one?''. The natural response is ``no''
-and thus the RPN expression 2,1,LE evaluates to 0.</P>
-<P>
-<HR>
-<H1><A NAME="reading the if operator">Reading the IF Operator</A></H1>
-<P>The IF RPN logic operator can be straightforward also. The key
+and thus the RPN expression 2,1,LE evaluates to 0.</p>
+<p>
+</p>
+<hr />
+<h1><a name="reading_the_if_operator">Reading the IF Operator</a></h1>
+<p>The IF RPN logic operator can be straightforward also. The key
to reading IF operators is to understand that the condition part
of the traditional ``if X than Y else Z'' notation has *already*
been evaluated. So the IF operator acts on only one value on the
@@ -59,137 +64,141 @@
value to the left of the IF corresponds to the true (``Y'') branch.
And the first value to the left of the IF corresponds to the false
(``Z'') branch. Read the RPN expression ``X,Y,Z,IF'' from left to
-right like so: ``if X then Y else Z''.</P>
-<P>For example, consider ``1,10,100,IF''. It looks bizzare to me.
+right like so: ``if X then Y else Z''.</p>
+<p>For example, consider ``1,10,100,IF''. It looks bizzare to me.
But when I read ``if 1 then 10 else 100'' it's crystal clear: 1 is true
so the answer is 10. Note that only zero is false; all other values
are true. ``2,20,200,IF'' (``if 2 then 20 else 200'') evaluates to 20.
-And ``0,1,2,IF'' (``if 0 then 1 else 2) evaluates to 2.</P>
-<P>Notice that none of the above examples really simulate the whole
+And ``0,1,2,IF'' (``if 0 then 1 else 2) evaluates to 2.</p>
+<p>Notice that none of the above examples really simulate the whole
``if X then Y else Z'' statement. This is because computer programmers
read this statement as ``if Some Condition then Y else Z''. So it's
important to be able to read IF operators along with the LT, LE,
-GT, GE and EQ operators.</P>
-<P>
-<HR>
-<H1><A NAME="some examples">Some Examples</A></H1>
-<P>While compound expressions can look overly complex, they can be
+GT, GE and EQ operators.</p>
+<p>
+</p>
+<hr />
+<h1><a name="some_examples">Some Examples</a></h1>
+<p>While compound expressions can look overly complex, they can be
considered elegantly simple. To quickly comprehend RPN expressions,
you must know the the algorithm for evaluating RPN expressions:
iterate searches from the left to the right looking for an operator,
when it's found, apply that operator by popping the operator and some
-number of values (and by definition, not operators) off the stack.</P>
-<P>For example, the stack ``1,2,3,+,+'' gets ``2,3,+'' evaluated (as ``2+3'')
+number of values (and by definition, not operators) off the stack.</p>
+<p>For example, the stack ``1,2,3,+,+'' gets ``2,3,+'' evaluated (as ``2+3'')
during the first iteration which is replaced by 5. This results in
the stack ``1,5,+''. Finally, ``1,5,+'' is evaluated resulting in the
answer 6. For convenience sake, it's useful to write this set of
-operations as:</P>
-<PRE>
+operations as:</p>
+<pre>
1) 1,2,3,+,+ eval is 2,3,+ = 5 result is 1,5,+
2) 1,5,+ eval is 1,5,+ = 6 result is 6
- 3) 6</PRE>
-<P>Let's use that notation to conviently solve some complex RPN expressions
-with multiple logic operators:</P>
-<PRE>
- 1) 20,10,GT,10,20,IF eval is 20,10,GT = 1 result is 1,10,20,IF</PRE>
-<P>read the eval as pop ``20 is greater than 10'' so push 1
-</P>
-<PRE>
-
- 2) 1,10,20,IF eval is 1,10,20,IF = 10 result is 10</PRE>
-<P>read pop ``if 1 then 10 else 20'' so push 10. Only 10 is left so
-10 is the answer.</P>
-<P>Let's read a complex RPN expression that also has the traditional
-multiplication operator:</P>
-<PRE>
+ 3) 6</pre>
+<p>Let's use that notation to conviently solve some complex RPN expressions
+with multiple logic operators:</p>
+<pre>
+ 1) 20,10,GT,10,20,IF eval is 20,10,GT = 1 result is 1,10,20,IF</pre>
+<p>read the eval as pop ``20 is greater than 10'' so push 1
+</p>
+<pre>
+
+ 2) 1,10,20,IF eval is 1,10,20,IF = 10 result is 10</pre>
+<p>read pop ``if 1 then 10 else 20'' so push 10. Only 10 is left so
+10 is the answer.</p>
+<p>Let's read a complex RPN expression that also has the traditional
+multiplication operator:</p>
+<pre>
1) 128,8,*,7000,GT,7000,128,8,*,IF eval 128,8,* result is 1024
2) 1024,7000,GT,7000,128,8,*,IF eval 1024,7000,GT result is 0
3) 0,128,8,*,IF eval 128,8,* result is 1024
- 4) 0,7000,1024,IF result is 1024</PRE>
-<P>Now let's go back to the first example of multiple logic operators
-but replace the value 20 with the variable ``input'':</P>
-<PRE>
- 1) input,10,GT,10,input,IF eval is input,10,GT result is A</PRE>
-<P>Read eval as ``if input > 10 then true'' and replace ``input,10,GT''
+ 4) 0,7000,1024,IF result is 1024</pre>
+<p>Now let's go back to the first example of multiple logic operators
+but replace the value 20 with the variable ``input'':</p>
+<pre>
+ 1) input,10,GT,10,input,IF eval is input,10,GT result is A</pre>
+<p>Read eval as ``if input > 10 then true'' and replace ``input,10,GT''
with ``A:
-</P>
-<PRE>
+</p>
+<pre>
- 2) A,10,input,IF eval is A,10,input,IF</PRE>
-<P>read ``if A then 10 else input''. Now replace A it's verbose
+ 2) A,10,input,IF eval is A,10,input,IF</pre>
+<p>read ``if A then 10 else input''. Now replace A it's verbose
description and--voila!--you have a easily readable description
-of the expression:</P>
-<PRE>
- if input > 10 then 10 else input</PRE>
-<P>Lastly, let's to back the first most complex example and replace
-the value 128 with ``input'':</P>
-<PRE>
- 1) input,8,*,7000,GT,7000,input,8,*,IF eval input,8,* result is A</PRE>
-<P>where A is ``input * 8''</P>
-<PRE>
- 2) A,7000,GT,7000,input,8,*,IF eval is A,7000,GT result is B</PRE>
-<P>where B is ``if ((input * 8) > 7000) then true''</P>
-<PRE>
- 3) B,7000,input,8,*,IF eval is input,8,* result is C</PRE>
-<P>where C is ``input * 8''</P>
-<PRE>
- 4) B,7000,C,IF</PRE>
-<P>At last we have a readable decoding of the complex RPN expression with
-a variable:</P>
-<PRE>
- if ((input * 8) > 7000) then 7000 else (input * 8)</PRE>
-<P>
-<HR>
-<H1><A NAME="exercises">Exercises</A></H1>
-<P>Exercise 1:</P>
-<P>Compute ``3,2,*,1,+ and ''3,2,1,+,*`` by hand. Rewrite them in
-traditional notation. Explain why they have different answers.</P>
-<P>Answer 1:</P>
-<PRE>
+of the expression:</p>
+<pre>
+ if input > 10 then 10 else input</pre>
+<p>Lastly, let's to back the first most complex example and replace
+the value 128 with ``input'':</p>
+<pre>
+ 1) input,8,*,7000,GT,7000,input,8,*,IF eval input,8,* result is A</pre>
+<p>where A is ``input * 8''</p>
+<pre>
+ 2) A,7000,GT,7000,input,8,*,IF eval is A,7000,GT result is B</pre>
+<p>where B is ``if ((input * 8) > 7000) then true''</p>
+<pre>
+ 3) B,7000,input,8,*,IF eval is input,8,* result is C</pre>
+<p>where C is ``input * 8''</p>
+<pre>
+ 4) B,7000,C,IF</pre>
+<p>At last we have a readable decoding of the complex RPN expression with
+a variable:</p>
+<pre>
+ if ((input * 8) > 7000) then 7000 else (input * 8)</pre>
+<p>
+</p>
+<hr />
+<h1><a name="exercises">Exercises</a></h1>
+<p>Exercise 1:</p>
+<p>Compute ``3,2,*,1,+ and ''3,2,1,+,*`` by hand. Rewrite them in
+traditional notation. Explain why they have different answers.</p>
+<p>Answer 1:</p>
+<pre>
3*2+1 = 7 and 3*(2+1) = 9. These expressions have
different answers because the altering of the plus and
- times operators alter the order of their evaluation.</PRE>
-<P>Exercise 2:</P>
-<P>One may be tempted to shorten the expression</P>
-<PRE>
- input,8,*,56000,GT,56000,input,*,8,IF</PRE>
-<P>by removing the redundant use of ``input,8,*'' like so:</P>
-<PRE>
- input,56000,GT,56000,input,IF,8,*</PRE>
-<P>Use tradition notation to show these expressions are not the same.
+ times operators alter the order of their evaluation.</pre>
+<p>Exercise 2:</p>
+<p>One may be tempted to shorten the expression</p>
+<pre>
+ input,8,*,56000,GT,56000,input,*,8,IF</pre>
+<p>by removing the redundant use of ``input,8,*'' like so:</p>
+<pre>
+ input,56000,GT,56000,input,IF,8,*</pre>
+<p>Use tradition notation to show these expressions are not the same.
Write an expression that's equivalent to the first expression but
-uses the LE and DIV operators.</P>
-<P>Answer 2:</P>
-<PRE>
+uses the LE and DIV operators.</p>
+<p>Answer 2:</p>
+<pre>
if (input <= 56000/8 ) { input*8 } else { 56000 }
- input,56000,8,DIV,LT,input,8,*,56000,IF</PRE>
-<P>Exercise 3:</P>
-<P>Briefly explain why traditional mathematic notation requires the
+ input,56000,8,DIV,LT,input,8,*,56000,IF</pre>
+<p>Exercise 3:</p>
+<p>Briefly explain why traditional mathematic notation requires the
use of parentheses. Explain why RPN notation does not require
-the use of parentheses.</P>
-<P>Answer 3:</P>
-<PRE>
+the use of parentheses.</p>
+<p>Answer 3:</p>
+<pre>
Traditional mathematic expressions are evaluated by
doing multiplication and division first, then addition and
subtraction. Perentences are used to force the evaluation of
addition before multiplication (etc). RPN does not require
parentheses because the ordering of objects on the stack
- can force the evaluation of addition before multiplication.</PRE>
-<P>Exercise 4:</P>
-<P>Explain why it is desirable for the RRDtool developers to implement
-RPN notation instead of traditional mathematical notation.</P>
-<P>Answer 4:</P>
-<PRE>
+ can force the evaluation of addition before multiplication.</pre>
+<p>Exercise 4:</p>
+<p>Explain why it is desirable for the RRDtool developers to implement
+RPN notation instead of traditional mathematical notation.</p>
+<p>Answer 4:</p>
+<pre>
The algorithm that implements traditional mathematical
notation is more complex then algorithm used for RPN.
So implementing RPN allowed Tobias Oetiker to write less
code! (The code is also less complex and therefore less
- likely to have bugs.)</PRE>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>steve rader <<A HREF="mailto:rader at wiscnet.net">rader at wiscnet.net</A>></P>
+ likely to have bugs.)</pre>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>steve rader <<a href="mailto:rader at wiscnet.net">rader at wiscnet.net</a>>
+</p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdxport.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdxport.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdxport.html 2003-02-20 15:24:02.000000000 -0800
@@ -1,111 +1,130 @@
-<HTML>
-<HEAD>
-<TITLE>rrdxport</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdxport</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <UL>
-
- <LI><A HREF="#output format">Output format</A></LI>
- </UL>
-
- <LI><A HREF="#example 1">EXAMPLE 1</A></LI>
- <LI><A HREF="#example 2">EXAMPLE 2</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <ul>
+
+ <li><a href="#output_format">Output format</a></li>
+ </ul>
+
+ <li><a href="#example_1">EXAMPLE 1</a></li>
+ <li><a href="#example_2">EXAMPLE 2</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool xport - Export data in XML format based on data from one or several RRD</P>
-<div align="right"><a href="rrdxport.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>xport</STRONG>
-[<STRONG>-s</STRONG>|<STRONG>--start</STRONG> <EM>seconds</EM>]
-[<STRONG>-e</STRONG>|<STRONG>--end</STRONG> <EM>seconds</EM>]
-[<STRONG>-m</STRONG>|<STRONG>--maxrows</STRONG> <EM>rows</EM>]
-[<STRONG>--step</STRONG> <EM>value</EM>]
-[<STRONG>DEF:</STRONG><EM>vname</EM><STRONG>=</STRONG><EM>rrd</EM><STRONG>:</STRONG><EM>ds-name</EM><STRONG>:</STRONG><EM>CF</EM>]
-[<STRONG>CDEF:</STRONG><EM>vname</EM><STRONG>=</STRONG><EM>rpn-expression</EM>]
-[<STRONG>XPORT</STRONG><STRONG>:</STRONG><EM>vname</EM>[<STRONG>:</STRONG><EM>legend</EM>]]</P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>xport</STRONG> functions main purpose is to write XML formatted
-representation of the data stored in one or several <STRONG>RRD</STRONG>s. It
-can also extract numerical reports.</P>
-<P>If no <EM>XPORT</EM> statements are found, there will be no output.</P>
-<DL>
-<DT><STRONG><A NAME="item_seconds"><STRONG>-s</STRONG>|<STRONG>--start</STRONG> <EM>seconds</EM> (default end-1day)</A></STRONG><BR>
-<DD>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool xport - Export data in XML format based on data from one or several RRD</p>
+<div align="right"><a href="rrdxport.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>xport</strong>
+[<strong>-s</strong>|<strong>--start</strong> <em>seconds</em>]
+[<strong>-e</strong>|<strong>--end</strong> <em>seconds</em>]
+[<strong>-m</strong>|<strong>--maxrows</strong> <em>rows</em>]
+[<strong>--step</strong> <em>value</em>]
+[<strong>DEF:</strong><em>vname</em><strong>=</strong><em>rrd</em><strong>:</strong><em>ds-name</em><strong>:</strong><em>CF</em>]
+[<strong>CDEF:</strong><em>vname</em><strong>=</strong><em>rpn-expression</em>]
+[<strong>XPORT</strong><strong>:</strong><em>vname</em>[<strong>:</strong><em>legend</em>]]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>xport</strong> functions main purpose is to write XML formatted
+representation of the data stored in one or several <strong>RRD</strong>s. It
+can also extract numerical reports.</p>
+<p>If no <em>XPORT</em> statements are found, there will be no output.</p>
+<dl>
+<dt><strong><a name="item_seconds"><strong>-s</strong>|<strong>--start</strong> <em>seconds</em> (default end-1day)</a></strong><br />
+</dt>
+<dd>
The time when the exported range should begin. Time in seconds since
epoch (1970-01-01) is required. Negative numbers are relative to the
current time. By default one day worth of data will be printed.
-See also AT-STYLE TIME SPECIFICATION section in the <EM>rrdfetch</EM>
+See also AT-STYLE TIME SPECIFICATION section in the <em>rrdfetch</em>
documentation for a detailed explanation on how to specify time.
-<P></P>
-<DT><STRONG><STRONG>-e</STRONG>|<STRONG>--end</STRONG> <EM>seconds</EM> (default now)</STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><strong>-e</strong>|<strong>--end</strong> <em>seconds</em> (default now)</strong><br />
+</dt>
+<dd>
The time when the exported range should end. Time in seconds since epoch.
-See also AT-STYLE TIME SPECIFICATION section in the <EM>rrdfetch</EM>
+See also AT-STYLE TIME SPECIFICATION section in the <em>rrdfetch</em>
documentation for a detailed explanation of ways to specify time.
-<P></P>
-<DT><STRONG><A NAME="item_rows"><STRONG>-m</STRONG>|<STRONG>--maxrows</STRONG> <EM>rows</EM> (default 400 rows)</A></STRONG><BR>
-<DD>
-This works like the <STRONG>-w</STRONG>|<STRONG>--width</STRONG> parameter of <EM>rrdgraph</EM>.
+</dd>
+<p></p>
+<dt><strong><a name="item_rows"><strong>-m</strong>|<strong>--maxrows</strong> <em>rows</em> (default 400 rows)</a></strong><br />
+</dt>
+<dd>
+This works like the <strong>-w</strong>|<strong>--width</strong> parameter of <em>rrdgraph</em>.
In fact it is exactly the same, but the parameter was renamed to
-describe its purpose in this module. See <EM>rrdgraph</EM> documentation
+describe its purpose in this module. See <em>rrdgraph</em> documentation
for details.
-<P></P>
-<DT><STRONG><A NAME="item_value"><STRONG>--step</STRONG> <EM>value</EM> (default automatic)</A></STRONG><BR>
-<DD>
-See <EM>rrdgraph</EM> documentation.
-<P></P>
-<DT><STRONG><A NAME="item_DEF%3Avname%3Drrd%3Ads%2Dname%3ACF"><STRONG>DEF:</STRONG><EM>vname</EM><STRONG>=</STRONG><EM>rrd</EM><STRONG>:</STRONG><EM>ds-name</EM><STRONG>:</STRONG><EM>CF</EM></A></STRONG><BR>
-<DD>
-See <EM>rrdgraph</EM> documentation.
-<P></P>
-<DT><STRONG><A NAME="item_CDEF%3Avname%3Drpn%2Dexpression"><STRONG>CDEF:</STRONG><EM>vname</EM><STRONG>=</STRONG><EM>rpn-expression</EM></A></STRONG><BR>
-<DD>
-See <EM>rrdgraph</EM> documentation.
-<P></P>
-<DT><STRONG><A NAME="item_XPORT%3Avname%3A%3Alegend"><STRONG>XPORT:</STRONG><EM>vname</EM><STRONG>:</STRONG><STRONG>:</STRONG><EM>legend</EM></A></STRONG><BR>
-<DD>
-At least one <EM>XPORT</EM> statement should be present. The values
-referenced by <EM>vname</EM> are printed. Optionally add a legend.
-<P></P></DL>
-<P>
-<H2><A NAME="output format">Output format</A></H2>
-<P>The output is enclosed in a <STRONG>xport</STRONG> element and contains two
-blocks. The first block is enclosed by a <STRONG>meta</STRONG> element and
+</dd>
+<p></p>
+<dt><strong><a name="item_value"><strong>--step</strong> <em>value</em> (default automatic)</a></strong><br />
+</dt>
+<dd>
+See <em>rrdgraph</em> documentation.
+</dd>
+<p></p>
+<dt><strong><a name="item_def%3avname%3drrd%3ads%2dname%3acf"><strong>DEF:</strong><em>vname</em><strong>=</strong><em>rrd</em><strong>:</strong><em>ds-name</em><strong>:</strong><em>CF</em></a></strong><br />
+</dt>
+<dd>
+See <em>rrdgraph</em> documentation.
+</dd>
+<p></p>
+<dt><strong><a name="item_cdef%3avname%3drpn%2dexpression"><strong>CDEF:</strong><em>vname</em><strong>=</strong><em>rpn-expression</em></a></strong><br />
+</dt>
+<dd>
+See <em>rrdgraph</em> documentation.
+</dd>
+<p></p>
+<dt><strong><a name="item_xport%3avname%3a%3alegend"><strong>XPORT:</strong><em>vname</em><strong>:</strong><strong>:</strong><em>legend</em></a></strong><br />
+</dt>
+<dd>
+At least one <em>XPORT</em> statement should be present. The values
+referenced by <em>vname</em> are printed. Optionally add a legend.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<h2><a name="output_format">Output format</a></h2>
+<p>The output is enclosed in a <strong>xport</strong> element and contains two
+blocks. The first block is enclosed by a <strong>meta</strong> element and
contains some meta data. The second block is enclosed by a
-<STRONG>data</STRONG> element and contains the data rows.</P>
-<P>Let's assume that the <EM>xport</EM> command looks like this:</P>
-<PRE>
+<strong>data</strong> element and contains the data rows.</p>
+<p>Let's assume that the <em>xport</em> command looks like this:</p>
+<pre>
rrdtool xport \
--start now-1h --end now \
DEF:xx=host-inout.lo.rrd:output:AVERAGE \
DEF:yy=host-inout.lo.rrd:input:AVERAGE \
CDEF:aa=xx,yy,+,8,* \
XPORT:xx:"out bytes" \
- XPORT:aa:"in and out bits"</PRE>
-<P>The resulting meta data section (the values will depend on the
+ XPORT:aa:"in and out bits"</pre>
+<p>The resulting meta data section (the values will depend on the
RRD characteristics):
-</P>
-<PRE>
+</p>
+<pre>
<meta>
<start>1020611700</start>
@@ -117,11 +136,11 @@
<entry>out bytes</entry>
<entry>in and out bits</entry>
</legend>
- </meta></PRE>
-<PRE>
+ </meta></pre>
+<pre>
-The resulting data section:</PRE>
-<PRE>
+The resulting data section:</pre>
+<pre>
<data>
<row><t>1020611700</t><v>3.4000000000e+00</v><v>5.4400000000e+01</v></row>
<row><t>1020612000</t><v>3.4000000000e+00</v><v>5.4400000000e+01</v></row>
@@ -137,30 +156,35 @@
<row><t>1020615000</t><v>3.4000000000e+00</v><v>5.4400000000e+01</v></row>
<row><t>1020615300</t><v>3.4000000000e+00</v><v>5.4400000000e+01</v></row>
<row><t>1020615600</t><v>NaN</v><v>NaN</v></row>
- </data></PRE>
-<P>
-<HR>
-<H1><A NAME="example 1">EXAMPLE 1</A></H1>
-<PRE>
+ </data></pre>
+<p>
+</p>
+<hr />
+<h1><a name="example_1">EXAMPLE 1</a></h1>
+<pre>
rrdtool xport \
DEF:out=if1-inouts.rrd:outoctets:AVERAGE \
- XPORT:out:"out bytes"</PRE>
-<P>
-<HR>
-<H1><A NAME="example 2">EXAMPLE 2</A></H1>
-<PRE>
+ XPORT:out:"out bytes"</pre>
+<p>
+</p>
+<hr />
+<h1><a name="example_2">EXAMPLE 2</a></h1>
+<pre>
rrdtool xport \
DEF:out1=if1-inouts.rrd:outoctets:AVERAGE \
DEF:out2=if2-inouts.rrd:outoctets:AVERAGE \
CDEF:sum=out1,out2,+ \
XPORT:out1:"if1 out bytes" \
XPORT:out2:"if2 out bytes" \
- XPORT:sum:"output sum"</PRE>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+ XPORT:sum:"output sum"</pre>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>>
-</BODY>
+</p>
-</HTML>
+</body>
+
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdgraph.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.txt 2003-02-20 15:24:02.000000000 -0800
@@ -2,40 +2,42 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool graph - Create a graph based on data from one or
several RRD
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll ggggrrrraaaapppphhhh _f_i_l_e_n_a_m_e [----ssss|--------ssssttttaaaarrrrtttt _s_e_c_o_n_d_s] [----eeee|--------eeeennnndddd _s_e_c_-
- _o_n_d_s] [----xxxx|--------xxxx----ggggrrrriiiidddd _x_-_a_x_i_s _g_r_i_d _a_n_d _l_a_b_e_l] [----yyyy|--------yyyy----ggggrrrriiiidddd _y_-
- _a_x_i_s _g_r_i_d _a_n_d _l_a_b_e_l] [--------aaaalllltttt----yyyy----ggggrrrriiiidddd] [--------aaaalllltttt----yyyy----mmmmrrrrttttgggg] [--------aaaalllltttt----
- aaaauuuuttttoooossssccccaaaalllleeee] [--------aaaalllltttt----aaaauuuuttttoooossssccccaaaalllleeee----mmmmaaaaxxxx] [--------uuuunnnniiiittttssss----eeeexxxxppppoooonnnneeeennnntttt]
- _v_a_l_u_e]> [----vvvv|--------vvvveeeerrrrttttiiiiccccaaaallll----llllaaaabbbbeeeellll _t_e_x_t] [----wwww|--------wwwwiiiiddddtttthhhh _p_i_x_e_l_s]
- [----hhhh|--------hhhheeeeiiiigggghhhhtttt _p_i_x_e_l_s] [----iiii|--------iiiinnnntttteeeerrrrllllaaaacccceeeedddd] [----ffff|--------iiiimmmmggggiiiinnnnffffoooo _f_o_r_-
- _m_a_t_s_t_r_i_n_g] [----aaaa|--------iiiimmmmggggffffoooorrrrmmmmaaaatttt GGGGIIIIFFFF|PPPPNNNNGGGG|GGGGDDDD] [----BBBB|--------bbbbaaaacccckkkk----
- ggggrrrroooouuuunnnndddd _v_a_l_u_e] [----OOOO|--------oooovvvveeeerrrrllllaaaayyyy _v_a_l_u_e] [----UUUU|--------uuuunnnniiiitttt _v_a_l_u_e]
- [----zzzz|--------llllaaaazzzzyyyy] [----oooo|--------llllooooggggaaaarrrriiiitttthhhhmmmmiiiicccc] [----uuuu|--------uuuuppppppppeeeerrrr----lllliiiimmmmiiiitttt _v_a_l_u_e]
- [----llll|--------lllloooowwwweeeerrrr----lllliiiimmmmiiiitttt _v_a_l_u_e] [----gggg|--------nnnnoooo----lllleeeeggggeeeennnndddd] [----rrrr|--------rrrriiiiggggiiiidddd]
- [--------sssstttteeeepppp _v_a_l_u_e] [----bbbb|--------bbbbaaaasssseeee _v_a_l_u_e] [----cccc|--------ccccoooolllloooorrrr _C_O_L_-
- _O_R_T_A_G####_r_r_g_g_b_b] [----tttt|--------ttttiiiittttlllleeee _t_i_t_l_e] [DDDDEEEEFFFF::::_v_n_a_m_e====_r_r_d::::_d_s_-
- _n_a_m_e::::_C_F] [CCCCDDDDEEEEFFFF::::_v_n_a_m_e====_r_p_n_-_e_x_p_r_e_s_s_i_o_n] [PPPPRRRRIIIINNNNTTTT::::_v_n_a_m_e::::_C_F::::_f_o_r_-
- _m_a_t] [GGGGPPPPRRRRIIIINNNNTTTT::::_v_n_a_m_e::::_C_F::::_f_o_r_m_a_t] [CCCCOOOOMMMMMMMMEEEENNNNTTTT::::_t_e_x_t]
- [HHHHRRRRUUUULLLLEEEE::::_v_a_l_u_e####_r_r_g_g_b_b[::::_l_e_g_e_n_d]] [VVVVRRRRUUUULLLLEEEE::::_t_i_m_e####_r_r_g_g_b_b[::::_l_e_g_e_n_d]]
- [LLLLIIIINNNNEEEE{1111|2222|3333}::::_v_n_a_m_e[####_r_r_g_g_b_b[::::_l_e_g_e_n_d]]]
- [AAAARRRREEEEAAAA::::_v_n_a_m_e[####_r_r_g_g_b_b[::::_l_e_g_e_n_d]]] [SSSSTTTTAAAACCCCKKKK::::_v_n_a_m_e[####_r_r_g_g_b_b[::::_l_e_g_-
+SSYYNNOOPPSSIISS
+ rrrrddttooooll ggrraapphh _f_i_l_e_n_a_m_e [--ss|----ssttaarrtt _s_e_c_o_n_d_s] [--ee|----eenndd _s_e_c_-
+ _o_n_d_s] [--xx|----xx--ggrriidd _x_-_a_x_i_s _g_r_i_d _a_n_d _l_a_b_e_l]
+ [--yy|----yy--ggrriidd _y_-_a_x_i_s _g_r_i_d _a_n_d _l_a_b_e_l] [--YY|----aalltt--yy--ggrriidd]
+ [--RR|----aalltt--yy--mmrrttgg] [--AA|----aalltt--aauuttoossccaallee]
+ [--MM|----aalltt--aauuttoossccaallee--mmaaxx] [--NN|----nnoo--mmiinnoorr] [--XX|----uunniittss--eexxppoo--
+ nneenntt] _v_a_l_u_e]> [--vv|----vveerrttiiccaall--llaabbeell _t_e_x_t] [--ww|----wwiiddtthh _p_i_x_-
+ _e_l_s] [--hh|----hheeiigghhtt _p_i_x_e_l_s] [--ii|----iinntteerrllaacceedd]
+ [--ff|----iimmggiinnffoo _f_o_r_m_a_t_s_t_r_i_n_g] [--aa|----iimmggffoorrmmaatt GGIIFF|PPNNGG|GGDD]
+ [--BB|----bbaacckkggrroouunndd _v_a_l_u_e] [--OO|----oovveerrllaayy _v_a_l_u_e]
+ [--UU|----uunniitt _v_a_l_u_e] [--zz|----llaazzyy] [--oo|----llooggaarriitthhmmiicc]
+ [--uu|----uuppppeerr--lliimmiitt _v_a_l_u_e] [--ll|----lloowweerr--lliimmiitt _v_a_l_u_e]
+ [--gg|----nnoo--lleeggeenndd] [--rr|----rriiggiidd] [--SS|----sstteepp _v_a_l_u_e]
+ [--bb|----bbaassee _v_a_l_u_e] [--cc|----ccoolloorr _C_O_L_O_R_T_A_G##_r_r_g_g_b_b]
+ [--tt|----ttiittllee _t_i_t_l_e] [DDEEFF::_v_n_a_m_e==_r_r_d::_d_s_-_n_a_m_e::_C_F]
+ [CCDDEEFF::_v_n_a_m_e==_r_p_n_-_e_x_p_r_e_s_s_i_o_n] [PPRRIINNTT::_v_n_a_m_e::_C_F::_f_o_r_m_a_t]
+ [GGPPRRIINNTT::_v_n_a_m_e::_C_F::_f_o_r_m_a_t] [CCOOMMMMEENNTT::_t_e_x_t]
+ [HHRRUULLEE::_v_a_l_u_e##_r_r_g_g_b_b[::_l_e_g_e_n_d]] [VVRRUULLEE::_t_i_m_e##_r_r_g_g_b_b[::_l_e_g_e_n_d]]
+ [LLIINNEE{11|22|33}::_v_n_a_m_e[##_r_r_g_g_b_b[::_l_e_g_e_n_d]]]
+ [AARREEAA::_v_n_a_m_e[##_r_r_g_g_b_b[::_l_e_g_e_n_d]]] [SSTTAACCKK::_v_n_a_m_e[##_r_r_g_g_b_b[::_l_e_g_-
_e_n_d]]]
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The ggggrrrraaaapppphhhh functions main purpose is to create graphical
- representations of the data stored in one or several RRRRRRRRDDDDs.
+DDEESSCCRRIIPPTTIIOONN
+ The ggrraapphh functions main purpose is to create graphical
+ representations of the data stored in one or several RRRRDDs.
Apart from generating graphs, it can also extract numeri-
cal reports.
_f_i_l_e_n_a_m_e
- The name of the graph to generate. Since rrrrrrrrddddttttoooooooollll out-
+ The name of the graph to generate. Since rrrrddttooooll out-
puts GIFs and PNGs, it's recommended that the filename
- end in either _._g_i_f or _._p_n_g. rrrrrrrrddddttttoooooooollll does not enforce
+ end in either _._g_i_f or _._p_n_g. rrrrddttooooll does not enforce
this, however. If the _f_i_l_e_n_a_m_e is set to '-' the
image file will be written to standard out. All other
output will get suppressed.
@@ -47,7 +49,7 @@
If no graph functions are called, the graph will not
be created.
- ----ssss|--------ssssttttaaaarrrrtttt _s_e_c_o_n_d_s (default end-1day)
+ --ss|----ssttaarrtt _s_e_c_o_n_d_s (default end-1day)
The time when the graph should begin. Time in seconds
since epoch (1970-01-01) is required. Negative numbers
are relative to the current time. By default one day
@@ -55,27 +57,27 @@
SPECIFICATION section in the _r_r_d_f_e_t_c_h documentation
for a detailed explanation on how to specify time.
- ----eeee|--------eeeennnndddd _s_e_c_o_n_d_s (default now)
+ --ee|----eenndd _s_e_c_o_n_d_s (default now)
The time when the graph should end. Time in seconds
since epoch. See also AT-STYLE TIME SPECIFICATION
section in the _r_r_d_f_e_t_c_h documentation for a detailed
explanation of ways to specify time.
- ----xxxx|--------xxxx----ggggrrrriiiidddd _x_-_a_x_i_s _g_r_i_d _a_n_d _l_a_b_e_l (default autoconfigure)
+ --xx|----xx--ggrriidd _x_-_a_x_i_s _g_r_i_d _a_n_d _l_a_b_e_l (default autoconfigure)
The x-axis label is quite complex to configure. So if
you don't have very special needs, you can rely on the
autoconfiguration to get this right.
If you want no x-grid at all, use the magic setting
- nnnnoooonnnneeee.
+ nnoonnee.
The x-axis label and grid can be configured, using the
following format:
- _G_T_M::::_G_S_T::::_M_T_M::::_M_S_T::::_L_T_M:_L_S_T::::_L_P_R::::_L_F_M
+ _G_T_M::_G_S_T::_M_T_M::_M_S_T::_L_T_M:_L_S_T::_L_P_R::_L_F_M
- You have to configure three elements making up the x-
- axis labels and grid. The base grid (_G_?_?), the major
+ You have to configure three elements making up the
+ x-axis labels and grid. The base grid (_G_?_?), the major
grid (_M_?_?) and the labels (_L_?_?). The configuration is
based on the idea that you first specify a well known
amount of time (_?_T_M) and then say how many times it
@@ -86,7 +88,7 @@
(_L_F_M).
The _?_T_M elements must be one of the following key-
- words: SSSSEEEECCCCOOOONNNNDDDD, MMMMIIIINNNNUUUUTTTTEEEE, HHHHOOOOUUUURRRR, DDDDAAAAYYYY, WWWWEEEEEEEEKKKK, MMMMOOOONNNNTTTTHHHH or YYYYEEEEAAAARRRR.
+ words: SSEECCOONNDD, MMIINNUUTTEE, HHOOUURR, DDAAYY, WWEEEEKK, MMOONNTTHH or YYEEAARR.
If you wanted a graph with a base grid every 10 min-
utes and a major one every hour, with labels every
@@ -108,42 +110,45 @@
the locale you prefere prior to calling the graph
function.
- ----yyyy|--------yyyy----ggggrrrriiiidddd _g_r_i_d _s_t_e_p:_l_a_b_e_l _f_a_c_t_o_r (default autoconfigure)
+ --yy|----yy--ggrriidd _g_r_i_d _s_t_e_p:_l_a_b_e_l _f_a_c_t_o_r (default autoconfigure)
Makes vertical grid lines appear at _g_r_i_d _s_t_e_p inter-
val. Every _l_a_b_e_l _f_a_c_t_o_r gridstep, a major grid line is
printed, along with label showing the value of the
grid line.
If you want no y-grid at all set specify the magic
- word nnnnoooonnnneeee.
+ word nnoonnee.
- --------aaaalllltttt----yyyy----ggggrrrriiiidddd
+ --YY|----aalltt--yy--ggrriidd
Place Y grid dynamically based on graph Y range. Algo-
rithm ensures that you always have grid, that there
are enough but not too many grid lines and the grid is
metric. That is grid lines are placed every 1, 2, 5 or
10 units. (contributed by Sasha Mikheev)
- --------aaaalllltttt----yyyy----mmmmrrrrttttgggg
- Y grid placed on graph Y range mimmics mrtg's (rateup-
- generated) graphs. Currently axis is split into 4
- parts, just as rateup does.
+ ----nnoo--mmiinnoorr
+ Turn off the minor grid lines. This is partcularly
+ useful for small graphs which can be cluttered with
+ the minor grid lines. (contributed by Travis Brown)
+
+ --RR|----aalltt--yy--mmrrttgg
+ Y grid placed on graph Y range mimmics mrtg's
+ (rateup-generated) graphs. Currently axis is split
+ into 4 parts, just as rateup does.
-
-
- --------aaaalllltttt----aaaauuuuttttoooossssccccaaaalllleeee
+ --AA|----aalltt--aauuttoossccaallee
Compute Y range based on function absolute minimum
and maximum values. Default algorithm uses predefined
set of ranges. This is good in many cases but it
fails miserably when you need to graph something like
- 260 + 0.001 * _s_i_n(x). Default algorithm will use Y
+ 260 + 0.001 * sin(x). Default algorithm will use Y
range from 250 to 300 and on the graph you will see
almost straight line. With --alt-autoscale Y range
will be from slightly less the 260 - 0.001 to slightly
more then 260 + 0.001 and periodic behavior will be
seen. (contributed by Sasha Mikheev)
- --------aaaalllltttt----aaaauuuuttttoooossssccccaaaalllleeee----mmmmaaaaxxxx
+ --MM|----aalltt--aauuttoossccaallee--mmaaxx
Where --alt-autoscale will modify both the absolute
maximum AND minimum values, this option will only
affect the maximum value. The minimum value, if not
@@ -152,7 +157,7 @@
WAN line uses compression, and thus the throughput may
be higher than the WAN line speed.
- --------uuuunnnniiiittttssss----eeeexxxxppppoooonnnneeeennnntttt _v_a_l_u_e (default autoconfigure)
+ --XX|----uunniittss--eexxppoonneenntt _v_a_l_u_e (default autoconfigure)
This sets the 10**exponent scaling of the y-axis val-
ues. Normally values will be scaled to the appropri-
ate units (k, M, etc.). However you may wish to dis-
@@ -166,19 +171,19 @@
lionths). Use a value of 0 to prevent any scaling of
the y-axis values.
- ----vvvv|--------vvvveeeerrrrttttiiiiccccaaaallll----llllaaaabbbbeeeellll _t_e_x_t
+ --vv|----vveerrttiiccaall--llaabbeell _t_e_x_t
vertical label on the left side of the graph. This is
normally used to specify the units used.
- ----wwww|--------wwwwiiiiddddtttthhhh _p_i_x_e_l_s (default 400 pixel)
+ --ww|----wwiiddtthh _p_i_x_e_l_s (default 400 pixel)
Width of the drawing area within the graph. This
affects the size of the gif.
- ----hhhh|--------hhhheeeeiiiigggghhhhtttt _p_i_x_e_l_s (default 100 pixel)
+ --hh|----hheeiigghhtt _p_i_x_e_l_s (default 100 pixel)
Width of the drawing area within the graph. This
affects the size of the gif.
- ----iiii|--------iiiinnnntttteeeerrrrllllaaaacccceeeedddd (default: false)
+ --ii|----iinntteerrllaacceedd (default: false)
If you set this option, then the resulting GIF will be
interlaced. Most web browsers display these incremen-
tally as they load. If you do not use this option, the
@@ -187,110 +192,109 @@
GIF on disk. It makes no changes to the layout or con-
tents of the graph.
- ----ffff|--------iiiimmmmggggiiiinnnnffffoooo _f_o_r_m_a_t_s_t_r_i_n_g
+ --ff|----iimmggiinnffoo _f_o_r_m_a_t_s_t_r_i_n_g
After the image has been created, the graph function
uses printf together with this format string to create
output similar to the PRINT function, only that the
printf is supplied with the parameters _f_i_l_e_n_a_m_e, _x_s_i_z_e
- and _y_s_i_z_e. In order to generate an IIIIMMMMGGGG tag suitable
+ and _y_s_i_z_e. In order to generate an IIMMGG tag suitable
for including the graph into a web page, the command
line would look like this:
--imginfo '<IMG SRC="/img/%s" WIDTH="%lu" HEIGHT="%lu" ALT="Demo">'
-
- ----aaaa|--------iiiimmmmggggffffoooorrrrmmmmaaaatttt GGGGIIIIFFFF|PPPPNNNNGGGG|GGGGDDDD (default: GIF)
+ --aa|----iimmggffoorrmmaatt GGIIFF|PPNNGG|GGDD (default: GIF)
Allows you to produce PNG or GD output from rrdtool.
- ----BBBB|--------bbbbaaaacccckkkkggggrrrroooouuuunnnndddd _v_a_l_u_e
+ --BB|----bbaacckkggrroouunndd _v_a_l_u_e
You could use image in (currently only) GD format for
background. It is used as background at the very
beginning of graph creation.
- ----OOOO|--------oooovvvveeeerrrrllllaaaayyyy _v_a_l_u_e
+ --OO|----oovveerrllaayy _v_a_l_u_e
You could use image in (currently only) GD format as
overlay. It is placed over created graph so that white
pixel (color 255,255,255) is considered transparent,
all other is replacing corresponding pixel in created
graph.
- ----UUUU|--------uuuunnnniiiitttt _v_a_l_u_e
+ --UU|----uunniitt _v_a_l_u_e
You could use unit to be displayed on y axis. It is
wise to use only short units on graph, however.
- ----zzzz|--------llllaaaazzzzyyyy (default: false)
+ --zz|----llaazzyy (default: false)
Only generate the graph, if the current gif is out of
date or not existent.
- ----uuuu|--------uuuuppppppppeeeerrrr----lllliiiimmmmiiiitttt _v_a_l_u_e (default autoconfigure)
+ --uu|----uuppppeerr--lliimmiitt _v_a_l_u_e (default autoconfigure)
Defines the value normally located at the upper border
of the graph. If the graph contains higher values, the
upper border will move upwards to accomodate these
values as well.
If you want to define an upper-limit which will not
- move in any event you have to set the --------rrrriiiiggggiiiidddd option
+ move in any event you have to set the ----rriiggiidd option
as well.
- ----llll|--------lllloooowwwweeeerrrr----lllliiiimmmmiiiitttt _v_a_l_u_e (default autoconfigure)
+ --ll|----lloowweerr--lliimmiitt _v_a_l_u_e (default autoconfigure)
This is not the lower limit of a graph. But rather,
this is the maximum lower bound of a graph. For exam-
ple, the value -100 will result in a graph that has a
lower limit of -100 or less. Use this keyword to
expand graphs down.
- ----rrrr|--------rrrriiiiggggiiiidddd
+ --rr|----rriiggiidd
rigid boundaries mode. Normally rrdgraph will auto-
matically expand the lower and upper limit if the
graph contains a value outside the valid range. With
the r option you can disable this behavior
- ----bbbb|--------bbbbaaaasssseeee _v_a_l_u_e
+ --bb|----bbaassee _v_a_l_u_e
if you are graphing memory (and NOT network traffic)
this switch should be set to 1024 so that one Kb is
1024 byte. For traffic measurement, 1 kb/s is 1000
b/s.
- ----oooo|--------llllooooggggaaaarrrriiiitttthhhhmmmmiiiicccc
+ --oo|----llooggaarriitthhmmiicc
logarithmic y-axis scaling
- ----cccc|--------ccccoooolllloooorrrr _C_O_L_O_R_T_A_G####_r_r_g_g_b_b (default colors)
+ --cc|----ccoolloorr _C_O_L_O_R_T_A_G##_r_r_g_g_b_b (default colors)
override the colors for the standard elements of the
graph. The _C_O_L_O_R_T_A_G must be one of the following sym-
- bolic names: BBBBAAAACCCCKKKK ground, CCCCAAAANNNNVVVVAAAASSSS, SSSSHHHHAAAADDDDEEEEAAAA left/top bor-
- der, SSSSHHHHAAAADDDDEEEEBBBB right/bottom border, GGGGRRRRIIIIDDDD, MMMMGGGGRRRRIIIIDDDD major
- grid, FFFFOOOONNNNTTTT, FFFFRRRRAAAAMMMMEEEE and axis of the graph or AAAARRRRRRRROOOOWWWW. This
+ bolic names: BBAACCKK ground, CCAANNVVAASS, SSHHAADDEEAA left/top
+ border, SSHHAADDEEBB right/bottom border, GGRRIIDD, MMGGRRIIDD major
+ grid, FFOONNTT, FFRRAAMMEE and axis of the graph or AARRRROOWW. This
option can be called multiple times to set several
colors.
- ----gggg|--------nnnnoooo----lllleeeeggggeeeennnndddd
+ --gg|----nnoo--lleeggeenndd
Suppress generation of legend; only render the graph.
- ----tttt|--------ttttiiiittttlllleeee _t_e_x_t (default no title)
+ --tt|----ttiittllee _t_e_x_t (default no title)
Define a title to be written into the graph
- --------sssstttteeeepppp _v_a_l_u_e (default automatic)
- By default rrdgraph calculates the width of one pixle
+ --SS|----sstteepp _v_a_l_u_e (default automatic)
+ By default rrdgraph calculates the width of one pixel
in the time domain and tries to get data at that reso-
lution from the RRD. With this switch you can override
this behaviour. If you want rrdgraph to get data at 1
hour resolution from the RRD, then you can set the
step to 3600 seconds. Note, that a step smaller than 1
- pixle will be silently ignored.
+ pixel will be silently ignored.
- DDDDEEEEFFFF::::_v_n_a_m_e====_r_r_d::::_d_s_-_n_a_m_e::::_C_F
+ DDEEFF::_v_n_a_m_e==_r_r_d::_d_s_-_n_a_m_e::_C_F
Define virtual name for a data source. This name can
then be used in the functions explained below. The DEF
- call automatically chooses an RRRRRRRRAAAA which contains _C_F
+ call automatically chooses an RRRRAA which contains _C_F
consolidated data in a resolution appropriate for the
size of the graph to be drawn. Ideally this means
- that one data point from the RRRRRRRRAAAA should be represented
+ that one data point from the RRRRAA should be represented
by one pixel in the graph. If the resolution of the
- RRRRRRRRAAAA is higher than the resolution of the graph, the
+ RRRRAA is higher than the resolution of the graph, the
data in the RRA will be further consolidated according
to the consolidation function (_C_F) chosen.
- CCCCDDDDEEEEFFFF::::_v_n_a_m_e====_r_p_n_-_e_x_p_r_e_s_s_i_o_n
+ CCDDEEFF::_v_n_a_m_e==_r_p_n_-_e_x_p_r_e_s_s_i_o_n
Create a new virtual data source by evaluating a math-
ematical expression, specified in Reverse Polish Nota-
tion (RPN). If you have ever used a traditional HP
@@ -317,7 +321,7 @@
one value left on the stack: The result of the expres-
sion.
- The _r_p_n_-_e_x_p_r_e_s_s_i_o_n in the CCCCDDDDEEEEFFFF function takes both,
+ The _r_p_n_-_e_x_p_r_e_s_s_i_o_n in the CCDDEEFF function takes both,
constant values as well as _v_n_a_m_e variables. The fol-
lowing operators can be used on these values:
@@ -327,8 +331,6 @@
the stack. The % operator stands for the modulo
operation.
-
-
SIN, COS, LOG, EXP, FLOOR, CEIL
pops one value from the stack, applies the
selected function and pushes the result back onto
@@ -362,7 +364,6 @@
CDEF:a=alpha,0,100,LIMIT
-
DUP, EXC, POP
These manipulate the stack directly. DUP will
duplicate the top of the stack, pushing the result
@@ -406,8 +407,8 @@
since 0:00:00 January 1, 1970.
LTIME
- This is like TIME ++++ ccccuuuurrrrrrrreeeennnntttt ttttiiiimmmmeeeezzzzoooonnnneeee ooooffffffffsssseeeetttt iiiinnnn
- sssseeeeccccoooonnnnddddssss. The current offset takes daylight saving
+ This is like TIME ++ ccuurrrreenntt ttiimmeezzoonnee ooffffsseett iinn
+ sseeccoonnddss. The current offset takes daylight saving
time into account, given your OS supports this. If
you were looking at a sample, in Zurich, in sum-
mer, the offset would be 2*3600 seconds, as Zurich
@@ -419,17 +420,17 @@
calculation.
Please note that you may only use _v_n_a_m_e variables that
- you previously defined by either DDDDEEEEFFFF or CCCCDDDDEEEEFFFF. Further-
+ you previously defined by either DDEEFF or CCDDEEFF. Further-
more, as of this writing (version 0.99.25), you must
use at least one _v_n_a_m_e per expression, that is
"CDEF:fourtytwo=2,40,+" will yield an error message
but not a _v_n_a_m_e fourtytwo that's always equal to 42.
- PPPPRRRRIIIINNNNTTTT::::_v_n_a_m_e::::_C_F::::_f_o_r_m_a_t
+ PPRRIINNTT::_v_n_a_m_e::_C_F::_f_o_r_m_a_t
Calculate the chosen consolidation function _C_F over
the data-source variable _v_n_a_m_e and "printf" the result
to stdout using _f_o_r_m_a_t. In the _f_o_r_m_a_t string there
- should be a '%lf' or '%le' marker in the place where
+ should be a '%lf'or '%le' marker in the place where
the number should be printed.
If an additional '%s' is found AFTER the marker, the
@@ -453,51 +454,51 @@
If you want to put a '%' into your PRINT string, use
'%%' instead.
- GGGGPPPPRRRRIIIINNNNTTTT::::_v_n_a_m_e::::_C_F::::_f_o_r_m_a_t
- Same as PPPPRRRRIIIINNNNTTTT but the result is printed into the graph
+ GGPPRRIINNTT::_v_n_a_m_e::_C_F::_f_o_r_m_a_t
+ Same as PPRRIINNTT but the result is printed into the graph
below the legend.
- CCCCaaaavvvveeeeaaaatttt:::: When using the PPPPRRRRIIIINNNNTTTT and GGGGRRRRPPPPRRRRIIIINNNNTTTT functions to cal-
+ CCaavveeaatt:: When using the PPRRIINNTT and GGRRPPRRIINNTT functions to cal-
culate data summaries over time periods bounded by the
current time, it is important to note that the last sample
will almost always yield a value of UNKNOWN as it lies
after the last update time. This can result in slight
- data skewing, particularly with the AAAAVVVVEEEERRRRAAAAGGGGEEEE function. In
+ data skewing, particularly with the AAVVEERRAAGGEE function. In
order to avoid this, make sure that your end time is at
least one heartbeat prior to the current time.
- CCCCOOOOMMMMMMMMEEEENNNNTTTT::::_t_e_x_t
- Like GGGGPPPPRRRRIIIINNNNTTTT but the _t_e_x_t is simply printed into the
+ CCOOMMMMEENNTT::_t_e_x_t
+ Like GGPPRRIINNTT but the _t_e_x_t is simply printed into the
graph.
- HHHHRRRRUUUULLLLEEEE::::_v_a_l_u_e####_r_r_g_g_b_b[::::_l_e_g_e_n_d]
+ HHRRUULLEE::_v_a_l_u_e##_r_r_g_g_b_b[::_l_e_g_e_n_d]
Draw a horizontal rule into the graph and optionally
add a legend
- VVVVRRRRUUUULLLLEEEE::::_t_i_m_e####_r_r_g_g_b_b[::::_l_e_g_e_n_d]
+ VVRRUULLEE::_t_i_m_e##_r_r_g_g_b_b[::_l_e_g_e_n_d]
Draw a vertical rule into the graph and optionally add
a legend
- LLLLIIIINNNNEEEE{1111|2222|3333}::::_v_n_a_m_e[####_r_r_g_g_b_b[::::_l_e_g_e_n_d]]
+ LLIINNEE{11|22|33}::_v_n_a_m_e[##_r_r_g_g_b_b[::_l_e_g_e_n_d]]
Plot for the requested data, using the color speci-
fied. Write a legend into the graph. The 3 possible
- keywords LLLLIIIINNNNEEEE1111, LLLLIIIINNNNEEEE2222, and LLLLIIIINNNNEEEE3333 generate increasingly
+ keywords LLIINNEE11, LLIINNEE22, and LLIINNEE33 generate increasingly
wide lines. If no color is defined, the drawing is
done 'blind' this is useful in connection with the
- SSSSTTTTAAAACCCCKKKK function when you want to ADD the values of two
+ SSTTAACCKK function when you want to ADD the values of two
data-sources without showing it in the graph.
- AAAARRRREEEEAAAA:_v_n_a_m_e[####_r_r_g_g_b_b[::::_l_e_g_e_n_d]]
- Does the same as LLLLIIIINNNNEEEE????, but the area between 0 and the
+ AARREEAA:_v_n_a_m_e[##_r_r_g_g_b_b[::_l_e_g_e_n_d]]
+ Does the same as LLIINNEE??, but the area between 0 and the
graph will be filled with the color specified.
- SSSSTTTTAAAACCCCKKKK:_v_n_a_m_e[####_r_r_g_g_b_b[::::_l_e_g_e_n_d]]
- Does the same as LLLLIIIINNNNEEEE????, but the graph gets stacked on
- top of the previous LLLLIIIINNNNEEEE????, AAAARRRREEEEAAAA or SSSSTTTTAAAACCCCKKKK graph.
- Depending on the type of the previous graph, the SSSSTTTTAAAACCCCKKKK
- will be either a LLLLIIIINNNNEEEE???? or an AAAARRRREEEEAAAA. This obviously
- implies that the first SSSSTTTTAAAACCCCKKKK must be preceded by an
- AAAARRRREEEEAAAA or LLLLIIIINNNNEEEE???? -- you need something to stack something
+ SSTTAACCKK:_v_n_a_m_e[##_r_r_g_g_b_b[::_l_e_g_e_n_d]]
+ Does the same as LLIINNEE??, but the graph gets stacked on
+ top of the previous LLIINNEE??, AARREEAA or SSTTAACCKK graph.
+ Depending on the type of the previous graph, the SSTTAACCKK
+ will be either a LLIINNEE?? or an AARREEAA. This obviously
+ implies that the first SSTTAACCKK must be preceded by an
+ AARREEAA or LLIINNEE?? -- you need something to stack something
onto in the first place ;)
Note, that when you STACK onto *UNKNOWN* data, rrdtool
@@ -506,8 +507,8 @@
a CDEF argument with IF and UN functions to turn
*UNKNOWN* into zero ...
-NNNNOOOOTTTTEEEESSSS oooonnnn lllleeeeggggeeeennnndddd aaaarrrrgggguuuummmmeeeennnnttttssss
- EEEEssssccccaaaappppiiiinnnngggg tttthhhheeee ccccoooolllloooonnnn
+NNOOTTEESS oonn lleeggeenndd aarrgguummeennttss
+ EEssccaappiinngg tthhee ccoolloonn
In a ':' in a _l_e_g_e_n_d argument will mark the end of the
legend. To enter a ':' into a legend, the colon must be
@@ -516,7 +517,7 @@
sary to write two backslashes so that one is passed onto
rrd_graph.
- SSSSttttrrrriiiinnnngggg FFFFoooorrrrmmmmaaaattttttttiiiinnnngggg
+ SSttrriinngg FFoorrmmaattttiinngg
The text printed below the actual graph can be formated by
appending special escaped characters at the end of a text.
@@ -524,37 +525,43 @@
pushed onto the graph according to the character speci-
fied.
- Valid markers are: \\\\jjjj for justified, \\\\llll for left aligned,
- \\\\rrrr for right aligned and \\\\cccc for centered. In the next
- section there is an example showing how to use centered
- formating.
+ Valid markers are: \\jj for justified, \\ll for left aligned,
+ \\rr for right aligned and \\cc for centered. In the next sec-
+ tion there is an example showing how to use centered for-
+ mating.
Normally there are two space characters inserted between
every two items printed into the graph. The space follow-
- ing a string can be suppressed by putting a \\\\gggg at the end
- of the string. The \\\\gggg also squshes any space inside the
+ ing a string can be suppressed by putting a \\gg at the end
+ of the string. The \\gg also squshes any space inside the
string if it is at the very end of the string. This can be
- used in connection with %%%%ssss to supress empty unit strings.
+ used in connection with %%ss to supress empty unit strings.
GPRINT:a:MAX:%lf%s\g
- A special case is COMMENT:\\\\ssss this inserts some additional
+ A special case is COMMENT:\\ss this inserts some additional
vertical space before placing the next row of legends.
-NNNNOOOOTTTTEEEE oooonnnn RRRReeeettttuuuurrrrnnnn VVVVaaaalllluuuueeeessss
+ When text has to be formated without special instructions
+ from your side, rrdtool will automatically justify the
+ text as soon as one string goes over the right edge. If
+ you want to prevent the justification without forcing a
+ newline, you can use the special tag \\JJ at the end of the
+ string to disable the auto justification.
+
+NNOOTTEE oonn RReettuurrnn VVaalluueess
Whenever rrd_graph gets called, it prints a line telling
the size of the gif it has just created to STDOUT. This
line looks like this: XSIZExYSIZE.
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE 1111
+EEXXAAMMPPLLEE 11
rrdtool graph demo.gif --title="Demo Graph" \
DEF:cel=demo.rrd:exhaust:AVERAGE \
"CDEF:far=cel,1.8,*,32,+"" \
LINE2:cel#00a000:"D. Celsius" \
LINE2:far#ff0000:"D. Fahrenheit\c"
-
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE 2222
+EEXXAAMMPPLLEE 22
This example demonstrates the syntax for using IF and UN
to set _*_U_N_K_N_O_W_N_* values to 0. This technique is useful if
you are aggregating interface data where the start dates
@@ -581,17 +588,13 @@
would have 0,0,7942099 and the real value would be the
replacement.
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE 3333
+EEXXAAMMPPLLEE 33
This example shows two ways to use the INF function. First
it makes the background change color during half of the
hours. Then, it uses AREA and STACK to draw a picture. If
one of the inputs was UNKNOWN, all inputs are overlaid
with another AREA.
-
-
-
-
rrdtool graph example.png --title="INF demo" \
DEF:val1=some.rrd:ds0:AVERAGE \
DEF:val2=some.rrd:ds1:AVERAGE \
@@ -628,12 +631,12 @@
have to add NEGINF in order to extend the coverage of the
rea to whole graph.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-RRRREEEEFFFFEEEERRRREEEENNNNCCCCEEEESSSS
+RREEFFEERREENNCCEESS
[1] http://www.dotpoint.com/xnumber/rpn_or_adl.htm
-2002-06-20 1.0.40 RRDGRAPH(1)
+1.0.41 2003-02-16 RRDGRAPH(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtool.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.html 2003-02-20 15:24:02.000000000 -0800
@@ -1,223 +1,276 @@
-<HTML>
-<HEAD>
-<TITLE>rrdtool</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdtool</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <UL>
-
- <LI><A HREF="#overview">OVERVIEW</A></LI>
- <LI><A HREF="#functions">FUNCTIONS</A></LI>
- <LI><A HREF="#how does rrdtool work">HOW DOES RRDTOOL WORK?</A></LI>
- <LI><A HREF="#remote control">REMOTE CONTROL</A></LI>
- </UL>
-
- <LI><A HREF="#see also">SEE ALSO</A></LI>
- <LI><A HREF="#bugs">BUGS</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <ul>
+
+ <li><a href="#overview">OVERVIEW</a></li>
+ <li><a href="#functions">FUNCTIONS</a></li>
+ <li><a href="#how_does_rrdtool_work">HOW DOES RRDTOOL WORK?</a></li>
+ <li><a href="#remote_control">REMOTE CONTROL</a></li>
+ </ul>
+
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#bugs">BUGS</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool - round robin database tool</P>
-<div align="right"><a href="rrdtool.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>-</STRONG> | <EM>function</EM></P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>
-<H2><A NAME="overview">OVERVIEW</A></H2>
-<P>It is pretty easy to gather status information from all sorts of
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool - round robin database tool</p>
+<div align="right"><a href="rrdtool.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>-</strong> | <em>function</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>
+</p>
+<h2><a name="overview">OVERVIEW</a></h2>
+<p>It is pretty easy to gather status information from all sorts of
things, ranging from the temperature in your office to the number of
octets which have passed through the FDDI interface of your
router. But it is not so trivial to store this data in a efficient and
-systematic manner. This is where <STRONG>rrdtool</STRONG> kicks in. It lets you
-<EM>log and analyze</EM> the data you gather from all kinds of data-sources
-(<STRONG>DS</STRONG>). The data analysis part of rrdtool is based on the ability to
+systematic manner. This is where <strong>rrdtool</strong> kicks in. It lets you
+<em>log and analyze</em> the data you gather from all kinds of data-sources
+(<strong>DS</strong>). The data analysis part of rrdtool is based on the ability to
quickly generate graphical representations of the data values
-collected over a definable time period.</P>
-<P>In this man page you will find general information on the design and
+collected over a definable time period.</p>
+<p>In this man page you will find general information on the design and
functionality of the Round Robin Database Tool (rrdtool). For a more
detailed description of how to use the individual functions of the
-<STRONG>rrdtool</STRONG> check the corresponding man page.</P>
-<P>For an introduction to the usage of rrdtool make sure you check <A HREF="././rrdtutorial.html">the rrdtutorial manpage</A>.</P>
-<P>
-<H2><A NAME="functions">FUNCTIONS</A></H2>
-<P>While the man pages talk of command line switches you have to set in
-order to make <STRONG>rrdtool</STRONG> work it is important to note that the
-<STRONG>rrdtool</STRONG> can be 'remote controlled' through a set of pipes. This
+<strong>rrdtool</strong> check the corresponding man page.</p>
+<p>For an introduction to the usage of rrdtool make sure you check <a href="././rrdtutorial.html">the rrdtutorial manpage</a>.</p>
+<p>
+</p>
+<h2><a name="functions">FUNCTIONS</a></h2>
+<p>While the man pages talk of command line switches you have to set in
+order to make <strong>rrdtool</strong> work it is important to note that the
+<strong>rrdtool</strong> can be 'remote controlled' through a set of pipes. This
saves a considerable amount of startup time when you plan to make
-<STRONG>rrdtool</STRONG> do a lot of things quickly. Check the section on <A HREF="#remote control">Remote Control</A> further down. There is also a number of language bindings
+<strong>rrdtool</strong> do a lot of things quickly. Check the section on <a href="#remote_control">Remote Control</a> further down. There is also a number of language bindings
for rrdtool which allow you to use it directly from perl, python, tcl,
-php, ...</P>
-<DL>
-<DT><STRONG><A NAME="item_create"><STRONG>create</STRONG></A></STRONG><BR>
-<DD>
-Set up a new Round Robin Database (RRD). Check <A HREF="././rrdcreate.html">the rrdcreate manpage</A>.
-<P></P>
-<DT><STRONG><A NAME="item_update"><STRONG>update</STRONG></A></STRONG><BR>
-<DD>
-Store new data values into an RRD. Check <A HREF="././rrdupdate.html">the rrdupdate manpage</A>.
-<P></P>
-<DT><STRONG><A NAME="item_graph"><STRONG>graph</STRONG></A></STRONG><BR>
-<DD>
+php, ...</p>
+<dl>
+<dt><strong><a name="item_create"><strong>create</strong></a></strong><br />
+</dt>
+<dd>
+Set up a new Round Robin Database (RRD). Check <a href="././rrdcreate.html">the rrdcreate manpage</a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_update"><strong>update</strong></a></strong><br />
+</dt>
+<dd>
+Store new data values into an RRD. Check <a href="././rrdupdate.html">the rrdupdate manpage</a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_graph"><strong>graph</strong></a></strong><br />
+</dt>
+<dd>
Create a graph from data stored in one or several RRD. Apart from
-generating graphs, data can also be extracted to stdout. Check <A HREF="././rrdgraph.html">the rrdgraph manpage</A>.
-<P></P>
-<DT><STRONG><A NAME="item_dump"><STRONG>dump</STRONG></A></STRONG><BR>
-<DD>
+generating graphs, data can also be extracted to stdout. Check <a href="././rrdgraph.html">the rrdgraph manpage</a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_dump"><strong>dump</strong></a></strong><br />
+</dt>
+<dd>
Dump the contents of an RRD in plain ASCII. In connection with
restore you can use it to transport an rrd from one architecture to another.
-Check <A HREF="././rrddump.html">the rrddump manpage</A>.
-<P></P>
-<DT><STRONG><A NAME="item_restore"><STRONG>restore</STRONG></A></STRONG><BR>
-<DD>
-Restore an RRD in XML format to a binary rrd ... Check <A HREF="././rrdrestore.html">the rrdrestore manpage</A>
-<P></P>
-<DT><STRONG><A NAME="item_fetch"><STRONG>fetch</STRONG></A></STRONG><BR>
-<DD>
+Check <a href="././rrddump.html">the rrddump manpage</a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_restore"><strong>restore</strong></a></strong><br />
+</dt>
+<dd>
+Restore an RRD in XML format to a binary rrd ... Check <a href="././rrdrestore.html">the rrdrestore manpage</a>
+</dd>
+<p></p>
+<dt><strong><a name="item_fetch"><strong>fetch</strong></a></strong><br />
+</dt>
+<dd>
Get data for a certain time period from a RRD. The graph function
-uses fetch to retrieve its data from an rrd. Check <A HREF="././rrdfetch.html">the rrdfetch manpage</A>.
-<P></P>
-<DT><STRONG><A NAME="item_tune"><STRONG>tune</STRONG></A></STRONG><BR>
-<DD>
-Alter setup of an RRD. Check <A HREF="././rrdtune.html">the rrdtune manpage</A>.
-<P></P>
-<DT><STRONG><A NAME="item_last"><STRONG>last</STRONG></A></STRONG><BR>
-<DD>
-Find last update time of an RRD. Check <A HREF="././rrdlast.html">the rrdlast manpage</A>.
-<P></P>
-<DT><STRONG><A NAME="item_rrdresize"><STRONG>rrdresize</STRONG></A></STRONG><BR>
-<DD>
-Change the size of individual RRAs ... Dangerous! Check <A HREF="././rrdresize.html">the rrdresize manpage</A>.
-<P></P>
-<DT><STRONG><A NAME="item_xport"><STRONG>xport</STRONG></A></STRONG><BR>
-<DD>
-Export data retrieved from one or several RRD. Check <A HREF="././rrdxport.html">the rrdxport manpage</A>
-<P></P>
-<DT><STRONG><A NAME="item_rrdcgi"><STRONG>rrdcgi</STRONG></A></STRONG><BR>
-<DD>
+uses fetch to retrieve its data from an rrd. Check <a href="././rrdfetch.html">the rrdfetch manpage</a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_tune"><strong>tune</strong></a></strong><br />
+</dt>
+<dd>
+Alter setup of an RRD. Check <a href="././rrdtune.html">the rrdtune manpage</a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_last"><strong>last</strong></a></strong><br />
+</dt>
+<dd>
+Find last update time of an RRD. Check <a href="././rrdlast.html">the rrdlast manpage</a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_info"><strong>info</strong></a></strong><br />
+</dt>
+<dd>
+Display information about an RRD ... Check <a href="././rrdinfo.html">the rrdinfo manpage</a>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrdresize"><strong>rrdresize</strong></a></strong><br />
+</dt>
+<dd>
+Change the size of individual RRAs ... Dangerous! Check <a href="././rrdresize.html">the rrdresize manpage</a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_xport"><strong>xport</strong></a></strong><br />
+</dt>
+<dd>
+Export data retrieved from one or several RRD. Check <a href="././rrdxport.html">the rrdxport manpage</a>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrdcgi"><strong>rrdcgi</strong></a></strong><br />
+</dt>
+<dd>
This is a standalone tool for producing rrd graphs on the fly. Check
-<A HREF="././rrdcgi.html">the rrdcgi manpage</A>.
-<P></P></DL>
-<P>
-<H2><A NAME="how does rrdtool work">HOW DOES RRDTOOL WORK?</A></H2>
-<DL>
-<DT><STRONG><A NAME="item_Data_acquisition">Data acquisition</A></STRONG><BR>
-<DD>
+<a href="././rrdcgi.html">the rrdcgi manpage</a>.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<h2><a name="how_does_rrdtool_work">HOW DOES RRDTOOL WORK?</a></h2>
+<dl>
+<dt><strong><a name="item_data_acquisition">Data acquisition</a></strong><br />
+</dt>
+<dd>
When monitoring the state of a system, it is convenient to have the
data available at a constant interval. Unfortunately you may not
always be able to fetch data at exactly the time you want
-to. Therefore <STRONG>rrdtool</STRONG> lets you update the logfile at any time you
+to. Therefore <strong>rrdtool</strong> lets you update the logfile at any time you
want. It will automatically interpolate the value of the data-source
-(<STRONG>DS</STRONG>) at the latest official time-slot and write this value to the
+(<strong>DS</strong>) at the latest official time-slot and write this value to the
log. The value you have supplied is stored as well and is also taken
into account when interpolating the next log entry.
-<P></P>
-<DT><STRONG><A NAME="item_Consolidation">Consolidation</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_consolidation">Consolidation</a></strong><br />
+</dt>
+<dd>
You may log data at a 1 minute interval, but you are also be
interested to know the development of the data over the last year. You
could do this by simply storing the data in 1 minute interval, for one
year. While this would take considerable disk space it would also take
a lot of time to analyze the data when you wanted to create a graph
-covering the whole year. <STRONG>rrdtool</STRONG> offers a solution to this
+covering the whole year. <strong>rrdtool</strong> offers a solution to this
problem through its data consolidation feature. When setting up
-an Round Robin Database (<STRONG>RRD</STRONG>), you can define at which interval
+an Round Robin Database (<strong>RRD</strong>), you can define at which interval
this consolidation should occur, and what consolidation function
-(<STRONG>CF</STRONG>) (average, minimum, maximum, last) should be used to
+(<strong>CF</strong>) (average, minimum, maximum, last) should be used to
build the consolidated values (see rrdcreate). You can define any
-number of different consolidation setups within one <STRONG>RRD</STRONG>. They will
-all be maintained on the fly when new data is loaded into the <STRONG>RRD</STRONG>.
-<P></P>
-<DT><STRONG><A NAME="item_Round_Robin_Archives">Round Robin Archives</A></STRONG><BR>
-<DD>
+number of different consolidation setups within one <strong>RRD</strong>. They will
+all be maintained on the fly when new data is loaded into the <strong>RRD</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_round_robin_archives">Round Robin Archives</a></strong><br />
+</dt>
+<dd>
Data values of the same consolidation setup are stored into Round
-Robin Archives (<STRONG>RRA</STRONG>). This is a very efficient manner to store data
+Robin Archives (<strong>RRA</strong>). This is a very efficient manner to store data
for a certain amount of time, while using a known amount of storage
space.
-<P>It works like this: If you want to store 1000 values in 5 minute
-interval, <STRONG>rrdtool</STRONG> will allocate space for 1000 data values and a
+</dd>
+<dd>
+<p>It works like this: If you want to store 1000 values in 5 minute
+interval, <strong>rrdtool</strong> will allocate space for 1000 data values and a
header area. In the header it will store a pointer telling
which one of the values in the storage area was last written to. New
values are written to the Round Robin Archive in a ... you guess it
... round robin manner. This automatically limits the history to the last
-1000 values. Because you can define several <STRONG>RRA</STRONG>s within a single <STRONG>RRD</STRONG>,
+1000 values. Because you can define several <strong>RRA</strong>s within a single <strong>RRD</strong>,
you can setup another one, storing 750 data values at a 2 hour interval
and thus keeping a log for the last two months although at a lower
-resolution.</P>
-<P>The use of <STRONG>RRA</STRONG>s guarantees that the <STRONG>RRD</STRONG> does not grow over
+resolution.</p>
+</dd>
+<dd>
+<p>The use of <strong>RRA</strong>s guarantees that the <strong>RRD</strong> does not grow over
time and that old data is automatically eliminated. By using the
consolidation feature, you can still keep data for a very long time,
while gradually reducing the resolution of the data along the time
-axis. Using different consolidation functions (<STRONG>CF</STRONG>) allows you to
+axis. Using different consolidation functions (<strong>CF</strong>) allows you to
store exactly the type of information that actually interests
you. (Maximum one minute traffic on the LAN, minimum temperature of
-the wine cellar, total minutes down time ...)</P>
-<P></P>
-<DT><STRONG><A NAME="item_Unknown_Data">Unknown Data</A></STRONG><BR>
-<DD>
-As mentioned earlier, the <STRONG>RRD</STRONG> stores data at a constant
+the wine cellar, total minutes down time ...)</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_unknown_data">Unknown Data</a></strong><br />
+</dt>
+<dd>
+As mentioned earlier, the <strong>RRD</strong> stores data at a constant
interval. Now it may happen that no new data is available when a
-value has to be written to the <STRONG>RRD</STRONG>. Data acquisition may not be
-possible for one reason or an other. The <STRONG>rrdtool</STRONG> handles these
-situations by storing an <EM>*UNKNOWN*</EM> value into the database. The
-value '<EM>*UNKNOWN*</EM>' is supported through all the functions of the
-database. When consolidating the amount of <EM>*UNKNOWN*</EM> data is
+value has to be written to the <strong>RRD</strong>. Data acquisition may not be
+possible for one reason or an other. The <strong>rrdtool</strong> handles these
+situations by storing an <em>*UNKNOWN*</em> value into the database. The
+value '<em>*UNKNOWN*</em>' is supported through all the functions of the
+database. When consolidating the amount of <em>*UNKNOWN*</em> data is
accumulated and when a new consolidated value is ready to be written
-to its Round Robin Archive (<STRONG>RRA</STRONG>) a validity check is performed to
+to its Round Robin Archive (<strong>RRA</strong>) a validity check is performed to
make sure that the percentage of unknown data in the new value is
-below a configurable level. If so, an <EM>*UNKNOWN*</EM> value will be
-written to the <STRONG>RRA</STRONG>.
-<P></P>
-<DT><STRONG><A NAME="item_Graphing">Graphing</A></STRONG><BR>
-<DD>
-The <STRONG>rrdtool</STRONG> also allows one to generate reports in numerical and
+below a configurable level. If so, an <em>*UNKNOWN*</em> value will be
+written to the <strong>RRA</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_graphing">Graphing</a></strong><br />
+</dt>
+<dd>
+The <strong>rrdtool</strong> also allows one to generate reports in numerical and
graphical form based on the data stored in one or several
-<STRONG>RRD</STRONG>s. The graphing feature is fully configurable. Size, color and
-contents of the graph can be defined freely. Check <A HREF="././rrdgraph.html">the rrdgraph manpage</A>
+<strong>RRD</strong>s. The graphing feature is fully configurable. Size, color and
+contents of the graph can be defined freely. Check <a href="././rrdgraph.html">the rrdgraph manpage</a>
for more information on this.
-<P></P></DL>
-<P>
-<H2><A NAME="remote control">REMOTE CONTROL</A></H2>
-<P>When you start <STRONG>rrdtool</STRONG> with the command line option '<STRONG>-</STRONG>', it waits
+</dd>
+<p></p></dl>
+<p>
+</p>
+<h2><a name="remote_control">REMOTE CONTROL</a></h2>
+<p>When you start <strong>rrdtool</strong> with the command line option '<strong>-</strong>', it waits
for input via standard in. With this feature you can improve
-performance by attaching <STRONG>rrdtool</STRONG> to another process (mrtg is one
-example) through a set of pipes. Over the pipes <STRONG>rrdtool</STRONG> accepts the
+performance by attaching <strong>rrdtool</strong> to another process (mrtg is one
+example) through a set of pipes. Over the pipes <strong>rrdtool</strong> accepts the
same arguments as on the command line. When a command is completed,
-rrdtool will print the string '<CODE>OK</CODE>', followed by timing information of
-the form <STRONG>u:</STRONG><EM>usertime</EM> <STRONG>s:</STRONG><EM>systemtime</EM> both values are running
+rrdtool will print the string '<code>OK</code>', followed by timing information of
+the form <strong>u:</strong><em>usertime</em> <strong>s:</strong><em>systemtime</em> both values are running
totals of seconds since rrdtool was started. If an error occurs, a line
-of the form '<CODE>ERROR:</CODE> <EM>Description of error</EM>' will be printed. <STRONG>rrdtool</STRONG>
-will not abort if possible, but follow the ERROR line with an OK line.</P>
-<P>
-<HR>
-<H1><A NAME="see also">SEE ALSO</A></H1>
-<P>rrdcreate, rrdupdate, rrdgraph, rrddump, rrdfetch, rrdtune, rrdlast, rrdxport</P>
-<P>
-<HR>
-<H1><A NAME="bugs">BUGS</A></H1>
-<P>Bugs ? Features !</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+of the form '<code>ERROR:</code> <em>Description of error</em>' will be printed. <strong>rrdtool</strong>
+will not abort if possible, but follow the ERROR line with an OK line.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>rrdcreate, rrdupdate, rrdgraph, rrddump, rrdfetch, rrdtune, rrdlast, rrdxport</p>
+<p>
+</p>
+<hr />
+<h1><a name="bugs">BUGS</a></h1>
+<p>Bugs ? Features !</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/RRDs.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/RRDs.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/RRDs.txt 2003-02-20 15:24:02.000000000 -0800
@@ -2,10 +2,10 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
RRDs - Access rrdtool as a shared module
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
+SSYYNNOOPPSSIISS
use RRDs;
RRDs::error
RRDs::last ...
@@ -16,9 +16,8 @@
RRDs::fetch ...
RRDs::tune ...
-
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- CCCCaaaalllllllliiiinnnngggg SSSSeeeeqqqquuuueeeennnncccceeee
+DDEESSCCRRIIPPTTIIOONN
+ CCaalllliinngg SSeeqquueennccee
This module accesses rrdtool functionality directly from
within perl. The arguments to the functions listed in the
@@ -37,7 +36,7 @@
is also valid.
- EEEErrrrrrrroooorrrr HHHHaaaannnnddddlllliiiinnnngggg
+ EErrrroorr HHaannddlliinngg
The RRD functions will not abort your program even when
they can not make sense out of the arguments you fed them.
@@ -52,18 +51,17 @@
my $ERR=RRDs::error;
die "ERROR while updating mydemo.rrd: $ERR\n" if $ERR;
-
- RRRReeeettttuuuurrrrnnnn VVVVaaaalllluuuueeeessss
+ RReettuurrnn VVaalluueess
The functions RRDs::last, RRDs::graph, RRDs::info and
RRDs::fetch return their findings.
- RRRRRRRRDDDDssss::::::::llllaaaasssstttt returns a single INTEGER representing the last
+ RRRRDDss::::llaasstt returns a single INTEGER representing the last
update time.
$lastupdate = RRDs::last ...
- RRRRRRRRDDDDssss::::::::ggggrrrraaaapppphhhh returns an pointer to an ARRAY containing the
+ RRRRDDss::::ggrraapphh returns an pointer to an ARRAY containing the
x-size and y-size of the created gif and results of the
PRINT arguments.
@@ -71,7 +69,7 @@
print "Gifsize: ${xsize}x${ysize}\n";
print "Averages: ", (join ", ", @$averages);
- RRRRRRRRDDDDssss::::::::iiiinnnnffffoooo returns a pointer to a hash. The keys of the
+ RRRRDDss::::iinnffoo returns a pointer to a hash. The keys of the
hash represent the property names of the rrd and the val-
ues of the hash are the values of the properties.
@@ -80,7 +78,7 @@
print "$key = $$hash{$key}\n";
}
- RRRRRRRRDDDDssss::::::::ffffeeeettttcccchhhh is the most complex of the pack regarding
+ RRRRDDss::::ffeettcchh is the most complex of the pack regarding
return values. There are 4 values. Two normal integers, a
pointer to an array and a pointer to a array of pointers.
@@ -102,7 +100,7 @@
See the examples directory for more ways to use this
extension.
-NNNNOOOOTTTTEEEE
+NNOOTTEE
If you are manipulating the TZ variable you should also
call the posixs function tzset to initialize all internal
state of the library for properly operating in the time-
@@ -112,10 +110,9 @@
$ENV{TZ} = 'CET';
POSIX::tzset();
-
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-10-11 1.0.40 RRDs(3)
+1.0.41 2003-02-19 RRDs(3)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdcgi.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdcgi.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdcgi.txt 2003-02-20 15:24:02.000000000 -0800
@@ -2,29 +2,29 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdcgi - create web pages containing RRD graphs based on
templates
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- #!/path/to/rrrrrrrrddddccccggggiiii [--------ffffiiiilllltttteeeerrrr]
+SSYYNNOOPPSSIISS
+ #!/path/to/rrrrddccggii [----ffiilltteerr]
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- rrrrrrrrddddccccggggiiii is a sort of very limited script interpreter. Its
+DDEESSCCRRIIPPTTIIOONN
+ rrrrddccggii is a sort of very limited script interpreter. Its
purpose is to run as a cgi-program and parse a web page
- template containing special <RRD:: tags. rrrrrrrrddddccccggggiiii will
+ template containing special <RRD:: tags. rrrrddccggii will
interpret and act according to these tags. In the end it
will printout a web page including the necessary CGI head-
ers.
- rrrrrrrrddddccccggggiiii parses the contents of the template in 2 steps. In
+ rrrrddccggii parses the contents of the template in 2 steps. In
each step it looks only for a subset of tags. This allows
to nest tags.
The argument parser uses the same semantics as you are
used from your c shell.
- PPPPaaaassssssss 1111
+ PPaassss 11
RRD::CV _n_a_m_e
@@ -53,7 +53,7 @@
you are using some sort of access control on the
directory
- PPPPaaaassssssss 2222
+ PPaassss 22
RRD::GOODFOR _s_e_c_o_n_d_s
@@ -86,24 +86,24 @@
time is _s_t_r_f_t_i_m_e-formated with the string speci-
fied in the argument.
- PPPPaaaassssssss 3333
+ PPaassss 33
RRD::GRAPH _r_r_d_g_r_a_p_h _a_r_g_u_m_e_n_t_s
This tag creates the RRD graph defined in its
argument and then gets replaced by an appropriate
- <IMG> tag referring to the graph. The --------llllaaaazzzzyyyy
+ <IMG> tag referring to the graph. The ----llaazzyy
option in RRD graph can be used to make sure that
graphs are only regenerated when they are out of
- date. The arguments to the RRRRRRRRDDDD::::::::GGGGRRRRAAAAPPPPHHHH tag work as
- described in the rrrrrrrrddddggggrrrraaaapppphhhh manual page.
+ date. The arguments to the RRRRDD::::GGRRAAPPHH tag work as
+ described in the rrrrddggrraapphh manual page.
- Use the --------llllaaaazzzzyyyy option in your RRD::GRAPH tags, to
+ Use the ----llaazzyy option in your RRD::GRAPH tags, to
reduce the load on your server. This option makes
sure that graphs are only regenerated when the old
ones are out of date.
- If you do not specify your own --------iiiimmmmggggiiiinnnnffffoooo format,
+ If you do not specify your own ----iimmggiinnffoo format,
the following will be used:
<IMG SRC="%s" WIDTH="%lu" HEIGHT="%lu">
@@ -113,13 +113,13 @@
file argument will get dropped.
RRD::PRINT _n_u_m_b_e_r
- If the preceding RRRRRRRRDDDD::::::::GGGGRRRRAAAAPPPPHHHH tag contained and
- PPPPRRRRIIIINNNNTTTT arguments, then you can access their output
+ If the preceding RRRRDD::::GGRRAAPPHH tag contained and
+ PPRRIINNTT arguments, then you can access their output
with this tag. The _n_u_m_b_e_r argument refers to the
- number of the PPPPRRRRIIIINNNNTTTT argument. This first PPPPRRRRIIIINNNNTTTT has
+ number of the PPRRIINNTT argument. This first PPRRIINNTT has
_n_u_m_b_e_r 0.
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE 1111
+EEXXAAMMPPLLEE 11
The example below creates a web pages with a single RRD
graph.
@@ -144,8 +144,7 @@
</BODY>
</HTML>
-
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE 2222
+EEXXAAMMPPLLEE 22
This script is slightly more elaborate, it allows you to
run it from a form which sets RRD_NAME. RRD_NAME is then
used to select which RRD you want to use a source for your
@@ -171,8 +170,7 @@
</BODY>
</HTML>
-
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE 3333
+EEXXAAMMPPLLEE 33
This example shows how to handle the case where the RRD,
graphs and cgi-bins are seperate directories
@@ -196,9 +194,8 @@
Note 2: The SRC=/.../gifs should be paths from the view of
the webserver/browser
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-04-09 1.0.40 RRDCGI(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/cdeftutorial.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/cdeftutorial.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/cdeftutorial.html 2003-02-20 15:24:02.000000000 -0800
@@ -1,77 +1,81 @@
-<HTML>
-<HEAD>
-<TITLE>cdeftutorial</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>cdeftutorial</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <UL>
-
- <LI><A HREF="#why this tutorial ">Why this tutorial ?</A></LI>
- <LI><A HREF="#more reading">More reading</A></LI>
- </UL>
-
- <LI><A HREF="#what are cdefs ">What are CDEFs ?</A></LI>
- <LI><A HREF="#syntax">Syntax</A></LI>
- <LI><A HREF="#rpnexpressions">RPN-expressions</A></LI>
- <LI><A HREF="#converting your wishes to rpn">Converting your wishes to RPN</A></LI>
- <LI><A HREF="#some special numbers">Some special numbers</A></LI>
- <UL>
-
- <LI><A HREF="#the unknown value">The unknown value</A></LI>
- <LI><A HREF="#working with unknown data in your database">Working with unknown data in your database</A></LI>
- <LI><A HREF="#infinity">Infinity</A></LI>
- <LI><A HREF="#working with unknown data and infinity">Working with unknown data and infinity</A></LI>
- </UL>
-
- <LI><A HREF="#some examples">Some examples</A></LI>
- <UL>
-
- <LI><A HREF="#example: using a recently created rrd">Example: using a recently created RRD</A></LI>
- <LI><A HREF="#example: better handling of unknown data, by using time">Example: better handling of unknown data, by using time</A></LI>
- <LI><A HREF="#example: pretending weird data isn't there">Example: Pretending weird data isn't there</A></LI>
- <LI><A HREF="#example: working on a certain time span">Example: working on a certain time span</A></LI>
- <LI><A HREF="#example: you suspect to have problems and want to see unknown data.">Example: You suspect to have problems and want to see unknown data.</A></LI>
- <LI><A HREF="#same example useful with stacked data:">Same example useful with STACKed data:</A></LI>
- </UL>
-
- <LI><A HREF="#the examples from the rrd graph manual page">The examples from the rrd graph manual page</A></LI>
- <UL>
-
- <LI><A HREF="#degrees celcius vs. degrees fahrenheit">Degrees Celcius vs. Degrees Fahrenheit</A></LI>
- <LI><A HREF="#changing unknown into zero">Changing unknown into zero</A></LI>
- <LI><A HREF="#infinity demo">Infinity demo</A></LI>
- </UL>
-
- <LI><A HREF="#out of ideas for now">Out of ideas for now</A></LI>
- <LI><A HREF="#see also">SEE ALSO</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <ul>
+
+ <li><a href="#why_this_tutorial_">Why this tutorial ?</a></li>
+ <li><a href="#more_reading">More reading</a></li>
+ </ul>
+
+ <li><a href="#what_are_cdefs_">What are CDEFs ?</a></li>
+ <li><a href="#syntax">Syntax</a></li>
+ <li><a href="#rpnexpressions">RPN-expressions</a></li>
+ <li><a href="#converting_your_wishes_to_rpn">Converting your wishes to RPN</a></li>
+ <li><a href="#some_special_numbers">Some special numbers</a></li>
+ <ul>
+
+ <li><a href="#the_unknown_value">The unknown value</a></li>
+ <li><a href="#working_with_unknown_data_in_your_database">Working with unknown data in your database</a></li>
+ <li><a href="#infinity">Infinity</a></li>
+ <li><a href="#working_with_unknown_data_and_infinity">Working with unknown data and infinity</a></li>
+ </ul>
+
+ <li><a href="#some_examples">Some examples</a></li>
+ <ul>
+
+ <li><a href="#example:_using_a_recently_created_rrd">Example: using a recently created RRD</a></li>
+ <li><a href="#example:_better_handling_of_unknown_data,_by_using_time">Example: better handling of unknown data, by using time</a></li>
+ <li><a href="#example:_pretending_weird_data_isn't_there">Example: Pretending weird data isn't there</a></li>
+ <li><a href="#example:_working_on_a_certain_time_span">Example: working on a certain time span</a></li>
+ <li><a href="#example:_you_suspect_to_have_problems_and_want_to_see_unknown_data.">Example: You suspect to have problems and want to see unknown data.</a></li>
+ <li><a href="#same_example_useful_with_stacked_data:">Same example useful with STACKed data:</a></li>
+ </ul>
+
+ <li><a href="#the_examples_from_the_rrd_graph_manual_page">The examples from the rrd graph manual page</a></li>
+ <ul>
+
+ <li><a href="#degrees_celcius_vs._degrees_fahrenheit">Degrees Celcius vs. Degrees Fahrenheit</a></li>
+ <li><a href="#changing_unknown_into_zero">Changing unknown into zero</a></li>
+ <li><a href="#infinity_demo">Infinity demo</a></li>
+ </ul>
+
+ <li><a href="#out_of_ideas_for_now">Out of ideas for now</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>cdeftutorial - Alex van den Bogaerdt's CDEF tutorial</P>
-<div align="right"><a href="cdeftutorial.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P><STRONG>You provide a question and I will try to provide an answer in the next
-release</STRONG>. <STRONG>No feedback equals no changes!</STRONG></P>
-<P><EM>Additions to this document are also welcome.</EM></P>
-<P>Alex van den Bogaerdt <<A HREF="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</A>></P>
-<P>
-<H2><A NAME="why this tutorial ">Why this tutorial ?</A></H2>
-<P>One of the powerful parts of RRDtool is its ability to do all sorts
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>cdeftutorial - Alex van den Bogaerdt's CDEF tutorial</p>
+<div align="right"><a href="cdeftutorial.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p><strong>You provide a question and I will try to provide an answer in the next
+release</strong>. <strong>No feedback equals no changes!</strong></p>
+<p><em>Additions to this document are also welcome.</em></p>
+<p>Alex van den Bogaerdt <<a href="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</a>></p>
+<p>
+</p>
+<h2><a name="why_this_tutorial_">Why this tutorial ?</a></h2>
+<p>One of the powerful parts of RRDtool is its ability to do all sorts
of calculations on the data retrieved from it's databases. However
RRDtool's many options and syntax make it difficult for the average
user to understand. The manuals are good at explaining what these
@@ -81,160 +85,165 @@
If you are happy with the official documentation, you may find this
document too simple or even boring. If you do choose to read this
tutorial, I also expect you to have read and fully understand my
-other tutorial.</P>
-<P>
-<H2><A NAME="more reading">More reading</A></H2>
-<P>If you have difficulties with the way I try to explain it please read
-Steve Rader's <A HREF="././rpntutorial.html">the rpntutorial manpage</A>. It may help you understand how this all works.</P>
-<P>
-<HR>
-<H1><A NAME="what are cdefs ">What are CDEFs ?</A></H1>
-<P>When retrieving data from an RRD, you are using a ``DEF'' to work with
+other tutorial.</p>
+<p>
+</p>
+<h2><a name="more_reading">More reading</a></h2>
+<p>If you have difficulties with the way I try to explain it please read
+Steve Rader's <a href="././rpntutorial.html">the rpntutorial manpage</a>. It may help you understand how this all works.</p>
+<p>
+</p>
+<hr />
+<h1><a name="what_are_cdefs_">What are CDEFs ?</a></h1>
+<p>When retrieving data from an RRD, you are using a ``DEF'' to work with
that data. Think of it as a variable that changes over time (where
time is the x-axis). The value of this variable is what is found in
the database at that particular time and you can't do any
modifications on it. This is what CDEFs are for: they takes values
-from DEFs and perform calculations on them.</P>
-<P>
-<HR>
-<H1><A NAME="syntax">Syntax</A></H1>
-<PRE>
+from DEFs and perform calculations on them.</p>
+<p>
+</p>
+<hr />
+<h1><a name="syntax">Syntax</a></h1>
+<pre>
DEF:var_name_1=some.rrd:ds_name:CF
- CDEF:var_name_2=RPN_expression</PRE>
-<P>You first define ``var_name_1'' to be data collected from data source
-``ds_name'' found in RRD ``some.rrd'' with consolidation function ``CF''.</P>
-<P>Assume the ifInOctets SNMP counter is saved in mrtg.rrd as the DS ``in''.
+ CDEF:var_name_2=RPN_expression</pre>
+<p>You first define ``var_name_1'' to be data collected from data source
+``ds_name'' found in RRD ``some.rrd'' with consolidation function ``CF''.</p>
+<p>Assume the ifInOctets SNMP counter is saved in mrtg.rrd as the DS ``in''.
Then the following DEF defines a variable for the average of that
-data source:</P>
-<PRE>
- DEF:inbytes=mrtg.rrd:in:AVERAGE</PRE>
-<P>Say you want to display bits per second (instead of bytes per second
+data source:</p>
+<pre>
+ DEF:inbytes=mrtg.rrd:in:AVERAGE</pre>
+<p>Say you want to display bits per second (instead of bytes per second
as stored in the database.) You have to define a calculation
(hence ``CDEF'') on variable ``inbytes'' and use that variable (inbits)
-instead of the original:</P>
-<PRE>
- CDEF:inbits=inbytes,8,*</PRE>
-<P>It tells to multiply inbytes by eight to get inbits. I'll explain later
+instead of the original:</p>
+<pre>
+ CDEF:inbits=inbytes,8,*</pre>
+<p>It tells to multiply inbytes by eight to get inbits. I'll explain later
how this works. In the graphing or printing functions, you can now use
-inbits where you would use inbytes otherwise.</P>
-<P>Note that variable in the CDEF (inbits) must not be the same as the
-variable (inbytes) in the DEF!</P>
-<P>
-<HR>
-<H1><A NAME="rpnexpressions">RPN-expressions</A></H1>
-<P>RPN is short-hand for Reverse Polish Notation. It works as follows.
+inbits where you would use inbytes otherwise.</p>
+<p>Note that variable in the CDEF (inbits) must not be the same as the
+variable (inbytes) in the DEF!</p>
+<p>
+</p>
+<hr />
+<h1><a name="rpnexpressions">RPN-expressions</a></h1>
+<p>RPN is short-hand for Reverse Polish Notation. It works as follows.
You put the variables or numbers on a stack. You also put operations
(things-to-do) on the stack and this stack is then processed. The result
will be placed on the stack. At the end, there should be exactly one
number left: the outcome of the series of operations. If there is not
-exactly one number left, rrdtool will complain loudly.</P>
-<P>Above multiplication by eight will look like:</P>
-<OL>
-<LI>
+exactly one number left, rrdtool will complain loudly.</p>
+<p>Above multiplication by eight will look like:</p>
+<ol>
+<li></li>
Start with an empty stack
-<P></P>
-<LI>
+<p></p>
+<li></li>
Put the content of variable inbytes on the stack
-<P></P>
-<LI>
+<p></p>
+<li></li>
Put the number eight on the stack
-<P></P>
-<LI>
+<p></p>
+<li></li>
Put the operation multiply on the stack
-<P></P>
-<LI>
+<p></p>
+<li></li>
Process the stack
-<P></P>
-<LI>
+<p></p>
+<li></li>
Retrieve the value from the stack and put it in variable inbits
-<P></P></OL>
-<P>We will now do an example with real numbers. Suppose the variable
-inbytes would have value 10, the stack would be:</P>
-<OL>
-<LI>
+<p></p></ol>
+<p>We will now do an example with real numbers. Suppose the variable
+inbytes would have value 10, the stack would be:</p>
+<ol>
+<li></li>
||
-<P></P>
-<LI>
+<p></p>
+<li></li>
|10|
-<P></P>
-<LI>
+<p></p>
+<li></li>
|10|8|
-<P></P>
-<LI>
+<p></p>
+<li></li>
|10|8|*|
-<P></P>
-<LI>
+<p></p>
+<li></li>
|80|
-<P></P>
-<LI>
+<p></p>
+<li></li>
||
-<P></P></OL>
-<P>Processing the stack (step 5) will retrieve one value from the stack
+<p></p></ol>
+<p>Processing the stack (step 5) will retrieve one value from the stack
(from the right at step 4). This is the operation multiply and this
takes two values off the stack as input. The result is put back on the
stack (the value 80 in this case). For multiplication the order doesn't
matter but for other operations like subtraction and division it does.
-Generally speaking you have the following order:</P>
-<PRE>
- y = A - B --> y=minus(A,B) --> CDEF:y=A,B,-</PRE>
-<P>This is not very intuitive (at least most people don't think so). For
-the function <CODE>f(A,B)</CODE> you reverse the position of ``f'' but you do not
-reverse the order of the variables.</P>
-<P>
-<HR>
-<H1><A NAME="converting your wishes to rpn">Converting your wishes to RPN</A></H1>
-<P>First, get a clear picture of what you want to do. Break down the problem
+Generally speaking you have the following order:</p>
+<pre>
+ y = A - B --> y=minus(A,B) --> CDEF:y=A,B,-</pre>
+<p>This is not very intuitive (at least most people don't think so). For
+the function <code>f(A,B)</code> you reverse the position of ``f'' but you do not
+reverse the order of the variables.</p>
+<p>
+</p>
+<hr />
+<h1><a name="converting_your_wishes_to_rpn">Converting your wishes to RPN</a></h1>
+<p>First, get a clear picture of what you want to do. Break down the problem
in smaller portions until they cannot be split anymore. Then it is rather
-simple to convert your ideas into RPN.</P>
-<P>Suppose you have several RRDs and would like to add up some counters in
+simple to convert your ideas into RPN.</p>
+<p>Suppose you have several RRDs and would like to add up some counters in
them. These could be, for instance, the counters for every WAN link you
-are monitoring.</P>
-<P>You have:</P>
-<PRE>
+are monitoring.</p>
+<p>You have:</p>
+<pre>
router1.rrd with link1in link2in
router2.rrd with link1in link2in
- router3.rrd with link1in link2in</PRE>
-<P>Suppose you would like to add up all these counters, except for link2in
-inside router2.rrd. You need to do:</P>
-<P>(in this example, ``router1.rrd:link1in'' means the DS link1in inside the
-RRD router1.rrd)</P>
-<PRE>
+ router3.rrd with link1in link2in</pre>
+<p>Suppose you would like to add up all these counters, except for link2in
+inside router2.rrd. You need to do:</p>
+<p>(in this example, ``router1.rrd:link1in'' means the DS link1in inside the
+RRD router1.rrd)</p>
+<pre>
router1.rrd:link1in
router1.rrd:link2in
router2.rrd:link1in
router3.rrd:link1in
router3.rrd:link2in
-------------------- +
- (outcome of the sum)</PRE>
-<P>As a mathmatical function, this could be written:</P>
-<P><CODE>add(router1.rrd:link1in , router1.rrd:link2in , router2.rrd:link1in , router3.rrd:link1in , router3.rrd:link2.in)</CODE></P>
-<P>With RRDtool and RPN, first, define the inputs:</P>
-<PRE>
+ (outcome of the sum)</pre>
+<p>As a mathmatical function, this could be written:</p>
+<p><code>add(router1.rrd:link1in , router1.rrd:link2in , router2.rrd:link1in , router3.rrd:link1in , router3.rrd:link2.in)</code></p>
+<p>With RRDtool and RPN, first, define the inputs:</p>
+<pre>
DEF:a=router1.rrd:link1in:AVERAGE
DEF:b=router1.rrd:link2in:AVERAGE
DEF:c=router2.rrd:link1in:AVERAGE
DEF:d=router3.rrd:link1in:AVERAGE
- DEF:e=router3.rrd:link2in:AVERAGE</PRE>
-<P>Now, the mathematical function becomes: <CODE>add(a,b,c,d,e)</CODE></P>
-<P>In RPN, there's no operator that sums more than two values so you need
+ DEF:e=router3.rrd:link2in:AVERAGE</pre>
+<p>Now, the mathematical function becomes: <code>add(a,b,c,d,e)</code></p>
+<p>In RPN, there's no operator that sums more than two values so you need
to do several additions. You add a and b, add c to the result, add d
-to the result and add e to the result.</P>
-<PRE>
+to the result and add e to the result.</p>
+<pre>
push a: a stack contains the value of a
push b and add: b,+ stack contains the result of a+b
push c and add: c,+ stack contains the result of a+b+c
push d and add: d,+ stack contains the result of a+b+c+d
- push e and add: e,+ stack contains the result of a+b+c+d+e</PRE>
-<P>What was calculated here would be written down as:</P>
-<PRE>
- ( ( ( (a+b) + c) + d) + e) ></PRE>
-<P>This is in RPN: <CODE>CDEF:result=a,b,+,c,+,d,+,e,+</CODE></P>
-<P>This is correct but it can be made more clear to humans. It does
+ push e and add: e,+ stack contains the result of a+b+c+d+e</pre>
+<p>What was calculated here would be written down as:</p>
+<pre>
+ ( ( ( (a+b) + c) + d) + e) ></pre>
+<p>This is in RPN: <code>CDEF:result=a,b,+,c,+,d,+,e,+</code></p>
+<p>This is correct but it can be made more clear to humans. It does
not matter if you add a to b and then add c to the result or first
add b to c and then add a to the result. This makes it possible to
-rewrite the RPN into <CODE>CDEF:result=a,b,c,d,e,+,+,+,+</CODE> which is
-evaluatated differently:</P>
-<PRE>
+rewrite the RPN into <code>CDEF:result=a,b,c,d,e,+,+,+,+</code> which is
+evaluatated differently:</p>
+<pre>
push value of variable a on the stack: a
push value of variable b on the stack: a b
push value of variable c on the stack: a b c
@@ -247,364 +256,374 @@
push operator + on the stack: a b Q +
and process it: a R (where R == b+Q)
push operator + on the stack: a R +
- and process it: S (where S == a+R)</PRE>
-<P>As you can see the RPN expression <CODE>a,b,c,d,e,+,+,+,+,+</CODE> will evaluate in
-<CODE>((((d+e)+c)+b)+a)</CODE> and it has the same outcome as <CODE>a,b,+,c,+,d,+,e,+</CODE>
+ and process it: S (where S == a+R)</pre>
+<p>As you can see the RPN expression <code>a,b,c,d,e,+,+,+,+,+</code> will evaluate in
+<code>((((d+e)+c)+b)+a)</code> and it has the same outcome as <code>a,b,+,c,+,d,+,e,+</code>
According to Steve Rader this is called the commutative law of addition
but you may forget this right away, as long as you remember what it
-represents.</P>
-<P>Now look at an expression that contains a multiplication:</P>
-<P>First in normal math: <CODE>let result = a+b*c</CODE>. In this case you can't
+represents.</p>
+<p>Now look at an expression that contains a multiplication:</p>
+<p>First in normal math: <code>let result = a+b*c</code>. In this case you can't
choose the order yourself, you have to start with the multiplication
and then add a to it. You may alter the position of b and c, you may
-not alter the position of a and b.</P>
-<P>You have to take this in consideration when converting this expression
+not alter the position of a and b.</p>
+<p>You have to take this in consideration when converting this expression
into RPN. Read it as: ``Add the outcome of b*c to a'' and then it is
-easy to write the RPN expression: <CODE>result=a,b,c,*,+</CODE>
-Another expression that would return the same: <CODE>result=b,c,*,a,+</CODE></P>
-<P>In normal math, you may encounter something like ``a*(b+c)'' and this
+easy to write the RPN expression: <code>result=a,b,c,*,+</code>
+Another expression that would return the same: <code>result=b,c,*,a,+</code></p>
+<p>In normal math, you may encounter something like ``a*(b+c)'' and this
can also be converted into RPN. The parenthesis just tell you to first
add b and c, and then multiply a with the result. Again, now it is
-easy to write it in RPN: <CODE>result=a,b,c,+,*</CODE>. Note that this is very
+easy to write it in RPN: <code>result=a,b,c,+,*</code>. Note that this is very
similar to one of the expressions in the previous paragraph, only the
-multiplication and the addition changed places.</P>
-<P>When you have problems with RPN or when rrdtool is complaining, it's
+multiplication and the addition changed places.</p>
+<p>When you have problems with RPN or when rrdtool is complaining, it's
usually a Good Thing to write down the stack on a piece of paper
and see what happens. Have the manual ready and pretend to be rrdtool.
Just do all the math by hand to see what happens, I'm sure this will
-solve most, if not all, problems you encounter.</P>
-<P>
-<HR>
-<H1><A NAME="some special numbers">Some special numbers</A></H1>
-<P>
-<H2><A NAME="the unknown value">The unknown value</A></H2>
-<P>Sometimes collecting your data will fail. This can be very common,
+solve most, if not all, problems you encounter.</p>
+<p>
+</p>
+<hr />
+<h1><a name="some_special_numbers">Some special numbers</a></h1>
+<p>
+</p>
+<h2><a name="the_unknown_value">The unknown value</a></h2>
+<p>Sometimes collecting your data will fail. This can be very common,
especially when querying over busy links. RRDtool can be configured
to allow for one (or even more) unknown value and calculate the missing
update. You can, for instance, query your device every minute. This is
creating one so called PDP or primary data point per minute. If you
defined your RRD to contain an RRA that stores 5-minute values, you need
five of those PDPs to create one CDP (consolidated data point).
-These PDPs can become unknown in two cases:</P>
-<OL>
-<LI>
+These PDPs can become unknown in two cases:</p>
+<ol>
+<li></li>
The updates are too far apart. This is tuned using the ``heartbeat'' setting
-<P></P>
-<LI>
+<p></p>
+<li></li>
The update was set to unknown on purpose by inserting no value (using the
template option) or by using ``U'' as the value to insert.
-<P></P></OL>
-<P>When a CDP is calculated, another mechanism determines if this CDP is valid
+<p></p></ol>
+<p>When a CDP is calculated, another mechanism determines if this CDP is valid
or not. If there are too many PDPs unknown, the CDP is unknown as well.
This is determined by the xff factor. Please note that one unknown counter
update can result in two unknown PDPs! If you only allow for one unknown
-PDP per CDP, this makes the CDP go unknown!</P>
-<P>Suppose the counter increments with one per second and you retrieve it
-every minute:</P>
-<PRE>
+PDP per CDP, this makes the CDP go unknown!</p>
+<p>Suppose the counter increments with one per second and you retrieve it
+every minute:</p>
+<pre>
counter value resulting rate
10000
10060 1; (10060-10000)/60 == 1
10120 1; (10120-10060)/60 == 1
unknown unknown; you don't know the last value
10240 unknown; you don't know the previous value
- 10300 1; (10300-10240)/60 == 1</PRE>
-<P>If the CDP was to be calculated from the last five updates, it would get
+ 10300 1; (10300-10240)/60 == 1</pre>
+<p>If the CDP was to be calculated from the last five updates, it would get
two unknown PDPs and three known PDPs. If xff would have been set to 0.5
which by the way is a commonly used factor, the CDP would have a known
value of 1. If xff would have been set to 0.2 then the resulting CDP
-would be unknown.</P>
-<P>You have to decide the proper values for heartbeat, number of PDPs per
+would be unknown.</p>
+<p>You have to decide the proper values for heartbeat, number of PDPs per
CDP and the xff factor. As you can see from the previous text they define
-the behavior of your RRA.</P>
-<P>
-<H2><A NAME="working with unknown data in your database">Working with unknown data in your database</A></H2>
-<P>As you have read in the previous chapter, entries in an RRA can be
+the behavior of your RRA.</p>
+<p>
+</p>
+<h2><a name="working_with_unknown_data_in_your_database">Working with unknown data in your database</a></h2>
+<p>As you have read in the previous chapter, entries in an RRA can be
set to the unknown value. If you do calculations with this type of
value, the result has to be unknown too. This means that an expression
-such as <CODE>result=a,b,+</CODE> will be unknown if either a or b is unknown.
+such as <code>result=a,b,+</code> will be unknown if either a or b is unknown.
It would be wrong to just ignore the unknown value and return the value
of the other parameter. By doing so, you would assume ``unknown'' means ``zero''
-and this is not true.</P>
-<P>There has been a case where somebody was collecting data for over a year.
+and this is not true.</p>
+<p>There has been a case where somebody was collecting data for over a year.
A new piece of equipment was installed, a new RRD was created and the
scripts were changed to add a counter from the old database and a counter
from the new database. The result was disappointing, a large part of
the statistics seemed to have vanished mysteriously ...
They of course didn't, values from the old database (known values) were
added to values from the new database (unknown values) and the result was
-unknown.</P>
-<P>In this case, it is fairly reasonable to use a CDEF that alters unknown
+unknown.</p>
+<p>In this case, it is fairly reasonable to use a CDEF that alters unknown
data into zero. The counters of the device were unknown (after all, it
wasn't installed yet!) but you know that the data rate through the device
-had to be zero (because of the same reason: it was not installed).</P>
-<P>There are some examples further on that make this change.</P>
-<P>
-<H2><A NAME="infinity">Infinity</A></H2>
-<P>Infinite data is another form of a special number. It cannot be graphed
+had to be zero (because of the same reason: it was not installed).</p>
+<p>There are some examples further on that make this change.</p>
+<p>
+</p>
+<h2><a name="infinity">Infinity</a></h2>
+<p>Infinite data is another form of a special number. It cannot be graphed
because by definition you would never reach the infinite value. You could
think of positive and negative infinity (I'm not sure if mathematicians
-will agree) depending on the position relative to zero.</P>
-<P>RRDtool is capable of representing (-not- graphing!) infinity by stopping
+will agree) depending on the position relative to zero.</p>
+<p>RRDtool is capable of representing (-not- graphing!) infinity by stopping
at its current maximum (for positive infinity) or minimum (for negative
-infinity) without knowing this maximum (minimum).</P>
-<P>Infinity in rrdtool is mostly used to draw an AREA without knowing its
+infinity) without knowing this maximum (minimum).</p>
+<p>Infinity in rrdtool is mostly used to draw an AREA without knowing its
vertical dimensions. You can think of it as drawing an AREA with an
infinite height and displaying only the part that is visible in the
current graph. This is probably a good way to approximate infinity
-and it sure allows for some neat tricks. See below for examples.</P>
-<P>
-<H2><A NAME="working with unknown data and infinity">Working with unknown data and infinity</A></H2>
-<P>Sometimes you would like to discard unknown data and pretend it is zero
+and it sure allows for some neat tricks. See below for examples.</p>
+<p>
+</p>
+<h2><a name="working_with_unknown_data_and_infinity">Working with unknown data and infinity</a></h2>
+<p>Sometimes you would like to discard unknown data and pretend it is zero
(or any other value for that matter) and sometimes you would like to
pretend that known data is unknown (to discard known-to-be-wrong data).
This is why CDEFs have support for unknown data. There are also examples
-available that show unknown data by using infinity.</P>
-<P>
-<HR>
-<H1><A NAME="some examples">Some examples</A></H1>
-<P>
-<H2><A NAME="example: using a recently created rrd">Example: using a recently created RRD</A></H2>
-<P>You are keeping statistics on your router for over a year now. Recently
+available that show unknown data by using infinity.</p>
+<p>
+</p>
+<hr />
+<h1><a name="some_examples">Some examples</a></h1>
+<p>
+</p>
+<h2><a name="example:_using_a_recently_created_rrd">Example: using a recently created RRD</a></h2>
+<p>You are keeping statistics on your router for over a year now. Recently
you installed an extra router and you would like to show the combined
-throughput for these two devices.</P>
-<P>If you just add up the counters from router.rrd and router2.rrd, you
+throughput for these two devices.</p>
+<p>If you just add up the counters from router.rrd and router2.rrd, you
will add known data (from router.rrd) to unknown data (from router2.rrd) for
-the bigger part of your stats. You could solve this in a few ways:</P>
-<UL>
-<LI>
+the bigger part of your stats. You could solve this in a few ways:</p>
+<ul>
+<li></li>
While creating the new database, fill it with zeros from the start to now.
You have to make the database start at or before the least recent time in
the other database.
-<P></P>
-<LI>
+<p></p>
+<li></li>
Alternately you could use CDEF and alter unknown data to zero.
-<P></P></UL>
-<P>Both methods have their pros and cons. The first method is troublesome and
+<p></p></ul>
+<p>Both methods have their pros and cons. The first method is troublesome and
if you want to do that you have to figure it out yourself. It is not
possible to create a database filled with zeros, you have to put them in
-on purpose. Implementing the second method is described next:</P>
-<P>What we want is: ``if the value is unknown, replace it with zero''. This
+on purpose. Implementing the second method is described next:</p>
+<p>What we want is: ``if the value is unknown, replace it with zero''. This
could be writte in pseudo-code as: if (value is unknown) then (zero)
else (value). When reading the rrdgraph manual you notice the ``UN''
function that returns zero or one. You also notice the ``IF'' function
-that takes zero or one as input.</P>
-<P>First look at the ``IF'' function. It takes three values from the stack,
+that takes zero or one as input.</p>
+<p>First look at the ``IF'' function. It takes three values from the stack,
the first value is the decision point, the second value is returned to
the stack if the evaluation is ``true'' and if not, the third value is
returned to the stack. We want the ``UN'' function to decide what happens
-so we combine those two functions in one CDEF.</P>
-<P>Lets write down the two possible paths for the ``IF'' function:</P>
-<PRE>
+so we combine those two functions in one CDEF.</p>
+<p>Lets write down the two possible paths for the ``IF'' function:</p>
+<pre>
if true return a
- if false return b</PRE>
-<P>In RPN: <CODE>result=x,a,b,IF</CODE> where ``x'' is either true or false.</P>
-<P>Now we have to fill in ``x'', this should be the ``(value is unknown)'' part
-and this is in RPN: <CODE>result=value,UN</CODE></P>
-<P>We now combine them: <CODE>result=value,UN,a,b,IF</CODE> and when we fill in the
-appropriate things for ``a'' and ``b'' we're finished:</P>
-<P><CODE>CDEF:result=value,UN,0,value,IF</CODE></P>
-<P>You may want to read Steve Raders RPN guide if you have difficulties
-with the way I explained this last example.</P>
-<P>If you want to check this RPN expression, just mimic rrdtools behavior:</P>
-<PRE>
+ if false return b</pre>
+<p>In RPN: <code>result=x,a,b,IF</code> where ``x'' is either true or false.</p>
+<p>Now we have to fill in ``x'', this should be the ``(value is unknown)'' part
+and this is in RPN: <code>result=value,UN</code></p>
+<p>We now combine them: <code>result=value,UN,a,b,IF</code> and when we fill in the
+appropriate things for ``a'' and ``b'' we're finished:</p>
+<p><code>CDEF:result=value,UN,0,value,IF</code></p>
+<p>You may want to read Steve Raders RPN guide if you have difficulties
+with the way I explained this last example.</p>
+<p>If you want to check this RPN expression, just mimic rrdtools behavior:</p>
+<pre>
For any known value, the expression evaluates as follows:
CDEF:result=value,UN,0,value,IF (value,UN) is not true so it becomes 0
CDEF:result=0,0,value,IF "IF" will return the 3rd value
- CDEF:result=value The known value is returned</PRE>
-<PRE>
+ CDEF:result=value The known value is returned</pre>
+<pre>
For the unknown value, this happens:
CDEF:result=value,UN,0,value,IF (value,UN) is true so it becomes 1
CDEF:result=1,0,value,IF "IF" sees 1 and returns the 2nd value
- CDEF:result=0 Zero is returned</PRE>
-<P>Of course, if you would like to see another value instead of zero, you
-can use that other value.</P>
-<P>Eventually, when all unknown data is removed from the RRD, you may want
-to remove this rule so that unknown data is properly displayed.</P>
-<P>
-<H2><A NAME="example: better handling of unknown data, by using time">Example: better handling of unknown data, by using time</A></H2>
-<P>Above example has one drawback. If you do log unknown data in
+ CDEF:result=0 Zero is returned</pre>
+<p>Of course, if you would like to see another value instead of zero, you
+can use that other value.</p>
+<p>Eventually, when all unknown data is removed from the RRD, you may want
+to remove this rule so that unknown data is properly displayed.</p>
+<p>
+</p>
+<h2><a name="example:_better_handling_of_unknown_data,_by_using_time">Example: better handling of unknown data, by using time</a></h2>
+<p>Above example has one drawback. If you do log unknown data in
your database after installing your new equipment, it will also be
translated into zero and therefore you won't see that there was a
-problem. This is not good and what you really want to do is:</P>
-<UL>
-<LI>
+problem. This is not good and what you really want to do is:</p>
+<ul>
+<li></li>
If there is unknown data, look at the time that this sample was taken
-<P></P>
-<LI>
+<p></p>
+<li></li>
If the unknown value is before time xxx, make it zero
-<P></P>
-<LI>
+<p></p>
+<li></li>
If it is after time xxx, leave it as unknown data
-<P></P></UL>
-<P>This is doable: you can compare the time that the sample was taken
+<p></p></ul>
+<p>This is doable: you can compare the time that the sample was taken
to some known time. Assuming you started to monitor your device on
Friday September 17, 00:35:57 MET DST. Translate this time in seconds
since 1970-01-01 and it becomes 937521357. If you process unknown values
that were received after this time, you want to leave them unknown and
if they were ``received'' before this time, you want to translate them
into zero (so you can effectively ignore them while adding them to your
-other routers counters).</P>
-<P>Translating Friday September 17, 00:35:57 MET DST into 937521357 can
-be done by, for instance, using gnu date:</P>
-<PRE>
- date -d "19990917 00:35:57" +%s</PRE>
-<P>You could also dump the database and see where the data starts to be
-known. There are several other ways of doing this, just pick one.</P>
-<P>Now we have to create the magic that allows us to process unknown
+other routers counters).</p>
+<p>Translating Friday September 17, 00:35:57 MET DST into 937521357 can
+be done by, for instance, using gnu date:</p>
+<pre>
+ date -d "19990917 00:35:57" +%s</pre>
+<p>You could also dump the database and see where the data starts to be
+known. There are several other ways of doing this, just pick one.</p>
+<p>Now we have to create the magic that allows us to process unknown
values different depending on the time that the sample was taken.
-This is a three step process:</P>
-<OL>
-<LI>
+This is a three step process:</p>
+<ol>
+<li></li>
If the timestamp of the value is after 937521357, leave it as is
-<P></P>
-<LI>
+<p></p>
+<li></li>
If the value is a known value, leave it as is
-<P></P>
-<LI>
+<p></p>
+<li></li>
Change the unknown value into zero.
-<P></P></OL>
-<P>Lets look at part one:</P>
-<PRE>
- if (true) return the original value</PRE>
-<P>We rewrite this:</P>
-<PRE>
+<p></p></ol>
+<p>Lets look at part one:</p>
+<pre>
+ if (true) return the original value</pre>
+<p>We rewrite this:</p>
+<pre>
if (true) return "a"
- if (false) return "b"</PRE>
-<P>We need to calculate true or false from step 1. There is a function
+ if (false) return "b"</pre>
+<p>We need to calculate true or false from step 1. There is a function
available that returns the timestamp for the current sample. It is
called, how surprisingly, ``TIME''. This time has to be compared to
a constant number, we need ``GT''. The output of ``GT'' is true or false
and this is good input to ``IF''. We want ``if (time > 937521357) then
-(return a) else (return b)''.</P>
-<P>This process was already described toroughly in the previous chapter
-so lets do it quick:</P>
-<PRE>
+(return a) else (return b)''.</p>
+<p>This process was already described toroughly in the previous chapter
+so lets do it quick:</p>
+<pre>
if (x) then a else b
where x represents "time>937521357"
where a represents the original value
where b represents the outcome of the previous example
-</PRE>
-<PRE>
-
- time>937521357 --> TIME,937521357,GT</PRE>
-<PRE>
+
+ time>937521357 --> TIME,937521357,GT</pre>
+<pre>
if (x) then a else b --> x,a,b,IF
substitute x --> TIME,937521357,GT,a,b,IF
substitute a --> TIME,937521357,GT,value,b,IF
- substitute b --> TIME,937521357,GT,value,value,UN,0,value,IF,IF</PRE>
-<P>We end up with:
-<CODE>CDEF:result=TIME,937521357,GT,value,value,UN,0,value,IF,IF</CODE></P>
-<P>This looks very complex however as you can see it was not too hard to
-come up with.</P>
-<P>
-<H2><A NAME="example: pretending weird data isn't there">Example: Pretending weird data isn't there</A></H2>
-<P>Suppose you have a problem that shows up as huge spikes in your graph.
+ substitute b --> TIME,937521357,GT,value,value,UN,0,value,IF,IF</pre>
+<p>We end up with:
+<code>CDEF:result=TIME,937521357,GT,value,value,UN,0,value,IF,IF</code></p>
+<p>This looks very complex however as you can see it was not too hard to
+come up with.</p>
+<p>
+</p>
+<h2><a name="example:_pretending_weird_data_isn't_there">Example: Pretending weird data isn't there</a></h2>
+<p>Suppose you have a problem that shows up as huge spikes in your graph.
You know this happens and why so you decide to work around the problem.
Perhaps you're using your network to do a backup at night and by doing
so you get almost 10mb/s while the rest of your network activity does
-not produce numbers higher than 100kb/s.</P>
-<P>There are two options:</P>
-<OL>
-<LI>
+not produce numbers higher than 100kb/s.</p>
+<p>There are two options:</p>
+<ol>
+<li></li>
If the number exceeds 100kb/s it is wrong and you want it masked out
by changing it into unknown
-<P></P>
-<LI>
+<p></p>
+<li></li>
You don't want the graph to show more than 100kb/s
-<P></P></OL>
-<P>Pseudo code: if (number > 100) then unknown else number
+<p></p></ol>
+<p>Pseudo code: if (number > 100) then unknown else number
or
-Pseudo code: if (number > 100) then 100 else number.</P>
-<P>The second ``problem'' may also be solved by using the rigid option of
+Pseudo code: if (number > 100) then 100 else number.</p>
+<p>The second ``problem'' may also be solved by using the rigid option of
rrdtool graph, however this has not the same result. In this example
you can end up with a graph that does autoscaling. Also, if you use
-the numbers to display maxima they will be set to 100kb/s.</P>
-<P>We use ``IF'' and ``GT'' again. ``if (x) then (y) else (z)'' is written
+the numbers to display maxima they will be set to 100kb/s.</p>
+<p>We use ``IF'' and ``GT'' again. ``if (x) then (y) else (z)'' is written
down as ``CDEF:result=x,y,z,IF''; now fill in x, y and z.
For x you fill in ``number greater than 100kb/s'' becoming
``number,100000,GT'' (kilo is 1000 and b/s is what we measure!).
The ``z'' part is ``number'' in both cases and the ``y'' part is either
-``UNKN'' for unknown or ``100000'' for 100kb/s.</P>
-<P>The two CDEF expressions would be:</P>
-<PRE>
+``UNKN'' for unknown or ``100000'' for 100kb/s.</p>
+<p>The two CDEF expressions would be:</p>
+<pre>
CDEF:result=number,100000,GT,UNKN,number,IF
- CDEF:result=number,100000,GT,100000,number,IF</PRE>
-<P>
-<H2><A NAME="example: working on a certain time span">Example: working on a certain time span</A></H2>
-<P>If you want a graph that spans a few weeks, but would only want to
+ CDEF:result=number,100000,GT,100000,number,IF</pre>
+<p>
+</p>
+<h2><a name="example:_working_on_a_certain_time_span">Example: working on a certain time span</a></h2>
+<p>If you want a graph that spans a few weeks, but would only want to
see some routers data for one week, you need to ``hide'' the rest of
the time frame. Don't ask me when this would be useful, it's just
-here for the example :)</P>
-<P>We need to compare the time stamp to a begin date and an end date.
-Comparing isn't difficult:</P>
-<PRE>
+here for the example :)</p>
+<p>We need to compare the time stamp to a begin date and an end date.
+Comparing isn't difficult:</p>
+<pre>
TIME,begintime,GE
- TIME,endtime,LE</PRE>
-<P>These two parts of the CDEF produce either 0 for false or 1 for true.
+ TIME,endtime,LE</pre>
+<p>These two parts of the CDEF produce either 0 for false or 1 for true.
We can now check if they are both 0 (or 1) using a few IF statements
but, as Wataru Satoh pointed out, we can use the ``*'' or ``+'' functions
-as locical AND and locical OR.</P>
-<P>For ``*'', the result will be zero (false) if either one of the two
+as locical AND and locical OR.</p>
+<p>For ``*'', the result will be zero (false) if either one of the two
operators is zero. For ``+'', the result will only be false (0) when
two false (0) operators will be added. Warning: *any* number not
equal to 0 will be considered ``true''. This means that, for instance,
``-1,1,+'' (which should be ``true or true'') will become FALSE ...
In other words, use ``+'' only if you know for sure that you have positive
-numbers (or zero) only.</P>
-<P>Let's compile the complete CDEF:</P>
-<PRE>
+numbers (or zero) only.</p>
+<p>Let's compile the complete CDEF:</p>
+<pre>
DEF:ds0=router1.rrd:AVERAGE
- CDEF:ds0modified=TIME,begintime,GE,TIME,endtime,LE,*,UNKN,ds0,IF</PRE>
-<P>This will return the value of ds0 if both comparisons return true. You
-could also do it the other way around:</P>
-<PRE>
+ CDEF:ds0modified=TIME,begintime,GE,TIME,endtime,LE,*,UNKN,ds0,IF</pre>
+<p>This will return the value of ds0 if both comparisons return true. You
+could also do it the other way around:</p>
+<pre>
DEF:ds0=router1.rrd:AVERAGE
- CDEF:ds0modified=TIME,begintime,LT,TIME,endtime,GT,+,UNKN,ds0,IF</PRE>
-<P>This will return an UNKNOWN if either comparison returns true.</P>
-<P>
-<H2><A NAME="example: you suspect to have problems and want to see unknown data.">Example: You suspect to have problems and want to see unknown data.</A></H2>
-<P>Suppose you add up the number of active users on several terminal servers.
+ CDEF:ds0modified=TIME,begintime,LT,TIME,endtime,GT,+,UNKN,ds0,IF</pre>
+<p>This will return an UNKNOWN if either comparison returns true.</p>
+<p>
+</p>
+<h2><a name="example:_you_suspect_to_have_problems_and_want_to_see_unknown_data.">Example: You suspect to have problems and want to see unknown data.</a></h2>
+<p>Suppose you add up the number of active users on several terminal servers.
If one of them doesn't give an answer (or an incorrect one) you get ``NaN''
-in the database (``Not a Number'') and NaN is evaluated as Unknown.</P>
-<P>In this case, you would like to be alerted to it and the sum of the
-remaining values is of no value to you.</P>
-<P>It would be something like:</P>
-<PRE>
+in the database (``Not a Number'') and NaN is evaluated as Unknown.</p>
+<p>In this case, you would like to be alerted to it and the sum of the
+remaining values is of no value to you.</p>
+<p>It would be something like:</p>
+<pre>
DEF:users1=location1.rrd:onlineTS1:LAST
DEF:users2=location1.rrd:onlineTS2:LAST
DEF:users3=location2.rrd:onlineTS1:LAST
DEF:users4=location2.rrd:onlineTS2:LAST
- CDEF:allusers=users1,users2,users3,users4,+,+,+</PRE>
-<P>If you now plot allusers, unknown data in one of users1..users4 will
+ CDEF:allusers=users1,users2,users3,users4,+,+,+</pre>
+<p>If you now plot allusers, unknown data in one of users1..users4 will
show up as a gap in your graph. You want to modify this to show a
-bright red line, not a gap.</P>
-<P>Define an extra CDEF that is unknown if all is okay and is infinite if
-there is an unknown value:</P>
-<PRE>
- CDEF:wrongdata=allusers,UN,INF,UNKN,IF</PRE>
-<P>``allusers,UN'' will evaluate to either true or false, it is the (x) part
+bright red line, not a gap.</p>
+<p>Define an extra CDEF that is unknown if all is okay and is infinite if
+there is an unknown value:</p>
+<pre>
+ CDEF:wrongdata=allusers,UN,INF,UNKN,IF</pre>
+<p>``allusers,UN'' will evaluate to either true or false, it is the (x) part
of the ``IF'' function and it checks if allusers is unknown.
The (y) part of the ``IF'' function is set to ``INF'' (which means infinity)
-and the (z) part of the function returns ``UNKN''.</P>
-<P>The logic is: if (allusers == unknown) then return INF else return UNKN.</P>
-<P>You can now use AREA to display this ``wrongdata'' in bright red. If it
+and the (z) part of the function returns ``UNKN''.</p>
+<p>The logic is: if (allusers == unknown) then return INF else return UNKN.</p>
+<p>You can now use AREA to display this ``wrongdata'' in bright red. If it
is unknown (because allusers is known) then the red AREA won't show up.
If the value is INF (because allusers is unknown) then the red AREA will
-be filled in on the graph at that particular time.</P>
-<PRE>
+be filled in on the graph at that particular time.</p>
+<pre>
AREA:allusers#0000FF:combined user count
- AREA:wrongdata#FF0000:unknown data</PRE>
-<P>
-<H2><A NAME="same example useful with stacked data:">Same example useful with STACKed data:</A></H2>
-<P>If you use stack in the previous example (as I would do) then you don't
+ AREA:wrongdata#FF0000:unknown data</pre>
+<p>
+</p>
+<h2><a name="same_example_useful_with_stacked_data:">Same example useful with STACKed data:</a></h2>
+<p>If you use stack in the previous example (as I would do) then you don't
add up the values. Therefore, there is no relationship between the
four values and you don't get a single value to test.
Suppose users3 would be unknown at one point in time: users1 is plotted,
users2 is stacked on top of users1, users3 is unknown and therefore
nothing happens, users4 is stacked on top of users2.
-Add the extra CDEFs anyway and use them to overlay the ``normal'' graph:</P>
-<PRE>
+Add the extra CDEFs anyway and use them to overlay the ``normal'' graph:</p>
+<pre>
DEF:users1=location1.rrd:onlineTS1:LAST
DEF:users2=location1.rrd:onlineTS2:LAST
DEF:users3=location2.rrd:onlineTS1:LAST
@@ -615,45 +634,47 @@
STACK:users2#00FF00:users at ts2
STACK:users3#00FFFF:users at ts3
STACK:users4#FFFF00:users at ts4
- AREA:wrongdata#FF0000:unknown data</PRE>
-<P>If there is unknown data in one of users1..users4, the ``wrongdata'' AREA
+ AREA:wrongdata#FF0000:unknown data</pre>
+<p>If there is unknown data in one of users1..users4, the ``wrongdata'' AREA
will be drawn and because it starts at the X-axis and has infinite height
-it will effectively overwrite the STACKed parts.</P>
-<P>You could combine the two CDEF lines into one (we don't use ``allusers'')
-if you like. But there are good reasons for writting two CDEFS:</P>
-<UL>
-<LI>
+it will effectively overwrite the STACKed parts.</p>
+<p>You could combine the two CDEF lines into one (we don't use ``allusers'')
+if you like. But there are good reasons for writting two CDEFS:</p>
+<ul>
+<li></li>
It improves the readability of the script
-<P></P>
-<LI>
+<p></p>
+<li></li>
It can be used inside GPRINT to display the total number of users
-<P></P></UL>
-<P>If you choose to combine them, you can substitute the ``allusers'' in the
-second CDEF with the part after the equal sign from the first line:</P>
-<PRE>
- CDEF:wrongdata=users1,users2,users3,users4,+,+,+,UN,INF,UNKN,IF</PRE>
-<P>If you do so, you won't be able to use these next GPRINTs:</P>
-<PRE>
+<p></p></ul>
+<p>If you choose to combine them, you can substitute the ``allusers'' in the
+second CDEF with the part after the equal sign from the first line:</p>
+<pre>
+ CDEF:wrongdata=users1,users2,users3,users4,+,+,+,UN,INF,UNKN,IF</pre>
+<p>If you do so, you won't be able to use these next GPRINTs:</p>
+<pre>
COMMENT:"Total number of users seen"
GPRINT:allusers:MAX:"Maximum: %6.0lf"
GPRINT:allusers:MIN:"Minimum: %6.0lf"
GPRINT:allusers:AVERAGE:"Average: %6.0lf"
- GPRINT:allusers:LAST:"Current: %6.0lf\n"</PRE>
-<P>
-<HR>
-<H1><A NAME="the examples from the rrd graph manual page">The examples from the rrd graph manual page</A></H1>
-<P>
-<H2><A NAME="degrees celcius vs. degrees fahrenheit">Degrees Celcius vs. Degrees Fahrenheit</A></H2>
-<PRE>
+ GPRINT:allusers:LAST:"Current: %6.0lf\n"</pre>
+<p>
+</p>
+<hr />
+<h1><a name="the_examples_from_the_rrd_graph_manual_page">The examples from the rrd graph manual page</a></h1>
+<p>
+</p>
+<h2><a name="degrees_celcius_vs._degrees_fahrenheit">Degrees Celcius vs. Degrees Fahrenheit</a></h2>
+<pre>
rrdtool graph demo.gif --title="Demo Graph" \
DEF:cel=demo.rrd:exhaust:AVERAGE \
CDEF:far=cel,32,-,0.55555,* \
LINE2:cel#00a000:"D. Celsius" \
- LINE2:far#ff0000:"D. Fahrenheit\c"</PRE>
-<P>This example gets the DS called ``exhaust'' from database ``demo.rrd''
+ LINE2:far#ff0000:"D. Fahrenheit\c"</pre>
+<p>This example gets the DS called ``exhaust'' from database ``demo.rrd''
and puts the values in variable ``cel''. The CDEF used is evaluated
-as follows:</P>
-<PRE>
+as follows:</p>
+<pre>
CDEF:far=cel,32,-,0.5555,*
1. push variable "cel"
2. push 32
@@ -661,13 +682,14 @@
The stack now contains values that are 32 less than "cel"
4. push 0.5555
5. push function "multiply" and process it
- 6. the resulting value is now "(cel-32)*0.55555"</PRE>
-<P>Note that if you take the celcius to fahrenheit function you should
+ 6. the resulting value is now "(cel-32)*0.55555"</pre>
+<p>Note that if you take the celcius to fahrenheit function you should
be doing ``5/9*(cel-32)'' so 0.55555 is not exactly correct. It is close
-enough for this purpose and it saves a calculation.</P>
-<P>
-<H2><A NAME="changing unknown into zero">Changing unknown into zero</A></H2>
-<PRE>
+enough for this purpose and it saves a calculation.</p>
+<p>
+</p>
+<h2><a name="changing_unknown_into_zero">Changing unknown into zero</a></h2>
+<pre>
rrdtool graph demo.gif --title="Demo Graph" \
DEF:idat1=interface1.rrd:ds0:AVERAGE \
DEF:idat2=interface2.rrd:ds0:AVERAGE \
@@ -676,8 +698,8 @@
CDEF:agginput=idat1,UN,0,idat1,IF,idat2,UN,0,idat2,IF,+,8,* \
CDEF:aggoutput=odat1,UN,0,odat1,IF,odat2,UN,0,odat2,IF,+,8,* \
AREA:agginput#00cc00:Input Aggregate \
- LINE1:aggoutput#0000FF:Output Aggregate</PRE>
-<P>These two CDEFs are built from several functions. It helps to
+ LINE1:aggoutput#0000FF:Output Aggregate</pre>
+<p>These two CDEFs are built from several functions. It helps to
split them when viewing what they do.
Starting with the first CDEF we would get:
idat1,UN --> a
@@ -690,13 +712,14 @@
five items on the stack, it is done the same and will return answer
``h''. The resulting stack is therefore ``d,h''.
The expression has been simplified to ``d,h,+,8,*'' and it will now be
-easy to see that we add ``d'' and ``h'', and multiply the result with eight.</P>
-<P>The end result is that we have added ``idat1'' and ``idat2'' and in the
+easy to see that we add ``d'' and ``h'', and multiply the result with eight.</p>
+<p>The end result is that we have added ``idat1'' and ``idat2'' and in the
process we effectively ignored unknown values. The result is multiplied
-by eight, most likely to convert bytes/s to bits/s.</P>
-<P>
-<H2><A NAME="infinity demo">Infinity demo</A></H2>
-<PRE>
+by eight, most likely to convert bytes/s to bits/s.</p>
+<p>
+</p>
+<h2><a name="infinity_demo">Infinity demo</a></h2>
+<pre>
rrdtool graph example.png --title="INF demo" \
DEF:val1=some.rrd:ds0:AVERAGE \
DEF:val2=some.rrd:ds1:AVERAGE \
@@ -709,30 +732,30 @@
STACK:val2#00C000:Value2 \
STACK:val3#FFFF00:Value3 \
STACK:val4#FFC000:Value4 \
- AREA:whipeout#FF0000:Unknown</PRE>
-<P>This demo demonstrates two ways to use infinity. It is a bit tricky
-to see what happens in the ``background'' CDEF.</P>
-<PRE>
- "val4,POP,TIME,7200,%,3600,LE,INF,UNKN,IF"</PRE>
-<P>This RPN takes the value of ``val4'' as input and then immediately
+ AREA:whipeout#FF0000:Unknown</pre>
+<p>This demo demonstrates two ways to use infinity. It is a bit tricky
+to see what happens in the ``background'' CDEF.</p>
+<pre>
+ "val4,POP,TIME,7200,%,3600,LE,INF,UNKN,IF"</pre>
+<p>This RPN takes the value of ``val4'' as input and then immediately
removes it from the stack using ``POP''. The stack is now empty but
as a side result we now know the time that this sample was taken.
-This time is put on the stack by the ``TIME'' function.</P>
-<P>``TIME,7200,%'' takes the modulo of time and 7200 (which is two hours).
+This time is put on the stack by the ``TIME'' function.</p>
+<p>``TIME,7200,%'' takes the modulo of time and 7200 (which is two hours).
The resulting value on the stack will be a number in the range from
-0 to 7199.</P>
-<P>For people who don't know the modulo function: it is the remainder
+0 to 7199.</p>
+<p>For people who don't know the modulo function: it is the remainder
after an integer division. If you divide 16 by 3, the answer would
-be 5 and the remainder would be 1. So, ``16,3,%'' returns 1.</P>
-<P>We have the result of ``TIME,7200,%'' on the stack, lets call this
+be 5 and the remainder would be 1. So, ``16,3,%'' returns 1.</p>
+<p>We have the result of ``TIME,7200,%'' on the stack, lets call this
``a''. The start of the RPN has become ``a,3600,LE'' and this checks
if ``a'' is less or equal than ``3600''. It is true half of the time.
We now have to process the rest of the RPN and this is only a simple
``IF'' function that returns either ``INF'' or ``UNKN'' depending on the
-time. This is returned to variable ``background''.</P>
-<P>The second CDEF has been discussed earlyer in this document so we
-won't do that here.</P>
-<P>Now you can draw the different layers. Start with the background
+time. This is returned to variable ``background''.</p>
+<p>The second CDEF has been discussed earlyer in this document so we
+won't do that here.</p>
+<p>Now you can draw the different layers. Start with the background
that is either unknown (nothing to see) or infinite (the whole
positive part of the graph gets filled).
Next you draw the data on top of this background. It will overlay
@@ -740,54 +763,58 @@
case you end up with only three bars stacked on top of each other.
You don't want to see this because the data is only valid when all
four variables are valid. This is why you use the second CDEF, it
-will overlay the data with an AREA so the data cannot be seen anymore.</P>
-<P>If your data can also have negative values you also need to overwrite
+will overlay the data with an AREA so the data cannot be seen anymore.</p>
+<p>If your data can also have negative values you also need to overwrite
the other half of your graph. This can be done in a relatively simple
way: what you need is the ``wipeout'' variable and place a negative
sign before it: ``CDEF:wipeout2=wipeout,-1,*''
-</P>
-<PRE>
+</p>
+<pre>
-=head2 Filtering data</PRE>
-<P>You may do some complex data filtering:</P>
-<PRE>
- MEDIAN FILTER: filters shot noise</PRE>
-<PRE>
+=head2 Filtering data</pre>
+<p>You may do some complex data filtering:</p>
+<pre>
+ MEDIAN FILTER: filters shot noise</pre>
+<pre>
DEF:var=database.rrd:traffic:AVERAGE
CDEF:prev1=PREV(var)
CDEF:prev2=PREV(prev1)
CDEF:prev3=PREV(prev2)
CDEF:median=prev1,prev2,prev3,+,+,3,/
LINE3:median#000077:filtered
- LINE1:prev2#007700:'raw data'</PRE>
-<PRE>
- DERIVATE:</PRE>
-<PRE>
+ LINE1:prev2#007700:'raw data'</pre>
+<pre>
+ DERIVATE:</pre>
+<pre>
DEF:var=database.rrd:traffic:AVERAGE
CDEF:prev1=PREV(var)
CDEF:time=TIME
CDEF:prevtime=PREV(time)
CDEF:derivate=var,prev1,-,time,prevtime,-,/
LINE3:derivate#000077:derivate
- LINE1:var#007700:'raw data'</PRE>
-<P>
-<HR>
-<H1><A NAME="out of ideas for now">Out of ideas for now</A></H1>
-<P>This document was created from questions asked by either myself or
+ LINE1:var#007700:'raw data'</pre>
+<p>
+</p>
+<hr />
+<h1><a name="out_of_ideas_for_now">Out of ideas for now</a></h1>
+<p>This document was created from questions asked by either myself or
by other people on the list. Please let me know if you find errors
in it or if you have trouble understanding it. If you think there
-should be an addition, mail me: <<A HREF="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</A>></P>
-<P>Remember: <STRONG>No feedback equals no changes!</STRONG></P>
-<P>
-<HR>
-<H1><A NAME="see also">SEE ALSO</A></H1>
-<P>The RRDtool manpages</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Alex van den Bogaerdt
-<<A HREF="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</A>></P>
+should be an addition, mail me: <<a href="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</a>></p>
+<p>Remember: <strong>No feedback equals no changes!</strong></p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>The RRDtool manpages</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Alex van den Bogaerdt
+<<a href="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</a>>
+</p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdlast.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdlast.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdlast.txt 2003-02-20 15:24:02.000000000 -0800
@@ -2,23 +2,23 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool last - Return the date of the last data sample in
- an RRRRRRRRDDDD
+ an RRRRDD
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll llllaaaasssstttt _f_i_l_e_n_a_m_e
+SSYYNNOOPPSSIISS
+ rrrrddttooooll llaasstt _f_i_l_e_n_a_m_e
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The llllaaaasssstttt function returns the UNIX timestamp when the RRD
+DDEESSCCRRIIPPTTIIOONN
+ The llaasstt function returns the UNIX timestamp when the RRD
was last updated.
_f_i_l_e_n_a_m_e
- The name of the RRRRRRRRDDDD that contains the data.
+ The name of the RRRRDD that contains the data.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Russ Wright <rwwright at home.com>
-2002-02-26 1.0.40 RRDLAST(1)
+1.0.41 2002-02-26 RRDLAST(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtutorial.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtutorial.txt 2003-02-20 15:24:03.000000000 -0800
@@ -2,10 +2,10 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtutorial - Alex van den Bogaerdt's RRDtool tutorial
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
+DDEESSCCRRIIPPTTIIOONN
RRDtool is written by Tobias Oetiker <oetiker at ee.ethz.ch>
with contributions from many people all around the world.
This document is written by Alex van den Bogaerdt
@@ -19,15 +19,15 @@
general things about statistics with a focus on network-
ing.
-TTTTUUUUTTTTOOOORRRRIIIIAAAALLLL
- IIIImmmmppppoooorrrrttttaaaannnntttt
+TTUUTTOORRIIAALL
+ IImmppoorrttaanntt
Please don't skip ahead in this document! The first part
of this document explains the basics and may be boring.
But if you don't understand the basics, the examples will
not be as meaningful to you.
- WWWWhhhhaaaatttt iiiissss RRRRRRRRDDDDttttoooooooollll ????
+ WWhhaatt iiss RRRRDDttooooll ??
RRDtool refers to Round Robin Database tool. Round robin
is a technique that works with a fixed amount of data, and
@@ -44,7 +44,7 @@
RRDtool works with with Round Robin Databases (RRDs). It
stores and retrieves data from them.
- WWWWhhhhaaaatttt ddddaaaattttaaaa ccccaaaannnn bbbbeeee ppppuuuutttt iiiinnnnttttoooo aaaannnn RRRRDDDDDDDD ????
+ WWhhaatt ddaattaa ccaann bbee ppuutt iinnttoo aann RRDDDD ??
You name it, it will probably fit. You should be able to
measure some value at several points in time and provide
@@ -65,7 +65,7 @@
- WWWWhhhhaaaatttt ccccaaaannnn IIII ddddoooo wwwwiiiitttthhhh tttthhhhiiiissss ttttoooooooollll ????
+ WWhhaatt ccaann II ddoo wwiitthh tthhiiss ttooooll ??
RRDtool originated from MRTG (Multi Router Traffic Gra-
pher). MRTG started as a tiny little script for graphing
@@ -88,8 +88,8 @@
You need a sensor to measure the data and be able to feed
the numbers to RRDtool.
- WWWWhhhhaaaatttt iiiiffff IIII ssssttttiiiillllllll hhhhaaaavvvveeee pppprrrroooobbbblllleeeemmmmssss aaaafffftttteeeerrrr rrrreeeeaaaaddddiiiinnnngggg tttthhhhiiiissss ddddooooccccuuuummmmeeeennnntttt
- ????
+ WWhhaatt iiff II ssttiillll hhaavvee pprroobblleemmss aafftteerr rreeaaddiinngg tthhiiss ddooccuummeenntt
+ ??
First of all: read it again! You may have missed some-
thing. If you are unable to compile the sources and you
@@ -111,12 +111,13 @@
usage of the list.
I suggest you take a moment to subscribe to the mailing
- list right now by sending an email to <rrd-users-
- request at list.ee.ethz.ch> with a subject of "subscribe". If
- you ever want to leave this list, you write an email to
- the same address but now with a subject of "unsubscribe".
+ list right now by sending an email to
+ <rrd-users-request at list.ee.ethz.ch> with a subject of
+ "subscribe". If you ever want to leave this list, you
+ write an email to the same address but now with a subject
+ of "unsubscribe".
- HHHHoooowwww wwwwiiiillllllll yyyyoooouuuu hhhheeeellllpppp mmmmeeee ????
+ HHooww wwiillll yyoouu hheellpp mmee ??
By giving you some detailed descriptions with detailed
examples. It is assumed that following the instructions
@@ -129,10 +130,10 @@
works.
You will need to know something about hexadecimal numbers.
- If you don't then start with reading the bin_dec_hex
- manpage before you continue here.
+ If you don't then start with reading bin_dec_hex before
+ you continue here.
- YYYYoooouuuurrrr ffffiiiirrrrsssstttt RRRRoooouuuunnnndddd RRRRoooobbbbiiiinnnn DDDDaaaattttaaaabbbbaaaasssseeee
+ YYoouurr ffiirrsstt RRoouunndd RRoobbiinn DDaattaabbaassee
In my opinion the best way to learn something is to actu-
ally do it. Why not start right now? We will create a
@@ -239,7 +240,7 @@
(So enter: "rrdtool create test.rrd --start 920804400 DS
...")
- WWWWhhhhaaaatttt hhhhaaaassss bbbbeeeeeeeennnn ccccrrrreeeeaaaatttteeeedddd ????
+ WWhhaatt hhaass bbeeeenn ccrreeaatteedd ??
We created the round robin database called test (test.rrd)
which starts at noon the day I started (7th of march,
@@ -327,7 +328,6 @@
-
920804700: NaN
920805000: 0.04
920805300: 0.02
@@ -356,7 +356,7 @@
What this output represents will become clear in the rest
of the tutorial.
- IIIItttt iiiissss ttttiiiimmmmeeee ttttoooo ccccrrrreeeeaaaatttteeee ssssoooommmmeeee ggggrrrraaaapppphhhhiiiiccccssss
+ IItt iiss ttiimmee ttoo ccrreeaattee ssoommee ggrraapphhiiccss
Try the following command:
@@ -395,7 +395,7 @@
favorite image viewer. Web browsers will display the GIF
via the URL "file://the/path/to/speed.gif"
- GGGGrrrraaaapppphhhhiiiiccccssss wwwwiiiitttthhhh ssssoooommmmeeee mmmmaaaatttthhhh
+ GGrraapphhiiccss wwiitthh ssoommee mmaatthh
When looking at the image, you notice that the horizontal
axis is labeled 12:10, 12:20, 12:30, 12:40 and 12:50. The
@@ -487,8 +487,7 @@
Check if kmh is greater than 100 ( kmh,100 ) GT
If so, return kmh, else return 0 ((( kmh,100) GT ), kmh, 0) IF
-
- GGGGrrrraaaapppphhhhiiiiccccssss MMMMaaaaggggiiiicccc
+ GGrraapphhiiccss MMaaggiicc
I like to believe there are virtually no limits to how
RRDtool graph can manipulate data. I will not explain how
@@ -527,7 +526,8 @@
Netscape in particular has a problem doing so and you'll
need to click reload while pressing the shift key).
- UUUUppppddddaaaatttteeeessss iiiinnnn RRRReeeeaaaalllliiiittttyyyy
+
+ UUppddaatteess iinn RReeaalliittyy
We've already used the "update" command: it took one or
more parameters in the form of "<time>:<value>". You'll be
@@ -552,7 +552,7 @@
above. You could put them in a script. After running that
script, view index.html
- SSSSoooommmmeeee wwwwoooorrrrddddssss oooonnnn SSSSNNNNMMMMPPPP
+ SSoommee wwoorrddss oonn SSNNMMPP
I can imagine very few people will be able to get real
data from their car every five minutes, all other people
@@ -695,7 +695,7 @@
device, continue on with this tutorial. If not, then go
back and re-read this part.
- AAAA RRRReeeeaaaallll WWWWoooorrrrlllldddd EEEExxxxaaaammmmpppplllleeee
+ AA RReeaall WWoorrlldd EExxaammppllee
Let the fun begin. First, create a new database. It con-
tains data from two counters, called input and output. The
@@ -791,7 +791,7 @@
megabits per second.
- CCCCoooonnnnssssoooolllliiiiddddaaaattttiiiioooonnnn FFFFuuuunnnnccccttttiiiioooonnnnssss
+ CCoonnssoolliiddaattiioonn FFuunnccttiioonnss
A few paragraphs back I mentioned the possibility of keep-
ing the maximum values instead of the average values.
@@ -865,7 +865,7 @@
be better off if you would not have the graphics at all in
that case.
- LLLLeeeetttt''''ssss rrrreeeevvvviiiieeeewwww wwwwhhhhaaaatttt yyyyoooouuuu nnnnoooowwww sssshhhhoooouuuulllldddd kkkknnnnoooowwww....
+ LLeett''ss rreevviieeww wwhhaatt yyoouu nnooww sshhoouulldd kknnooww..
You now know how to create a database. You can put the
numbers in it, get them out again by creating an image, do
@@ -882,7 +882,7 @@
with the rest of this doc but also in your day to day mon-
itoring long after you read this introduction.
- DDDDaaaattttaaaa SSSSoooouuuurrrrcccceeee TTTTyyyyppppeeeessss
+ DDaattaa SSoouurrccee TTyyppeess
All right, you feel like continuing. Welcome back and get
ready for an increased speed in the examples and explana-
@@ -955,8 +955,7 @@
DEF:linec=all.rrd:c:AVERAGE LINE3:linec#0000FF:"Line C" \
DEF:lined=all.rrd:d:AVERAGE LINE3:lined#000000:"Line D"
-
- RRRRRRRRDDDDttttoooooooollll uuuunnnnddddeeeerrrr tttthhhheeee MMMMiiiiccccrrrroooossssccccooooppppeeee
+ RRRRDDttooooll uunnddeerr tthhee MMiiccrroossccooppee
+o Line A is a counter so it should continuously increment
@@ -969,8 +968,8 @@
should match what we put in: a sort of a wave.
+o Line C is derive. It should be a counter that can
- decrease. It does so between 2400 and 0, with 1800 in-
- between.
+ decrease. It does so between 2400 and 0, with 1800
+ in-between.
+o Line D is of type absolute. This is like counter but it
works on values without calculating the difference. The
@@ -1023,7 +1022,7 @@
delta stays at a constant 300 and therefore the division
of the two gives increasing results.
- CCCCoooouuuunnnntttteeeerrrr WWWWrrrraaaappppssss
+ CCoouunntteerr WWrraappss
There are a few more basics to show. Some important
options are still to be covered and we haven't look at
@@ -1139,7 +1138,7 @@
that they are correct. Always judge the graph with a
healthy dose of paranoia if it looks weird.
- DDDDaaaattttaaaa RRRReeeessssaaaammmmpppplllliiiinnnngggg
+ DDaattaa RReessaammpplliinngg
One important feature of RRDtool has not been explained
yet: It is virtually impossible to collect the data and
@@ -1183,9 +1182,6 @@
for Dos: copy seconds1.rrd seconds2.rrd
for vms: how would I know :)
-
-
-
rrdtool update seconds1.rrd \
920805000:000 920805300:300 920805600:600 920805900:900
rrdtool update seconds2.rrd \
@@ -1210,7 +1206,7 @@
Both graphs should show the same.
-WWWWRRRRAAAAPPPPUUUUPPPP
+WWRRAAPPUUPP
It's time to wrap up this document. You now know all the
basics to be able to work with RRDtool and to read the
documentation available. There is plenty more to discover
@@ -1219,7 +1215,7 @@
examples provided and using only RRDtool. You could also
use the front ends that are available.
-MMMMAAAAIIIILLLLIIIINNNNGGGGLLLLIIIISSSSTTTT
+MMAAIILLIINNGGLLIISSTT
Remember to subscribe to the mailing-list. Even if you are
not answering the mails that come by, it helps both you
and the rest. A lot of the stuff that I know about MRTG
@@ -1231,10 +1227,10 @@
be people who ask questions that you can answer because
you read this and other documentation and they didn't.
-SSSSEEEEEEEE AAAALLLLSSSSOOOO
+SSEEEE AALLSSOO
The RRDtool manpages
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
I hope you enjoyed the examples and their descriptions. If
you do, help other people by pointing them to this docu-
ment when they are asking basic questions. They will not
@@ -1245,4 +1241,4 @@
-2002-02-27 1.0.40 RRDTUTORIAL(1)
+1.0.41 2002-02-27 RRDTUTORIAL(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.pod
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdgraph.pod (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdgraph.pod 2003-02-20 15:24:03.000000000 -0800
@@ -11,11 +11,12 @@
S<[B<-e>|B<--end> I<seconds>]>
S<[B<-x>|B<--x-grid> I<x-axis grid and label>]>
S<[B<-y>|B<--y-grid> I<y-axis grid and label>]>
-S<[B<--alt-y-grid>]>
-S<[B<--alt-y-mrtg>]>
-S<[B<--alt-autoscale>]>
-S<[B<--alt-autoscale-max>]>
-S<[B<--units-exponent>]> I<value>]>
+S<[B<-Y>|B<--alt-y-grid>]>
+S<[B<-R>|B<--alt-y-mrtg>]>
+S<[B<-A>|B<--alt-autoscale>]>
+S<[B<-M>|B<--alt-autoscale-max>]>
+S<[B<-N>|B<--no-minor>]>
+S<[B<-X>|B<--units-exponent>]> I<value>]>
S<[B<-v>|B<--vertical-label> I<text>]>
S<[B<-w>|B<--width> I<pixels>]>
S<[B<-h>|B<--height> I<pixels>]>
@@ -31,7 +32,7 @@
S<[B<-l>|B<--lower-limit> I<value>]>
S<[B<-g>|B<--no-legend>]>
S<[B<-r>|B<--rigid>]>
-S<[B<--step> I<value>]>
+S<[B<-S>|B<--step> I<value>]>
S<[B<-b>|B<--base> I<value>]>
S<[B<-c>|B<--color> I<COLORTAG>B<#>I<rrggbb>]>
S<[B<-t>|B<--title> I<title>]>
@@ -130,19 +131,26 @@
If you want no y-grid at all set specify the magic word B<none>.
-=item B<--alt-y-grid>
+=item B<-Y>|B<--alt-y-grid>
Place Y grid dynamically based on graph Y range. Algorithm ensures
that you always have grid, that there are enough but not too many
grid lines and the grid is metric. That is grid lines are placed
every 1, 2, 5 or 10 units. (contributed by Sasha Mikheev)
-=item B<--alt-y-mrtg>
+=item B<--no-minor>
+
+Turn off the minor grid lines. This is partcularly useful for small
+graphs which can be cluttered with the minor grid lines. (contributed
+by Travis Brown)
+
+
+=item B<-R>|B<--alt-y-mrtg>
Y grid placed on graph Y range mimmics mrtg's (rateup-generated) graphs.
Currently axis is split into 4 parts, just as rateup does.
-=item B<--alt-autoscale>
+=item B<-A>|B<--alt-autoscale>
Compute Y range based on function absolute minimum and
maximum values. Default algorithm uses predefined set of ranges.
@@ -153,7 +161,7 @@
from slightly less the 260 - 0.001 to slightly more then 260 + 0.001
and periodic behavior will be seen. (contributed by Sasha Mikheev)
-=item B<--alt-autoscale-max>
+=item B<-M>|B<--alt-autoscale-max>
Where --alt-autoscale will modify both the absolute maximum AND minimum
values, this option will only affect the maximum value. The minimum
@@ -161,7 +169,7 @@
be useful when graphing router traffic when the WAN line uses compression,
and thus the throughput may be higher than the WAN line speed.
-=item B<--units-exponent> I<value> (default autoconfigure)
+=item B<-X>|B<--units-exponent> I<value> (default autoconfigure)
This sets the 10**exponent scaling of the y-axis values. Normally
values will be scaled to the appropriate units (k, M, etc.). However
@@ -281,13 +289,13 @@
Define a title to be written into the graph
-=item B<--step> I<value> (default automatic)
+=item B<-S>|B<--step> I<value> (default automatic)
-By default rrdgraph calculates the width of one pixle in the time domain and
+By default rrdgraph calculates the width of one pixel in the time domain and
tries to get data at that resolution from the RRD. With this switch you can
override this behaviour. If you want rrdgraph to get data at 1 hour
resolution from the RRD, then you can set the step to 3600 seconds. Note,
-that a step smaller than 1 pixle will be silently ignored.
+that a step smaller than 1 pixel will be silently ignored.
=item B<DEF:>I<vname>B<=>I<rrd>B<:>I<ds-name>B<:>I<CF>
@@ -435,7 +443,7 @@
Calculate the chosen consolidation function I<CF> over the data-source
variable I<vname> and C<printf> the result to stdout using I<format>.
-In the I<format> string there should be a '%lf' or '%le' marker in the
+In the I<format> string there should be a '%lf'or '%le' marker in the
place where the number should be printed.
If an additional '%s' is found AFTER the marker, the value will be scaled
@@ -540,9 +548,16 @@
GPRINT:a:MAX:%lf%s\g
+
A special case is COMMENT:B<\s> this inserts some additional vertical space
before placing the next row of legends.
+When text has to be formated without special instructions from your side,
+rrdtool will automatically justify the text as soon as one string goes over
+the right edge. If you want to prevent the justification without forcing a
+newline, you can use the special tag B<\J> at the end of the string to
+disable the auto justification.
+
=head1 NOTE on Return Values
Whenever rrd_graph gets called, it prints a line telling the size of
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrddump.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrddump.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrddump.txt 2003-02-20 15:24:03.000000000 -0800
@@ -2,26 +2,26 @@
-NNNNAAAAMMMMEEEE
- rrdtool dump - dump the contents of an RRRRRRRRDDDD to XML format
+NNAAMMEE
+ rrdtool dump - dump the contents of an RRRRDD to XML format
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll dddduuuummmmpppp _f_i_l_e_n_a_m_e_._r_r_d > _f_i_l_e_n_a_m_e_._x_m_l
+SSYYNNOOPPSSIISS
+ rrrrddttooooll dduummpp _f_i_l_e_n_a_m_e_._r_r_d > _f_i_l_e_n_a_m_e_._x_m_l
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The dddduuuummmmpppp function prints the contents of an RRRRRRRRDDDD in human
+DDEESSCCRRIIPPTTIIOONN
+ The dduummpp function prints the contents of an RRRRDD in human
readable (?) XML format. This format can be read by
rrdrestore. Together they allow you to transfer your
files from one architecture to another as well as manipu-
- lating the contents of an RRRRRRRRDDDD file in a somewhat more con-
+ lating the contents of an RRRRDD file in a somewhat more con-
venient manner.
_f_i_l_e_n_a_m_e_._r_r_d
- The name of the RRRRRRRRDDDD you want to dump.
+ The name of the RRRRDD you want to dump.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-02-26 1.0.40 RRDDUMP(1)
+1.0.41 2002-02-26 RRDDUMP(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdrestore.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdrestore.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdrestore.html 2003-02-20 15:24:03.000000000 -0800
@@ -1,57 +1,68 @@
-<HTML>
-<HEAD>
-<TITLE>rrdrestore</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdrestore</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool restore - restore the contents of an <STRONG>RRD</STRONG> from its XML dump format</P>
-<div align="right"><a href="rrdrestore.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>restore</STRONG> <EM>filename.xml</EM> <EM>filename.rrd</EM>
-[<STRONG>--range-check</STRONG>|<STRONG>-r</STRONG>]</P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>restore</STRONG> function reads the XML representation of an RRD and converts
-it into the native <STRONG>RRD</STRONG> format.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename%2Exml"><EM>filename.xml</EM></A></STRONG><BR>
-<DD>
-The name of the <STRONG>XML</STRONG> you want to restore.
-<P></P>
-<DT><STRONG><A NAME="item_filename%2Errd"><EM>filename.rrd</EM></A></STRONG><BR>
-<DD>
-The name of the <STRONG>RRD</STRONG> to restore.
-<P></P>
-<DT><STRONG><A NAME="item_%2D%2Drange%2Dcheck%7C%2Dr"><STRONG>--range-check</STRONG>|<STRONG>-r</STRONG></A></STRONG><BR>
-<DD>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool restore - restore the contents of an <strong>RRD</strong> from its XML dump format</p>
+<div align="right"><a href="rrdrestore.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>restore</strong> <em>filename.xml</em> <em>filename.rrd</em>
+[<strong>--range-check</strong>|<strong>-r</strong>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>restore</strong> function reads the XML representation of an RRD and converts
+it into the native <strong>RRD</strong> format.</p>
+<dl>
+<dt><strong><a name="item_filename%2exml"><em>filename.xml</em></a></strong><br />
+</dt>
+<dd>
+The name of the <strong>XML</strong> you want to restore.
+</dd>
+<p></p>
+<dt><strong><a name="item_filename%2errd"><em>filename.rrd</em></a></strong><br />
+</dt>
+<dd>
+The name of the <strong>RRD</strong> to restore.
+</dd>
+<p></p>
+<dt><strong><a name="item_%2d%2drange%2dcheck%7c%2dr"><strong>--range-check</strong>|<strong>-r</strong></a></strong><br />
+</dt>
+<dd>
Make sure the values in the RRAs do not exceed the limits defined for
the different datasources.
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rpntutorial.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rpntutorial.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rpntutorial.txt 2003-02-20 15:24:03.000000000 -0800
@@ -2,16 +2,16 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rpntutorial - Reading RRDTtool RPN Expressions by Steve
Rader
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
+DDEESSCCRRIIPPTTIIOONN
This tutorial should help you get to grips with rrdtool
RPN expressions as seen in CDEF arguments of rrdtool
graph.
-RRRReeeeaaaaddddiiiinnnngggg CCCCoooommmmppppaaaarrrriiiissssoooonnnn OOOOppppeeeerrrraaaattttoooorrrrssss
+RReeaaddiinngg CCoommppaarriissoonn OOppeerraattoorrss
The LT, LE, GT, GE and EQ RPN logic operators are not as
tricky as they appear. These operators act on the two
values on the stack preceding them (to the left). Read
@@ -32,7 +32,7 @@
response is "no" and thus the RPN expression 2,1,LE evalu-
ates to 0.
-RRRReeeeaaaaddddiiiinnnngggg tttthhhheeee IIIIFFFF OOOOppppeeeerrrraaaattttoooorrrr
+RReeaaddiinngg tthhee IIFF OOppeerraattoorr
The IF RPN logic operator can be straightforward also.
The key to reading IF operators is to understand that the
condition part of the traditional "if X than Y else Z"
@@ -58,7 +58,7 @@
read IF operators along with the LT, LE, GT, GE and EQ
operators.
-SSSSoooommmmeeee EEEExxxxaaaammmmpppplllleeeessss
+SSoommee EExxaammpplleess
While compound expressions can look overly complex, they
can be considered elegantly simple. To quickly comprehend
RPN expressions, you must know the the algorithm for eval-
@@ -136,8 +136,7 @@
if ((input * 8) > 7000) then 7000 else (input * 8)
-
-EEEExxxxeeeerrrrcccciiiisssseeeessss
+EExxeerrcciisseess
Exercise 1:
Compute "3,2,*,1,+ and "3,2,1,+,*" by hand. Rewrite them
@@ -192,20 +191,15 @@
Answer 4:
-
-
-
-
The algorithm that implements traditional mathematical
notation is more complex then algorithm used for RPN.
So implementing RPN allowed Tobias Oetiker to write less
code! (The code is also less complex and therefore less
likely to have bugs.)
-
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
steve rader <rader at wiscnet.net>
-2002-02-26 1.0.40 RPNTUTORIAL(1)
+1.0.41 2002-02-26 RPNTUTORIAL(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/cdeftutorial.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/cdeftutorial.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/cdeftutorial.txt 2003-02-20 15:24:03.000000000 -0800
@@ -2,18 +2,18 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
cdeftutorial - Alex van den Bogaerdt's CDEF tutorial
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- YYYYoooouuuu pppprrrroooovvvviiiiddddeeee aaaa qqqquuuueeeessssttttiiiioooonnnn aaaannnndddd IIII wwwwiiiillllllll ttttrrrryyyy ttttoooo pppprrrroooovvvviiiiddddeeee aaaannnn aaaannnnsssswwwweeeerrrr
- iiiinnnn tttthhhheeee nnnneeeexxxxtttt rrrreeeelllleeeeaaaasssseeee. NNNNoooo ffffeeeeeeeeddddbbbbaaaacccckkkk eeeeqqqquuuuaaaallllssss nnnnoooo cccchhhhaaaannnnggggeeeessss!!!!
+DDEESSCCRRIIPPTTIIOONN
+ YYoouu pprroovviiddee aa qquueessttiioonn aanndd II wwiillll ttrryy ttoo pprroovviiddee aann aannsswweerr
+ iinn tthhee nneexxtt rreelleeaassee. NNoo ffeeeeddbbaacckk eeqquuaallss nnoo cchhaannggeess!!
_A_d_d_i_t_i_o_n_s _t_o _t_h_i_s _d_o_c_u_m_e_n_t _a_r_e _a_l_s_o _w_e_l_c_o_m_e_.
Alex van den Bogaerdt <alex at ergens.op.het.net>
- WWWWhhhhyyyy tttthhhhiiiissss ttttuuuuttttoooorrrriiiiaaaallll ????
+ WWhhyy tthhiiss ttuuttoorriiaall ??
One of the powerful parts of RRDtool is its ability to do
all sorts of calculations on the data retrieved from it's
@@ -28,13 +28,13 @@
ing. If you do choose to read this tutorial, I also expect
you to have read and fully understand my other tutorial.
- MMMMoooorrrreeee rrrreeeeaaaaddddiiiinnnngggg
+ MMoorree rreeaaddiinngg
If you have difficulties with the way I try to explain it
- please read Steve Rader's the rpntutorial manpage. It may
- help you understand how this all works.
+ please read Steve Rader's rpntutorial. It may help you
+ understand how this all works.
-WWWWhhhhaaaatttt aaaarrrreeee CCCCDDDDEEEEFFFFssss ????
+WWhhaatt aarree CCDDEEFFss ??
When retrieving data from an RRD, you are using a "DEF" to
work with that data. Think of it as a variable that
changes over time (where time is the x-axis). The value of
@@ -43,7 +43,7 @@
This is what CDEFs are for: they takes values from DEFs
and perform calculations on them.
-SSSSyyyynnnnttttaaaaxxxx
+SSyynnttaaxx
DEF:var_name_1=some.rrd:ds_name:CF
CDEF:var_name_2=RPN_expression
@@ -72,7 +72,7 @@
Note that variable in the CDEF (inbits) must not be the
same as the variable (inbytes) in the DEF!
-RRRRPPPPNNNN----eeeexxxxpppprrrreeeessssssssiiiioooonnnnssss
+RRPPNN--eexxpprreessssiioonnss
RPN is short-hand for Reverse Polish Notation. It works as
follows. You put the variables or numbers on a stack. You
also put operations (things-to-do) on the stack and this
@@ -126,7 +126,7 @@
tion of "f" but you do not reverse the order of the vari-
ables.
-CCCCoooonnnnvvvveeeerrrrttttiiiinnnngggg yyyyoooouuuurrrr wwwwiiiisssshhhheeeessss ttttoooo RRRRPPPPNNNN
+CCoonnvveerrttiinngg yyoouurr wwiisshheess ttoo RRPPNN
First, get a clear picture of what you want to do. Break
down the problem in smaller portions until they cannot be
split anymore. Then it is rather simple to convert your
@@ -246,8 +246,8 @@
math by hand to see what happens, I'm sure this will solve
most, if not all, problems you encounter.
-SSSSoooommmmeeee ssssppppeeeecccciiiiaaaallll nnnnuuuummmmbbbbeeeerrrrssss
- TTTThhhheeee uuuunnnnkkkknnnnoooowwwwnnnn vvvvaaaalllluuuueeee
+SSoommee ssppeecciiaall nnuummbbeerrss
+ TThhee uunnkknnoowwnn vvaalluuee
Sometimes collecting your data will fail. This can be very
common, especially when querying over busy links. RRDtool
@@ -297,7 +297,7 @@
of PDPs per CDP and the xff factor. As you can see from
the previous text they define the behavior of your RRA.
- WWWWoooorrrrkkkkiiiinnnngggg wwwwiiiitttthhhh uuuunnnnkkkknnnnoooowwwwnnnn ddddaaaattttaaaa iiiinnnn yyyyoooouuuurrrr ddddaaaattttaaaabbbbaaaasssseeee
+ WWoorrkkiinngg wwiitthh uunnkknnoowwnn ddaattaa iinn yyoouurr ddaattaabbaassee
As you have read in the previous chapter, entries in an
RRA can be set to the unknown value. If you do calcula-
@@ -329,7 +329,7 @@
- IIIInnnnffffiiiinnnniiiittttyyyy
+ IInnffiinniittyy
Infinite data is another form of a special number. It can-
not be graphed because by definition you would never reach
@@ -349,7 +349,7 @@
is probably a good way to approximate infinity and it sure
allows for some neat tricks. See below for examples.
- WWWWoooorrrrkkkkiiiinnnngggg wwwwiiiitttthhhh uuuunnnnkkkknnnnoooowwwwnnnn ddddaaaattttaaaa aaaannnndddd iiiinnnnffffiiiinnnniiiittttyyyy
+ WWoorrkkiinngg wwiitthh uunnkknnoowwnn ddaattaa aanndd iinnffiinniittyy
Sometimes you would like to discard unknown data and pre-
tend it is zero (or any other value for that matter) and
@@ -358,8 +358,8 @@
CDEFs have support for unknown data. There are also exam-
ples available that show unknown data by using infinity.
-SSSSoooommmmeeee eeeexxxxaaaammmmpppplllleeeessss
- EEEExxxxaaaammmmpppplllleeee:::: uuuussssiiiinnnngggg aaaa rrrreeeecccceeeennnnttttllllyyyy ccccrrrreeeeaaaatttteeeedddd RRRRRRRRDDDD
+SSoommee eexxaammpplleess
+ EExxaammppllee:: uussiinngg aa rreecceennttllyy ccrreeaatteedd RRRRDD
You are keeping statistics on your router for over a year
now. Recently you installed an extra router and you would
@@ -440,7 +440,7 @@
you may want to remove this rule so that unknown data is
properly displayed.
- EEEExxxxaaaammmmpppplllleeee:::: bbbbeeeetttttttteeeerrrr hhhhaaaannnnddddlllliiiinnnngggg ooooffff uuuunnnnkkkknnnnoooowwwwnnnn ddddaaaattttaaaa,,,, bbbbyyyy uuuussssiiiinnnngggg ttttiiiimmmmeeee
+ EExxaammppllee:: bbeetttteerr hhaannddlliinngg ooff uunnkknnoowwnn ddaattaa,, bbyy uussiinngg ttiimmee
Above example has one drawback. If you do log unknown data
in your database after installing your new equipment, it
@@ -527,7 +527,7 @@
- EEEExxxxaaaammmmpppplllleeee:::: PPPPrrrreeeetttteeeennnnddddiiiinnnngggg wwwweeeeiiiirrrrdddd ddddaaaattttaaaa iiiissssnnnn''''tttt tttthhhheeeerrrreeee
+ EExxaammppllee:: PPrreetteennddiinngg wweeiirrdd ddaattaa iissnn''tt tthheerree
Suppose you have a problem that shows up as huge spikes in
your graph. You know this happens and why so you decide
@@ -565,8 +565,7 @@
CDEF:result=number,100000,GT,UNKN,number,IF
CDEF:result=number,100000,GT,100000,number,IF
-
- EEEExxxxaaaammmmpppplllleeee:::: wwwwoooorrrrkkkkiiiinnnngggg oooonnnn aaaa cccceeeerrrrttttaaaaiiiinnnn ttttiiiimmmmeeee ssssppppaaaannnn
+ EExxaammppllee:: wwoorrkkiinngg oonn aa cceerrttaaiinn ttiimmee ssppaann
If you want a graph that spans a few weeks, but would only
want to see some routers data for one week, you need to
@@ -608,8 +607,8 @@
This will return an UNKNOWN if either comparison returns
true.
- EEEExxxxaaaammmmpppplllleeee:::: YYYYoooouuuu ssssuuuussssppppeeeecccctttt ttttoooo hhhhaaaavvvveeee pppprrrroooobbbblllleeeemmmmssss aaaannnndddd wwwwaaaannnntttt ttttoooo sssseeeeeeee
- uuuunnnnkkkknnnnoooowwwwnnnn ddddaaaattttaaaa....
+ EExxaammppllee:: YYoouu ssuussppeecctt ttoo hhaavvee pprroobblleemmss aanndd wwaanntt ttoo sseeee
+ uunnkknnoowwnn ddaattaa..
Suppose you add up the number of active users on several
terminal servers. If one of them doesn't give an answer
@@ -654,12 +653,7 @@
AREA:allusers#0000FF:combined user count
AREA:wrongdata#FF0000:unknown data
-
-
-
-
-
- SSSSaaaammmmeeee eeeexxxxaaaammmmpppplllleeee uuuusssseeeeffffuuuullll wwwwiiiitttthhhh SSSSTTTTAAAACCCCKKKKeeeedddd ddddaaaattttaaaa::::
+ SSaammee eexxaammppllee uusseeffuull wwiitthh SSTTAACCKKeedd ddaattaa::
If you use stack in the previous example (as I would do)
then you don't add up the values. Therefore, there is no
@@ -711,9 +705,8 @@
GPRINT:allusers:AVERAGE:"Average: %6.0lf"
GPRINT:allusers:LAST:"Current: %6.0lf\n"
-
-TTTThhhheeee eeeexxxxaaaammmmpppplllleeeessss ffffrrrroooommmm tttthhhheeee rrrrrrrrdddd ggggrrrraaaapppphhhh mmmmaaaannnnuuuuaaaallll ppppaaaaggggeeee
- DDDDeeeeggggrrrreeeeeeeessss CCCCeeeellllcccciiiiuuuussss vvvvssss.... DDDDeeeeggggrrrreeeeeeeessss FFFFaaaahhhhrrrreeeennnnhhhheeeeiiiitttt
+TThhee eexxaammpplleess ffrroomm tthhee rrrrdd ggrraapphh mmaannuuaall ppaaggee
+ DDeeggrreeeess CCeellcciiuuss vvss.. DDeeggrreeeess FFaahhrreennhheeiitt
rrdtool graph demo.gif --title="Demo Graph" \
DEF:cel=demo.rrd:exhaust:AVERAGE \
@@ -725,6 +718,12 @@
"demo.rrd" and puts the values in variable "cel". The CDEF
used is evaluated as follows:
+
+
+
+
+
+
CDEF:far=cel,32,-,0.5555,*
1. push variable "cel"
2. push 32
@@ -739,7 +738,7 @@
exactly correct. It is close enough for this purpose and
it saves a calculation.
- CCCChhhhaaaannnnggggiiiinnnngggg uuuunnnnkkkknnnnoooowwwwnnnn iiiinnnnttttoooo zzzzeeeerrrroooo
+ CChhaannggiinngg uunnkknnoowwnn iinnttoo zzeerroo
rrdtool graph demo.gif --title="Demo Graph" \
DEF:idat1=interface1.rrd:ds0:AVERAGE \
@@ -772,7 +771,7 @@
The result is multiplied by eight, most likely to convert
bytes/s to bits/s.
- IIIInnnnffffiiiinnnniiiittttyyyy ddddeeeemmmmoooo
+ IInnffiinniittyy ddeemmoo
rrdtool graph example.png --title="INF demo" \
DEF:val1=some.rrd:ds0:AVERAGE \
@@ -837,7 +836,7 @@
"wipeout" variable and place a negative sign before it:
"CDEF:wipeout2=wipeout,-1,*"
- FFFFiiiilllltttteeeerrrriiiinnnngggg ddddaaaattttaaaa
+ FFiilltteerriinngg ddaattaa
You may do some complex data filtering:
@@ -856,6 +855,7 @@
+
DEF:var=database.rrd:traffic:AVERAGE
CDEF:prev1=PREV(var)
CDEF:time=TIME
@@ -864,22 +864,21 @@
LINE3:derivate#000077:derivate
LINE1:var#007700:'raw data'
-
-OOOOuuuutttt ooooffff iiiiddddeeeeaaaassss ffffoooorrrr nnnnoooowwww
+OOuutt ooff iiddeeaass ffoorr nnooww
This document was created from questions asked by either
myself or by other people on the list. Please let me know
if you find errors in it or if you have trouble under-
standing it. If you think there should be an addition,
mail me: <alex at ergens.op.het.net>
- Remember: NNNNoooo ffffeeeeeeeeddddbbbbaaaacccckkkk eeeeqqqquuuuaaaallllssss nnnnoooo cccchhhhaaaannnnggggeeeessss!!!!
+ Remember: NNoo ffeeeeddbbaacckk eeqquuaallss nnoo cchhaannggeess!!
-SSSSEEEEEEEE AAAALLLLSSSSOOOO
+SSEEEE AALLSSOO
The RRDtool manpages
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Alex van den Bogaerdt <alex at ergens.op.het.net>
-2002-06-20 1.0.40 CDEFTUTORIAL(1)
+1.0.41 2002-06-20 CDEFTUTORIAL(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtool.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.txt 2003-02-20 15:24:03.000000000 -0800
@@ -2,86 +2,86 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool - round robin database tool
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll ---- | _f_u_n_c_t_i_o_n
+SSYYNNOOPPSSIISS
+ rrrrddttooooll -- | _f_u_n_c_t_i_o_n
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- OOOOVVVVEEEERRRRVVVVIIIIEEEEWWWW
+DDEESSCCRRIIPPTTIIOONN
+ OOVVEERRVVIIEEWW
It is pretty easy to gather status information from all
sorts of things, ranging from the temperature in your
office to the number of octets which have passed through
the FDDI interface of your router. But it is not so triv-
ial to store this data in a efficient and systematic man-
- ner. This is where rrrrrrrrddddttttoooooooollll kicks in. It lets you _l_o_g _a_n_d
+ ner. This is where rrrrddttooooll kicks in. It lets you _l_o_g _a_n_d
_a_n_a_l_y_z_e the data you gather from all kinds of data-sources
- (DDDDSSSS). The data analysis part of rrdtool is based on the
+ (DDSS). The data analysis part of rrdtool is based on the
ability to quickly generate graphical representations of
the data values collected over a definable time period.
In this man page you will find general information on the
design and functionality of the Round Robin Database Tool
(rrdtool). For a more detailed description of how to use
- the individual functions of the rrrrrrrrddddttttoooooooollll check the corre-
+ the individual functions of the rrrrddttooooll check the corre-
sponding man page.
For an introduction to the usage of rrdtool make sure you
- check the rrdtutorial manpage.
+ check rrdtutorial.
- FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNNSSSS
+ FFUUNNCCTTIIOONNSS
While the man pages talk of command line switches you have
- to set in order to make rrrrrrrrddddttttoooooooollll work it is important to
- note that the rrrrrrrrddddttttoooooooollll can be 'remote controlled' through a
+ to set in order to make rrrrddttooooll work it is important to
+ note that the rrrrddttooooll can be 'remote controlled' through a
set of pipes. This saves a considerable amount of startup
- time when you plan to make rrrrrrrrddddttttoooooooollll do a lot of things
- quickly. Check the section on the section on "Remote Con-
- trol" further down. There is also a number of language
- bindings for rrdtool which allow you to use it directly
- from perl, python, tcl, php, ...
+ time when you plan to make rrrrddttooooll do a lot of things
+ quickly. Check the section on "Remote Control" further
+ down. There is also a number of language bindings for rrd-
+ tool which allow you to use it directly from perl, python,
+ tcl, php, ...
- ccccrrrreeeeaaaatttteeee Set up a new Round Robin Database (RRD). Check the
- rrdcreate manpage.
+ ccrreeaattee Set up a new Round Robin Database (RRD). Check
+ rrdcreate.
- uuuuppppddddaaaatttteeee Store new data values into an RRD. Check the
- rrdupdate manpage.
+ uuppddaattee Store new data values into an RRD. Check rrdup-
+ date.
- ggggrrrraaaapppphhhh Create a graph from data stored in one or several
+ ggrraapphh Create a graph from data stored in one or several
RRD. Apart from generating graphs, data can also
- be extracted to stdout. Check the rrdgraph man-
- page.
+ be extracted to stdout. Check rrdgraph.
- dddduuuummmmpppp Dump the contents of an RRD in plain ASCII. In
+ dduummpp Dump the contents of an RRD in plain ASCII. In
connection with restore you can use it to trans-
port an rrd from one architecture to another.
- Check the rrddump manpage.
+ Check rrddump.
- rrrreeeessssttttoooorrrreeee Restore an RRD in XML format to a binary rrd ...
- Check the rrdrestore manpage
+ rreessttoorree Restore an RRD in XML format to a binary rrd ...
+ Check rrdrestore
- ffffeeeettttcccchhhh Get data for a certain time period from a RRD. The
+ ffeettcchh Get data for a certain time period from a RRD. The
graph function uses fetch to retrieve its data
- from an rrd. Check the rrdfetch manpage.
+ from an rrd. Check rrdfetch.
- ttttuuuunnnneeee Alter setup of an RRD. Check the rrdtune manpage.
+ ttuunnee Alter setup of an RRD. Check rrdtune.
- llllaaaasssstttt Find last update time of an RRD. Check the rrdlast
- manpage.
+ llaasstt Find last update time of an RRD. Check rrdlast.
- rrrrrrrrddddrrrreeeessssiiiizzzzeeee
+ iinnffoo Display information about an RRD ... Check rrdinfo
+
+ rrrrddrreessiizzee
Change the size of individual RRAs ... Dangerous!
- Check the rrdresize manpage.
+ Check rrdresize.
- xxxxppppoooorrrrtttt Export data retrieved from one or several RRD.
- Check the rrdxport manpage
+ xxppoorrtt Export data retrieved from one or several RRD.
+ Check rrdxport
- rrrrrrrrddddccccggggiiii This is a standalone tool for producing rrd graphs
- on the fly. Check the rrdcgi manpage.
+ rrrrddccggii This is a standalone tool for producing rrd graphs
+ on the fly. Check rrdcgi.
- HHHHOOOOWWWW DDDDOOOOEEEESSSS RRRRRRRRDDDDTTTTOOOOOOOOLLLL WWWWOOOORRRRKKKK????
+ HHOOWW DDOOEESS RRRRDDTTOOOOLL WWOORRKK??
Data acquisition
@@ -89,9 +89,9 @@
venient to have the data available at a constant
interval. Unfortunately you may not always be able
to fetch data at exactly the time you want to.
- Therefore rrrrrrrrddddttttoooooooollll lets you update the logfile at
+ Therefore rrrrddttooooll lets you update the logfile at
any time you want. It will automatically interpo-
- late the value of the data-source (DDDDSSSS) at the lat-
+ late the value of the data-source (DDSS) at the lat-
est official time-slot and write this value to the
log. The value you have supplied is stored as well
and is also taken into account when interpolating
@@ -105,27 +105,27 @@
one year. While this would take considerable disk
space it would also take a lot of time to analyze
the data when you wanted to create a graph cover-
- ing the whole year. rrrrrrrrddddttttoooooooollll offers a solution to
+ ing the whole year. rrrrddttooooll offers a solution to
this problem through its data consolidation fea-
ture. When setting up an Round Robin Database
- (RRRRRRRRDDDD), you can define at which interval this con-
+ (RRRRDD), you can define at which interval this con-
solidation should occur, and what consolidation
- function (CCCCFFFF) (average, minimum, maximum, last)
+ function (CCFF) (average, minimum, maximum, last)
should be used to build the consolidated values
(see rrdcreate). You can define any number of dif-
- ferent consolidation setups within one RRRRRRRRDDDD. They
+ ferent consolidation setups within one RRRRDD. They
will all be maintained on the fly when new data is
- loaded into the RRRRRRRRDDDD.
+ loaded into the RRRRDD.
Round Robin Archives
Data values of the same consolidation setup are
- stored into Round Robin Archives (RRRRRRRRAAAA). This is a
+ stored into Round Robin Archives (RRRRAA). This is a
very efficient manner to store data for a certain
amount of time, while using a known amount of
storage space.
It works like this: If you want to store 1000 val-
- ues in 5 minute interval, rrrrrrrrddddttttoooooooollll will allocate
+ ues in 5 minute interval, rrrrddttooooll will allocate
space for 1000 data values and a header area. In
the header it will store a pointer telling which
one of the values in the storage area was last
@@ -133,73 +133,73 @@
Robin Archive in a ... you guess it ... round
robin manner. This automatically limits the his-
tory to the last 1000 values. Because you can
- define several RRRRRRRRAAAAs within a single RRRRRRRRDDDD, you can
+ define several RRRRAAs within a single RRRRDD, you can
setup another one, storing 750 data values at a 2
hour interval and thus keeping a log for the last
two months although at a lower resolution.
- The use of RRRRRRRRAAAAs guarantees that the RRRRRRRRDDDD does not
+ The use of RRRRAAs guarantees that the RRRRDD does not
grow over time and that old data is automatically
eliminated. By using the consolidation feature,
you can still keep data for a very long time,
while gradually reducing the resolution of the
data along the time axis. Using different consoli-
- dation functions (CCCCFFFF) allows you to store exactly
+ dation functions (CCFF) allows you to store exactly
the type of information that actually interests
you. (Maximum one minute traffic on the LAN, mini-
mum temperature of the wine cellar, total minutes
down time ...)
Unknown Data
- As mentioned earlier, the RRRRRRRRDDDD stores data at a
+ As mentioned earlier, the RRRRDD stores data at a
constant interval. Now it may happen that no new
data is available when a value has to be written
- to the RRRRRRRRDDDD. Data acquisition may not be possible
- for one reason or an other. The rrrrrrrrddddttttoooooooollll handles
+ to the RRRRDD. Data acquisition may not be possible
+ for one reason or an other. The rrrrddttooooll handles
these situations by storing an _*_U_N_K_N_O_W_N_* value
into the database. The value '_*_U_N_K_N_O_W_N_*' is sup-
ported through all the functions of the database.
When consolidating the amount of _*_U_N_K_N_O_W_N_* data is
accumulated and when a new consolidated value is
ready to be written to its Round Robin Archive
- (RRRRRRRRAAAA) a validity check is performed to make sure
+ (RRRRAA) a validity check is performed to make sure
that the percentage of unknown data in the new
value is below a configurable level. If so, an
- _*_U_N_K_N_O_W_N_* value will be written to the RRRRRRRRAAAA.
+ _*_U_N_K_N_O_W_N_* value will be written to the RRRRAA.
Graphing
- The rrrrrrrrddddttttoooooooollll also allows one to generate reports in
+ The rrrrddttooooll also allows one to generate reports in
numerical and graphical form based on the data
- stored in one or several RRRRRRRRDDDDs. The graphing fea-
+ stored in one or several RRRRDDs. The graphing fea-
ture is fully configurable. Size, color and con-
tents of the graph can be defined freely. Check
- the rrdgraph manpage for more information on this.
+ rrdgraph for more information on this.
- RRRREEEEMMMMOOOOTTTTEEEE CCCCOOOONNNNTTTTRRRROOOOLLLL
+ RREEMMOOTTEE CCOONNTTRROOLL
- When you start rrrrrrrrddddttttoooooooollll with the command line option '----',
+ When you start rrrrddttooooll with the command line option '--',
it waits for input via standard in. With this feature you
- can improve performance by attaching rrrrrrrrddddttttoooooooollll to another
+ can improve performance by attaching rrrrddttooooll to another
process (mrtg is one example) through a set of pipes. Over
- the pipes rrrrrrrrddddttttoooooooollll accepts the same arguments as on the
+ the pipes rrrrddttooooll accepts the same arguments as on the
command line. When a command is completed, rrdtool will
print the string '"OK"', followed by timing information
- of the form uuuu::::_u_s_e_r_t_i_m_e ssss::::_s_y_s_t_e_m_t_i_m_e both values are run-
+ of the form uu::_u_s_e_r_t_i_m_e ss::_s_y_s_t_e_m_t_i_m_e both values are run-
ning totals of seconds since rrdtool was started. If an
error occurs, a line of the form '"ERROR:" _D_e_s_c_r_i_p_t_i_o_n _o_f
- _e_r_r_o_r' will be printed. rrrrrrrrddddttttoooooooollll will not abort if possi-
+ _e_r_r_o_r' will be printed. rrrrddttooooll will not abort if possi-
ble, but follow the ERROR line with an OK line.
-SSSSEEEEEEEE AAAALLLLSSSSOOOO
+SSEEEE AALLSSOO
rrdcreate, rrdupdate, rrdgraph, rrddump, rrdfetch, rrd-
tune, rrdlast, rrdxport
-BBBBUUUUGGGGSSSS
+BBUUGGSS
Bugs ? Features !
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-05-17 1.0.40 RRDTOOL(1)
+1.0.41 2002-11-29 RRDTOOL(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.pod
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdtool.pod (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdtool.pod 2003-02-20 15:24:03.000000000 -0800
@@ -78,6 +78,10 @@
Find last update time of an RRD. Check L<rrdlast>.
+=item B<info>
+
+Display information about an RRD ... Check L<rrdinfo>
+
=item B<rrdresize>
Change the size of individual RRAs ... Dangerous! Check L<rrdresize>.
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdupdate.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdupdate.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdupdate.txt 2003-02-20 15:24:03.000000000 -0800
@@ -2,23 +2,23 @@
-NNNNAAAAMMMMEEEE
+NNAAMMEE
rrdtool update - Store a new set of values into the rrd
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll uuuuppppddddaaaatttteeee _f_i_l_e_n_a_m_e [--------tttteeeemmmmppppllllaaaatttteeee|----tttt _d_s_-_n_a_m_e[::::_d_s_-
- _n_a_m_e]...] NNNN|_t_i_m_e_s_t_a_m_p::::_v_a_l_u_e[::::_v_a_l_u_e...] [_t_i_m_e_s_-
- _t_a_m_p::::_v_a_l_u_e[::::_v_a_l_u_e...] ...]
+SSYYNNOOPPSSIISS
+ rrrrddttooooll uuppddaattee _f_i_l_e_n_a_m_e [----tteemmppllaattee|--tt _d_s_-_n_a_m_e[::_d_s_-
+ _n_a_m_e]...] NN|_t_i_m_e_s_t_a_m_p::_v_a_l_u_e[::_v_a_l_u_e...] [_t_i_m_e_s_-
+ _t_a_m_p::_v_a_l_u_e[::_v_a_l_u_e...] ...]
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The uuuuppppddddaaaatttteeee function feeds new data values into an RRRRRRRRDDDD. The
+DDEESSCCRRIIPPTTIIOONN
+ The uuppddaattee function feeds new data values into an RRRRDD. The
data gets time aligned according to the properties of the
- RRRRRRRRDDDD to which the data is written.
+ RRRRDD to which the data is written.
_f_i_l_e_n_a_m_e
- The name of the RRRRRRRRDDDD you want to update.
+ The name of the RRRRDD you want to update.
- --------tttteeeemmmmppppllllaaaatttteeee|----tttt _d_s_-_n_a_m_e[::::_d_s_-_n_a_m_e]...
+ ----tteemmppllaattee|--tt _d_s_-_n_a_m_e[::_d_s_-_n_a_m_e]...
by default, the update function expects the data
input in the order, the data sources are defined
in the RRD. This is not very error resistant, as
@@ -30,7 +30,7 @@
plate are not available in the rrd file, the
update process will abort with an error message.
- NNNN|_t_i_m_e_s_t_a_m_p::::_v_a_l_u_e[::::_v_a_l_u_e...]
+ NN|_t_i_m_e_s_t_a_m_p::_v_a_l_u_e[::_v_a_l_u_e...]
The data used for updating the RRD was acquired at
a certain time. This time can either be defined in
seconds since 1970-01-01. Or by using the letter
@@ -38,22 +38,22 @@
Negative time values are subtracted from the cur-
rent time. Getting the timing right to the second
is especially important when you are working with
- data-sources of type CCCCOOOOUUUUNNNNTTTTEEEERRRR, DDDDEEEERRRRIIIIVVVVEEEE or AAAABBBBSSSSOOOOLLLLUUUUTTTTEEEE.
+ data-sources of type CCOOUUNNTTEERR, DDEERRIIVVEE or AABBSSOOLLUUTTEE.
The remaining elements of the argument are DS
updates. The order of this list is the same as the
order the data sources were defined in the rra.
If there is no data for a certain data-source, the
- letter UUUU (eg. N:0.1:U:1) can be defined.
+ letter UU (eg. N:0.1:U:1) can be defined.
The format of the value acquired from the data
source is dependent of the data source type cho-
sen. Normally it will be numeric, but the data
acquisition modules may impose their very own
- parsing of this parameter as long as the colon (::::)
+ parsing of this parameter as long as the colon (::)
remains the data source value separator.
-EEEEXXXXAAAAMMMMPPPPLLLLEEEE
+EEXXAAMMPPLLEE
"rrdtool update demo1.rrd N:3.44:3.15:U:23"
Update the database file demo1.rrd with 3 known and one
@@ -67,9 +67,9 @@
value then with two normal readings. The update interval
seems to be around 300 seconds.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-02-26 1.0.40 RRDUPDATE(1)
+1.0.41 2002-02-26 RRDUPDATE(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdrestore.txt
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdrestore.txt (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdrestore.txt 2003-02-20 15:24:03.000000000 -0800
@@ -2,31 +2,31 @@
-NNNNAAAAMMMMEEEE
- rrdtool restore - restore the contents of an RRRRRRRRDDDD from its
+NNAAMMEE
+ rrdtool restore - restore the contents of an RRRRDD from its
XML dump format
-SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- rrrrrrrrddddttttoooooooollll rrrreeeessssttttoooorrrreeee _f_i_l_e_n_a_m_e_._x_m_l _f_i_l_e_n_a_m_e_._r_r_d [--------rrrraaaannnnggggeeee----
- cccchhhheeeecccckkkk|----rrrr]
-
-DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The rrrreeeessssttttoooorrrreeee function reads the XML representation of an
- RRD and converts it into the native RRRRRRRRDDDD format.
+SSYYNNOOPPSSIISS
+ rrrrddttooooll rreessttoorree _f_i_l_e_n_a_m_e_._x_m_l _f_i_l_e_n_a_m_e_._r_r_d
+ [----rraannggee--cchheecckk|--rr]
+
+DDEESSCCRRIIPPTTIIOONN
+ The rreessttoorree function reads the XML representation of an
+ RRD and converts it into the native RRRRDD format.
_f_i_l_e_n_a_m_e_._x_m_l
- The name of the XXXXMMMMLLLL you want to restore.
+ The name of the XXMMLL you want to restore.
_f_i_l_e_n_a_m_e_._r_r_d
- The name of the RRRRRRRRDDDD to restore.
+ The name of the RRRRDD to restore.
- --------rrrraaaannnnggggeeee----cccchhhheeeecccckkkk|----rrrr
+ ----rraannggee--cchheecckk|--rr
Make sure the values in the RRAs do not exceed the
limits defined for the different datasources.
-AAAAUUUUTTTTHHHHOOOORRRR
+AAUUTTHHOORR
Tobias Oetiker <oetiker at ee.ethz.ch>
-2002-02-26 1.0.40 RRDRESTORE(1)
+1.0.41 2002-02-26 RRDRESTORE(1)
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdresize.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdresize.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdresize.html 2003-02-20 15:24:04.000000000 -0800
@@ -1,76 +1,92 @@
-<HTML>
-<HEAD>
-<TITLE>rrdresize</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdresize</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#notes">NOTES</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#notes">NOTES</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool resize - alters the size of an RRA and creates new .rrd file</P>
-<div align="right"><a href="rrdresize.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>resize</STRONG> <EM>filename</EM> <EM>rra-num</EM> <STRONG>GROW</STRONG><EM>|</EM><STRONG>SHRINK</STRONG> <EM>rows</EM></P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The <STRONG>resize</STRONG> function is used to modify the number of rows in
-an <STRONG>RRA</STRONG>.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename"><EM>filename</EM></A></STRONG><BR>
-<DD>
-the name of the <STRONG>RRD</STRONG> you want to alter.
-<P></P>
-<DT><STRONG><A NAME="item_rra%2Dnum"><EM>rra-num</EM></A></STRONG><BR>
-<DD>
-the <STRONG>RRA</STRONG> you want to alter. You can find the number using <STRONG>rrdtool info</STRONG>.
-<P></P>
-<DT><STRONG><A NAME="item_GROW"><STRONG>GROW</STRONG></A></STRONG><BR>
-<DD>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool resize - alters the size of an RRA and creates new .rrd file</p>
+<div align="right"><a href="rrdresize.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>resize</strong> <em>filename</em> <em>rra-num</em> <strong>GROW</strong><em>|</em><strong>SHRINK</strong> <em>rows</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The <strong>resize</strong> function is used to modify the number of rows in
+an <strong>RRA</strong>.</p>
+<dl>
+<dt><strong><a name="item_filename"><em>filename</em></a></strong><br />
+</dt>
+<dd>
+the name of the <strong>RRD</strong> you want to alter.
+</dd>
+<p></p>
+<dt><strong><a name="item_rra%2dnum"><em>rra-num</em></a></strong><br />
+</dt>
+<dd>
+the <strong>RRA</strong> you want to alter. You can find the number using <strong>rrdtool info</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_grow"><strong>GROW</strong></a></strong><br />
+</dt>
+<dd>
used if you want to add extra rows to an RRA. The extra rows will be inserted
as the rows that are oldest.
-<P></P>
-<DT><STRONG><A NAME="item_SHRINK"><STRONG>SHRINK</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_shrink"><strong>SHRINK</strong></a></strong><br />
+</dt>
+<dd>
used if you want to remove rows from an RRA. The rows that will be removed
are the oldest rows.
-<P></P>
-<DT><STRONG><A NAME="item_rows"><EM>rows</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_rows"><em>rows</em></a></strong><br />
+</dt>
+<dd>
the number of rows you want to add or remove.
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="notes">NOTES</A></H1>
-<P>The new .rrd file, with the modified RRAm, is written to the file
-<STRONG>resize.rrd</STRONG> in the current directory. The original .rrd file is not
-modified.</P>
-<P>It is possible to abuse this tool and get strange results
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="notes">NOTES</a></h1>
+<p>The new .rrd file, with the modified RRAm, is written to the file
+<strong>resize.rrd</strong> in the current directory. The original .rrd file is not
+modified.</p>
+<p>It is possible to abuse this tool and get strange results
by first removing some rows and then reinsert the same amount (effectively
clearing them to be Unknown). You may thus end up with unknown data in one
-RRA while at the same timestamp this data is available in another RRA.</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Alex van den Bogaerdt <<A HREF="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</A>></P>
+RRA while at the same timestamp this data is available in another RRA.</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Alex van den Bogaerdt <<a href="mailto:alex at ergens.op.het.net">alex at ergens.op.het.net</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdcgi.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdcgi.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdcgi.html 2003-02-20 15:24:04.000000000 -0800
@@ -1,144 +1,190 @@
-<HTML>
-<HEAD>
-<TITLE>rrdcgi</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdcgi</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <UL>
-
- <LI><A HREF="#pass 1">Pass 1</A></LI>
- <LI><A HREF="#pass 2">Pass 2</A></LI>
- <LI><A HREF="#pass 3">Pass 3</A></LI>
- </UL>
-
- <LI><A HREF="#example 1">EXAMPLE 1</A></LI>
- <LI><A HREF="#example 2">EXAMPLE 2</A></LI>
- <LI><A HREF="#example 3">EXAMPLE 3</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <ul>
+
+ <li><a href="#pass_1">Pass 1</a></li>
+ <li><a href="#pass_2">Pass 2</a></li>
+ <li><a href="#pass_3">Pass 3</a></li>
+ </ul>
+
+ <li><a href="#example_1">EXAMPLE 1</a></li>
+ <li><a href="#example_2">EXAMPLE 2</a></li>
+ <li><a href="#example_3">EXAMPLE 3</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdcgi - create web pages containing RRD graphs based on templates</P>
-<div align="right"><a href="rrdcgi.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P>#!/path/to/<STRONG>rrdcgi</STRONG>
-[<STRONG>--filter</STRONG>]</P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P><STRONG>rrdcgi</STRONG> is a sort of very limited script interpreter. Its purpose
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdcgi - create web pages containing RRD graphs based on templates</p>
+<div align="right"><a href="rrdcgi.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>#!/path/to/<strong>rrdcgi</strong>
+[<strong>--filter</strong>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p><strong>rrdcgi</strong> is a sort of very limited script interpreter. Its purpose
is to run as a cgi-program and parse a web page template containing special
-<RRD:: tags. <STRONG>rrdcgi</STRONG> will interpret and act according to these tags.
-In the end it will printout a web page including the necessary CGI headers.</P>
-<P><STRONG>rrdcgi</STRONG> parses the contents of the template in 2 steps. In each step it looks
-only for a subset of tags. This allows to nest tags.</P>
-<P>The argument parser uses the same semantics as you are used from your c shell.</P>
-<P>
-<H2><A NAME="pass 1">Pass 1</A></H2>
-<DL>
-<DT><STRONG><A NAME="item_RRD%3A%3ACV_name">RRD::CV <EM>name</EM></A></STRONG><BR>
-<DD>
+<RRD:: tags. <strong>rrdcgi</strong> will interpret and act according to these tags.
+In the end it will printout a web page including the necessary CGI headers.</p>
+<p><strong>rrdcgi</strong> parses the contents of the template in 2 steps. In each step it looks
+only for a subset of tags. This allows to nest tags.</p>
+<p>The argument parser uses the same semantics as you are used from your c shell.</p>
+<p>
+</p>
+<h2><a name="pass_1">Pass 1</a></h2>
+<dl>
+<dt><strong><a name="item_rrd%3a%3acv_name">RRD::CV <em>name</em></a></strong><br />
+</dt>
+<dd>
Inserts the CGI variable of the given name.
-<P></P>
-<DT><STRONG><A NAME="item_RRD%3A%3ACV%3A%3AQUOTE_name">RRD::CV::QUOTE <EM>name</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrd%3a%3acv%3a%3aquote_name">RRD::CV::QUOTE <em>name</em></a></strong><br />
+</dt>
+<dd>
Inserts the CGI variable of the given name but quotes it, ready for
use as an argument in another RRD:: tag. So even when there are spaces in the
value of the CGI variable it will still be considered as one argument.
-<P></P>
-<DT><STRONG><A NAME="item_RRD%3A%3ACV%3A%3APATH_name">RRD::CV::PATH <EM>name</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrd%3a%3acv%3a%3apath_name">RRD::CV::PATH <em>name</em></a></strong><br />
+</dt>
+<dd>
Inserts the CGI variable of the given name, quotes it and makes sure
the it starts neither with a '/' nor contains '..'. This is to make
sure that no problematic pathnames can be introduced through the
CGI interface.
-<P></P>
-<DT><STRONG><A NAME="item_RRD%3A%3AGETENV_variable">RRD::GETENV <EM>variable</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrd%3a%3agetenv_variable">RRD::GETENV <em>variable</em></a></strong><br />
+</dt>
+<dd>
Get the value of an environment variable.
-<PRE>
- <RRD::GETENV REMOTE_USER></PRE>
-<P>might give you the name of the remote user given you are using
-some sort of access control on the directory</P>
-<P></P></DL>
-<P>
-<H2><A NAME="pass 2">Pass 2</A></H2>
-<DL>
-<DT><STRONG><A NAME="item_RRD%3A%3AGOODFOR_seconds">RRD::GOODFOR <EM>seconds</EM></A></STRONG><BR>
-<DD>
+</dd>
+<dd>
+<pre>
+ <RRD::GETENV REMOTE_USER></pre>
+</dd>
+<dd>
+<p>might give you the name of the remote user given you are using
+some sort of access control on the directory</p>
+</dd>
+<p></p></dl>
+<p>
+</p>
+<h2><a name="pass_2">Pass 2</a></h2>
+<dl>
+<dt><strong><a name="item_rrd%3a%3agoodfor_seconds">RRD::GOODFOR <em>seconds</em></a></strong><br />
+</dt>
+<dd>
Specify the number of seconds this page should remain valid. This will prompt
the rrdcgi to output a Last-Modified, an Expire and if the number of
-seconds is <EM>negative</EM> a Refresh headers.
-<P></P>
-<DT><STRONG><A NAME="item_RRD%3A%3AINCLUDE_filename">RRD::INCLUDE <EM>filename</EM></A></STRONG><BR>
-<DD>
+seconds is <em>negative</em> a Refresh headers.
+</dd>
+<p></p>
+<dt><strong><a name="item_rrd%3a%3ainclude_filename">RRD::INCLUDE <em>filename</em></a></strong><br />
+</dt>
+<dd>
Include the contents of the given file into the page returned from the cgi
-<P></P>
-<DT><STRONG><A NAME="item_RRD%3A%3ASETENV_variable_value">RRD::SETENV <EM>variable</EM> <EM>value</EM></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrd%3a%3asetenv_variable_value">RRD::SETENV <em>variable</em> <em>value</em></a></strong><br />
+</dt>
+<dd>
If you want to present your graphs in another time zone than your own, you
could use
-<PRE>
- <RRD::SETENV TZ UTC></PRE>
-<P>to make sure everything is presented in Universal Time. Note that the
-values permitted to TZ depend on your OS.</P>
-<P></P>
-<DT><STRONG><A NAME="item_RRD%3A%3ATIME%3A%3ALAST_rrd%2Dfile_strftime%2Dform">RRD::TIME::LAST <EM>rrd-file</EM> <EM>strftime-format</EM></A></STRONG><BR>
-<DD>
+</dd>
+<dd>
+<pre>
+ <RRD::SETENV TZ UTC></pre>
+</dd>
+<dd>
+<p>to make sure everything is presented in Universal Time. Note that the
+values permitted to TZ depend on your OS.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrd%3a%3atime%3a%3alast_rrd%2dfile_strftime%2dform">RRD::TIME::LAST <em>rrd-file</em> <em>strftime-format</em></a></strong><br />
+</dt>
+<dd>
This gets replaced by the last modification time of the selected RRD. The
-time is <EM>strftime</EM>-formated with the string specified in the second argument.
-<P></P>
-<DT><STRONG><A NAME="item_RRD%3A%3ATIME%3A%3ANOW_strftime%2Dformat">RRD::TIME::NOW <EM>strftime-format</EM></A></STRONG><BR>
-<DD>
+time is <em>strftime</em>-formated with the string specified in the second argument.
+</dd>
+<p></p>
+<dt><strong><a name="item_rrd%3a%3atime%3a%3anow_strftime%2dformat">RRD::TIME::NOW <em>strftime-format</em></a></strong><br />
+</dt>
+<dd>
This gets replaced by the current time of day. The
-time is <EM>strftime</EM>-formated with the string specified in the argument.
-<P></P></DL>
-<P>
-<H2><A NAME="pass 3">Pass 3</A></H2>
-<DL>
-<DT><STRONG><A NAME="item_RRD%3A%3AGRAPH_rrdgraph_arguments">RRD::GRAPH <EM>rrdgraph arguments</EM></A></STRONG><BR>
-<DD>
+time is <em>strftime</em>-formated with the string specified in the argument.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<h2><a name="pass_3">Pass 3</a></h2>
+<dl>
+<dt><strong><a name="item_rrd%3a%3agraph_rrdgraph_arguments">RRD::GRAPH <em>rrdgraph arguments</em></a></strong><br />
+</dt>
+<dd>
This tag creates the RRD graph defined in its argument and then gets
replaced by an appropriate <IMG> tag referring to the graph.
-The <STRONG>--lazy</STRONG> option in RRD graph can be used to make sure that graphs
+The <strong>--lazy</strong> option in RRD graph can be used to make sure that graphs
are only regenerated when they are out of date. The arguments
-to the <STRONG>RRD::GRAPH</STRONG> tag work as described in the <STRONG>rrdgraph</STRONG> manual page.
-<P>Use the <STRONG>--lazy</STRONG> option in your RRD::GRAPH tags, to reduce the load
+to the <strong>RRD::GRAPH</strong> tag work as described in the <strong>rrdgraph</strong> manual page.
+</dd>
+<dd>
+<p>Use the <strong>--lazy</strong> option in your RRD::GRAPH tags, to reduce the load
on your server. This option makes sure that graphs are only regenerated when
-the old ones are out of date.</P>
-<P>If you do not specify your own <STRONG>--imginfo</STRONG> format, the following will
-be used:</P>
-<PRE>
- <IMG SRC="%s" WIDTH="%lu" HEIGHT="%lu"></PRE>
-<P>Note that %s stands for the filename part of the graph generated, all
-directories given in the GIF file argument will get dropped.</P>
-<P></P>
-<DT><STRONG><A NAME="item_RRD%3A%3APRINT_number">RRD::PRINT <EM>number</EM></A></STRONG><BR>
-<DD>
-If the preceding <STRONG>RRD::GRAPH</STRONG> tag contained and <STRONG>PRINT</STRONG> arguments,
-then you can access their output with this tag. The <EM>number</EM> argument refers to the
-number of the <STRONG>PRINT</STRONG> argument. This first <STRONG>PRINT</STRONG> has <EM>number</EM> 0.
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="example 1">EXAMPLE 1</A></H1>
-<P>The example below creates a web pages with a single RRD graph.</P>
-<PRE>
+the old ones are out of date.</p>
+</dd>
+<dd>
+<p>If you do not specify your own <strong>--imginfo</strong> format, the following will
+be used:</p>
+</dd>
+<dd>
+<pre>
+ <IMG SRC="%s" WIDTH="%lu" HEIGHT="%lu"></pre>
+</dd>
+<dd>
+<p>Note that %s stands for the filename part of the graph generated, all
+directories given in the GIF file argument will get dropped.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_rrd%3a%3aprint_number">RRD::PRINT <em>number</em></a></strong><br />
+</dt>
+<dd>
+If the preceding <strong>RRD::GRAPH</strong> tag contained and <strong>PRINT</strong> arguments,
+then you can access their output with this tag. The <em>number</em> argument refers to the
+number of the <strong>PRINT</strong> argument. This first <strong>PRINT</strong> has <em>number</em> 0.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="example_1">EXAMPLE 1</a></h1>
+<p>The example below creates a web pages with a single RRD graph.</p>
+<pre>
#!/usr/local/bin/rrdcgi
<HTML>
<HEAD><TITLE>RRDCGI Demo</TITLE></HEAD>
@@ -147,18 +193,19 @@
<P>
<RRD::GRAPH demo.gif --lazy --title="Temperatures"
DEF:cel=demo.rrd:exhaust:AVERAGE
- LINE2:cel#00a000:"D. Celsius"></PRE>
-<PRE>
+ LINE2:cel#00a000:"D. Celsius"></pre>
+<pre>
</P>
</BODY>
- </HTML></PRE>
-<P>
-<HR>
-<H1><A NAME="example 2">EXAMPLE 2</A></H1>
-<P>This script is slightly more elaborate, it allows you to run it from
+ </HTML></pre>
+<p>
+</p>
+<hr />
+<h1><a name="example_2">EXAMPLE 2</a></h1>
+<p>This script is slightly more elaborate, it allows you to run it from
a form which sets RRD_NAME. RRD_NAME is then used to select which RRD
-you want to use a source for your graph.</P>
-<PRE>
+you want to use a source for your graph.</p>
+<pre>
#!/usr/local/bin/rrdcgi
<HTML>
<HEAD><TITLE>RRDCGI Demo</TITLE></HEAD>
@@ -173,17 +220,18 @@
<RRD::GRAPH <RRD::CV::PATH RRD_NAME>.gif --lazy
--title "Temperatures for "<RRD::CV::QUOTE RRD_NAME>
DEF:cel=<RRD::CV::PATH RRD_NAME>.rrd:exhaust:AVERAGE
- LINE2:cel#00a000:"D. Celsius"></PRE>
-<PRE>
+ LINE2:cel#00a000:"D. Celsius"></pre>
+<pre>
</P>
</BODY>
- </HTML></PRE>
-<P>
-<HR>
-<H1><A NAME="example 3">EXAMPLE 3</A></H1>
-<P>This example shows how to handle the case where the RRD, graphs and
-cgi-bins are seperate directories</P>
-<PRE>
+ </HTML></pre>
+<p>
+</p>
+<hr />
+<h1><a name="example_3">EXAMPLE 3</a></h1>
+<p>This example shows how to handle the case where the RRD, graphs and
+cgi-bins are seperate directories</p>
+<pre>
#!/.../bin/rrdcgi
<HTML>
<HEAD><TITLE>RRDCGI Demo</TITLE></HEAD>
@@ -197,15 +245,16 @@
AREA:http_src#00ff00:http_src
>
</BODY>
- </HTML></PRE>
-<P>Note 1: Replace /.../ with the relevant directories</P>
-<P>Note 2: The SRC=/.../gifs should be paths from the view of the
-webserver/browser</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+ </HTML></pre>
+<p>Note 1: Replace /.../ with the relevant directories</p>
+<p>Note 2: The SRC=/.../gifs should be paths from the view of the
+webserver/browser</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/RRDs.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/RRDs.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/RRDs.html 2003-02-20 15:24:04.000000000 -0800
@@ -1,40 +1,43 @@
-<HTML>
-<HEAD>
-<TITLE>RRDs</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>RRDs</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <UL>
-
- <LI><A HREF="#calling sequence">Calling Sequence</A></LI>
- <LI><A HREF="#error handling">Error Handling</A></LI>
- <LI><A HREF="#return values">Return Values</A></LI>
- </UL>
-
- <LI><A HREF="#note">NOTE</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <ul>
+
+ <li><a href="#calling_sequence">Calling Sequence</a></li>
+ <li><a href="#error_handling">Error Handling</a></li>
+ <li><a href="#return_values">Return Values</a></li>
+ </ul>
+
+ <li><a href="#note">NOTE</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>RRDs - Access rrdtool as a shared module</P>
-<P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<PRE>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>RRDs - Access rrdtool as a shared module</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
use RRDs;
RRDs::error
RRDs::last ...
@@ -43,61 +46,65 @@
RRDs::update ...
RRDs::graph ...
RRDs::fetch ...
- RRDs::tune ...</PRE>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>
-<H2><A NAME="calling sequence">Calling Sequence</A></H2>
-<P>This module accesses rrdtool functionality directly from within perl. The
+ RRDs::tune ...</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>
+</p>
+<h2><a name="calling_sequence">Calling Sequence</a></h2>
+<p>This module accesses rrdtool functionality directly from within perl. The
arguments to the functions listed in the SYNOPSIS are explained in the regular
-rrdtool documentation. The commandline call</P>
-<PRE>
- rrdtool update mydemo.rrd --template in:out N:12:13</PRE>
-<P>gets turned into</P>
-<PRE>
- RRDs::update ("mydemo.rrd", "--template", "in:out", "N:12:13");</PRE>
-<P>Note that</P>
-<PRE>
- --template=in:out</PRE>
-<P>is also valid.</P>
-<P>
-<H2><A NAME="error handling">Error Handling</A></H2>
-<P>The RRD functions will not abort your program even when they can not make
-sense out of the arguments you fed them.</P>
-<P>The function RRDs::error should be called to get the error status
+rrdtool documentation. The commandline call</p>
+<pre>
+ rrdtool update mydemo.rrd --template in:out N:12:13</pre>
+<p>gets turned into</p>
+<pre>
+ RRDs::update ("mydemo.rrd", "--template", "in:out", "N:12:13");</pre>
+<p>Note that</p>
+<pre>
+ --template=in:out</pre>
+<p>is also valid.</p>
+<p>
+</p>
+<h2><a name="error_handling">Error Handling</a></h2>
+<p>The RRD functions will not abort your program even when they can not make
+sense out of the arguments you fed them.</p>
+<p>The function RRDs::error should be called to get the error status
after each function call. If RRDs::error does not return anything
-then the previous function has completed its task successfully.</P>
-<PRE>
+then the previous function has completed its task successfully.</p>
+<pre>
use RRDs;
RRDs::update ("mydemo.rrd","N:12:13");
my $ERR=RRDs::error;
- die "ERROR while updating mydemo.rrd: $ERR\n" if $ERR;</PRE>
-<P>
-<H2><A NAME="return values">Return Values</A></H2>
-<P>The functions RRDs::last, RRDs::graph, RRDs::info and RRDs::fetch return their
-findings.</P>
-<P><STRONG>RRDs::last</STRONG> returns a single INTEGER representing the last update time.</P>
-<PRE>
- $lastupdate = RRDs::last ...</PRE>
-<P><STRONG>RRDs::graph</STRONG> returns an pointer to an ARRAY containing the x-size and y-size of the
-created gif and results of the PRINT arguments.</P>
-<PRE>
+ die "ERROR while updating mydemo.rrd: $ERR\n" if $ERR;</pre>
+<p>
+</p>
+<h2><a name="return_values">Return Values</a></h2>
+<p>The functions RRDs::last, RRDs::graph, RRDs::info and RRDs::fetch return their
+findings.</p>
+<p><strong>RRDs::last</strong> returns a single INTEGER representing the last update time.</p>
+<pre>
+ $lastupdate = RRDs::last ...</pre>
+<p><strong>RRDs::graph</strong> returns an pointer to an ARRAY containing the x-size and y-size of the
+created gif and results of the PRINT arguments.</p>
+<pre>
($averages,$xsize,$ysize) = RRDs::graph ...
print "Gifsize: ${xsize}x${ysize}\n";
- print "Averages: ", (join ", ", @$averages);</PRE>
-<P><STRONG>RRDs::info</STRONG> returns a pointer to a hash. The keys of the hash
+ print "Averages: ", (join ", ", @$averages);</pre>
+<p><strong>RRDs::info</strong> returns a pointer to a hash. The keys of the hash
represent the property names of the rrd and the values of the hash are
-the values of the properties.</P>
-<PRE>
+the values of the properties.</p>
+<pre>
$hash = RRDs::info "example.rrd";
foreach my $key (keys %$hash){
print "$key = $$hash{$key}\n";
- }</PRE>
-<P><STRONG>RRDs::fetch</STRONG> is the most complex of
+ }</pre>
+<p><strong>RRDs::fetch</strong> is the most complex of
the pack regarding return values. There are 4 values. Two normal
-integers, a pointer to an array and a pointer to a array of pointers.</P>
-<PRE>
+integers, a pointer to an array and a pointer to a array of pointers.</p>
+<pre>
my ($start,$step,$names,$data) = RRDs::fetch ...
print "Start: ", scalar localtime($start), " ($start)\n";
print "Step size: $step seconds\n";
@@ -111,23 +118,25 @@
printf "%12.1f ", $val;
}
print "\n";
- }</PRE>
-<P>See the examples directory for more ways to use this extension.</P>
-<P>
-<HR>
-<H1><A NAME="note">NOTE</A></H1>
-<P>If you are manipulating the TZ variable you should also call the posixs
+ }</pre>
+<p>See the examples directory for more ways to use this extension.</p>
+<p>
+</p>
+<hr />
+<h1><a name="note">NOTE</a></h1>
+<p>If you are manipulating the TZ variable you should also call the posixs
function tzset to initialize all internal state of the library for properly
-operating in the timezone of your choice.</P>
-<PRE>
+operating in the timezone of your choice.</p>
+<pre>
use POSIX qw(tzset);
$ENV{TZ} = 'CET';
- POSIX::tzset();</PRE>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+ POSIX::tzset();</pre>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.html
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/doc/rrdcreate.html (original)
+++ trunk/orca/packages/rrdtool-1.0.41/doc/rrdcreate.html 2003-02-20 15:24:04.000000000 -0800
@@ -1,156 +1,195 @@
-<HTML>
-<HEAD>
-<TITLE>rrdcreate</TITLE>
-<LINK REV="made" HREF="mailto:karrer at iis.ee.ethz.ch">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>rrdcreate</title>
+<link rev="made" href="mailto:dws at ee.ethz.ch" />
+</head>
-<BODY>
+<body style="background-color: white">
-<A NAME="__index__"></A>
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#name">NAME</A></LI>
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#the heartbeat and the step">The HEARTBEAT and the STEP</A></LI>
- <LI><A HREF="#how to measure">HOW TO MEASURE</A></LI>
- <LI><A HREF="#example">EXAMPLE</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#the_heartbeat_and_the_step">The HEARTBEAT and the STEP</a></li>
+ <li><a href="#how_to_measure">HOW TO MEASURE</a></li>
+ <li><a href="#example">EXAMPLE</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="name">NAME</A></H1>
-<P>rrdtool create - Set up a new Round Robin Database</P>
-<div align="right"><a href="rrdcreate.pdf">PDF</a> version.</div><P>
-<HR>
-<H1><A NAME="synopsis">SYNOPSIS</A></H1>
-<P><STRONG>rrdtool</STRONG> <STRONG>create</STRONG> <EM>filename</EM>
-[<STRONG>--start</STRONG>|<STRONG>-b</STRONG> <EM>start time</EM>]
-[<STRONG>--step</STRONG>|<STRONG>-s</STRONG> <EM>step</EM>]
-[<STRONG>DS:</STRONG><EM>ds-name</EM><STRONG>:</STRONG><EM>DST</EM><STRONG>:</STRONG><EM>heartbeat</EM><STRONG>:</STRONG><EM>min</EM><STRONG>:</STRONG><EM>max</EM>]
-[<STRONG>RRA:</STRONG><EM>CF</EM><STRONG>:</STRONG><EM>xff</EM><STRONG>:</STRONG><EM>steps</EM><STRONG>:</STRONG><EM>rows</EM>]</P>
-<P>
-<HR>
-<H1><A NAME="description">DESCRIPTION</A></H1>
-<P>The create function of the RRDtool lets you set up new
-Round Robin Database (<STRONG>RRD</STRONG>) files.
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>rrdtool create - Set up a new Round Robin Database</p>
+<div align="right"><a href="rrdcreate.pdf">PDF</a> version.</div><p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>rrdtool</strong> <strong>create</strong> <em>filename</em>
+[<strong>--start</strong>|<strong>-b</strong> <em>start time</em>]
+[<strong>--step</strong>|<strong>-s</strong> <em>step</em>]
+[<strong>DS:</strong><em>ds-name</em><strong>:</strong><em>DST</em><strong>:</strong><em>heartbeat</em><strong>:</strong><em>min</em><strong>:</strong><em>max</em>]
+[<strong>RRA:</strong><em>CF</em><strong>:</strong><em>xff</em><strong>:</strong><em>steps</em><strong>:</strong><em>rows</em>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>The create function of the RRDtool lets you set up new
+Round Robin Database (<strong>RRD</strong>) files.
The file is created at its final, full size and filled
-with <EM>*UNKNOWN*</EM> data.</P>
-<DL>
-<DT><STRONG><A NAME="item_filename"><EM>filename</EM></A></STRONG><BR>
-<DD>
-The name of the <STRONG>RRD</STRONG> you want to create. <STRONG>RRD</STRONG> files should end
-with the extension <EM>.rrd</EM>. However, <STRONG>rrdtool</STRONG> will accept any
+with <em>*UNKNOWN*</em> data.</p>
+<dl>
+<dt><strong><a name="item_filename"><em>filename</em></a></strong><br />
+</dt>
+<dd>
+The name of the <strong>RRD</strong> you want to create. <strong>RRD</strong> files should end
+with the extension <em>.rrd</em>. However, <strong>rrdtool</strong> will accept any
filename.
-<P></P>
-<DT><STRONG><A NAME="item_time"><STRONG>--start</STRONG>|<STRONG>-b</STRONG> <EM>start time</EM> (default: now - 10s)</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_time"><strong>--start</strong>|<strong>-b</strong> <em>start time</em> (default: now - 10s)</a></strong><br />
+</dt>
+<dd>
Specifies the time in seconds since 1970-01-01 UTC when the first
-value should be added to the <STRONG>RRD</STRONG>. <STRONG>rrdtool</STRONG> will not accept
+value should be added to the <strong>RRD</strong>. <strong>rrdtool</strong> will not accept
any data timed before or at the time specified.
-<P>See also AT-STYLE TIME SPECIFICATION section in the
-<EM>rrdfetch</EM> documentation for more ways to specify time.</P>
-<P></P>
-<DT><STRONG><A NAME="item_step"><STRONG>--step</STRONG>|<STRONG>-s</STRONG> <EM>step</EM> (default: 300 seconds)</A></STRONG><BR>
-<DD>
+</dd>
+<dd>
+<p>See also AT-STYLE TIME SPECIFICATION section in the
+<em>rrdfetch</em> documentation for more ways to specify time.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_step"><strong>--step</strong>|<strong>-s</strong> <em>step</em> (default: 300 seconds)</a></strong><br />
+</dt>
+<dd>
Specifies the base interval in seconds with which data will be fed
-into the <STRONG>RRD</STRONG>.
-<P></P>
-<DT><STRONG><A NAME="item_DS%3Ads%2Dname%3ADST%3Aheartbeat%3Amin%3Amax"><STRONG>DS:</STRONG><EM>ds-name</EM><STRONG>:</STRONG><EM>DST</EM><STRONG>:</STRONG><EM>heartbeat</EM><STRONG>:</STRONG><EM>min</EM><STRONG>:</STRONG><EM>max</EM></A></STRONG><BR>
-<DD>
-A single <STRONG>RRD</STRONG> can accept input from several data sources (<STRONG>DS</STRONG>).
+into the <strong>RRD</strong>.
+</dd>
+<p></p>
+<dt><strong><a name="item_ds%3ads%2dname%3adst%3aheartbeat%3amin%3amax"><strong>DS:</strong><em>ds-name</em><strong>:</strong><em>DST</em><strong>:</strong><em>heartbeat</em><strong>:</strong><em>min</em><strong>:</strong><em>max</em></a></strong><br />
+</dt>
+<dd>
+A single <strong>RRD</strong> can accept input from several data sources (<strong>DS</strong>).
(e.g. Incoming and Outgoing traffic on a specific communication
-line). With the <STRONG>DS</STRONG> configuration option you must define some basic
-properties of each data source you want to use to feed the <STRONG>RRD</STRONG>.
-<P><EM>ds-name</EM> is the name you will use to reference this particular data
-source from an <STRONG>RRD</STRONG>. A <EM>ds-name</EM> must be 1 to 19 characters long in
-the characters [a-zA-Z0-9_].</P>
-<P><EM>DST</EM> defines the Data Source Type. See the section on ``How to Measure'' below for further insight.
-The Datasource Type must be one of the following:</P>
-<DL>
-<DT><STRONG><A NAME="item_GAUGE"><STRONG>GAUGE</STRONG></A></STRONG><BR>
-<DD>
+line). With the <strong>DS</strong> configuration option you must define some basic
+properties of each data source you want to use to feed the <strong>RRD</strong>.
+</dd>
+<dd>
+<p><em>ds-name</em> is the name you will use to reference this particular data
+source from an <strong>RRD</strong>. A <em>ds-name</em> must be 1 to 19 characters long in
+the characters [a-zA-Z0-9_].</p>
+</dd>
+<dd>
+<p><em>DST</em> defines the Data Source Type. See the section on ``How to Measure'' below for further insight.
+The Datasource Type must be one of the following:</p>
+</dd>
+<dl>
+<dt><strong><a name="item_gauge"><strong>GAUGE</strong></a></strong><br />
+</dt>
+<dd>
is for things like temperatures or number of people in a
room or value of a RedHat share.
-<P></P>
-<DT><STRONG><A NAME="item_COUNTER"><STRONG>COUNTER</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_counter"><strong>COUNTER</strong></a></strong><br />
+</dt>
+<dd>
is for continuous incrementing counters like the
-InOctets counter in a router. The <STRONG>COUNTER</STRONG> data source assumes that
+InOctets counter in a router. The <strong>COUNTER</strong> data source assumes that
the counter never decreases, except when a counter overflows. The update
function takes the overflow into account. The counter is stored as a
per-second rate. When the counter overflows, RRDtool checks if the overflow happened at
the 32bit or 64bit border and acts accordingly by adding an appropriate value to the result.
-<P></P>
-<DT><STRONG><A NAME="item_DERIVE"><STRONG>DERIVE</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_derive"><strong>DERIVE</strong></a></strong><br />
+</dt>
+<dd>
will store the derivative of the line going from the last to the
current value of the data source. This can be useful for gauges, for
example, to measure the rate of people entering or leaving a
-room. Internally, derive works exaclty like COUNTER but without
+room. Internally, derive works exactly like COUNTER but without
overflow checks. So if your counter does not reset at 32 or 64 bit you
might want to use DERIVE and combine it with a MIN value of 0.
-<P></P>
-<DT><STRONG><A NAME="item_ABSOLUTE"><STRONG>ABSOLUTE</STRONG></A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_absolute"><strong>ABSOLUTE</strong></a></strong><br />
+</dt>
+<dd>
is for counters which get reset upon reading. This is used for fast counters
which tend to overflow. So instead of reading them normally you reset them
after every read to make sure you have a maximal time available before the
next overflow. Another usage is for things you count like number of messages
since the last update.
-<P></P></DL>
-<P><EM>heartbeat</EM> defines the maximum number of seconds that may pass
+</dd>
+<p></p></dl>
+<p><em>heartbeat</em> defines the maximum number of seconds that may pass
between two updates of this data source before the value of the
-data source is assumed to be <EM>*UNKNOWN*</EM>.</P>
-<P><EM>min</EM> and <EM>max</EM> are optional entries defining the expected range of
-the data supplied by this data source. If <EM>min</EM> and/or <EM>max</EM> are
+data source is assumed to be <em>*UNKNOWN*</em>.</p>
+<p><em>min</em> and <em>max</em> are optional entries defining the expected range of
+the data supplied by this data source. If <em>min</em> and/or <em>max</em> are
defined, any value outside the defined range will be regarded as
-<EM>*UNKNOWN*</EM>. If you do not know or care about min and max, set them
+<em>*UNKNOWN*</em>. If you do not know or care about min and max, set them
to U for unknown. Note that min and max always refer to the processed values
-of the DS. For a traffic-<STRONG>COUNTER</STRONG> type DS this would be the max and min
-data-rate expected from the device.</P>
-<P><EM>If information on minimal/maximal expected values is available,
+of the DS. For a traffic-<strong>COUNTER</strong> type DS this would be the max and min
+data-rate expected from the device.</p>
+<p><em>If information on minimal/maximal expected values is available,
always set the min and/or max properties. This will help RRDtool in
-doing a simple sanity check on the data supplied when running update.</EM></P>
-<DT><STRONG><A NAME="item_RRA%3ACF%3Axff%3Asteps%3Arows"><STRONG>RRA:</STRONG><EM>CF</EM><STRONG>:</STRONG><EM>xff</EM><STRONG>:</STRONG><EM>steps</EM><STRONG>:</STRONG><EM>rows</EM></A></STRONG><BR>
-<DD>
-The purpose of an <STRONG>RRD</STRONG> is to store data in the round robin archives
-(<STRONG>RRA</STRONG>). An archive consists of a number of data values from all the
-defined data-sources (<STRONG>DS</STRONG>) and is defined with an <STRONG>RRA</STRONG> line.
-<P>When data is entered into an <STRONG>RRD</STRONG>, it is first fit into time slots of
-the length defined with the <STRONG>-s</STRONG> option becoming a <EM>primary data point</EM>.</P>
-<P>The data is also consolidated with the consolidation function (<EM>CF</EM>)
+doing a simple sanity check on the data supplied when running update.</em></p>
+<dt><strong><a name="item_rra%3acf%3axff%3asteps%3arows"><strong>RRA:</strong><em>CF</em><strong>:</strong><em>xff</em><strong>:</strong><em>steps</em><strong>:</strong><em>rows</em></a></strong><br />
+</dt>
+<dd>
+The purpose of an <strong>RRD</strong> is to store data in the round robin archives
+(<strong>RRA</strong>). An archive consists of a number of data values from all the
+defined data-sources (<strong>DS</strong>) and is defined with an <strong>RRA</strong> line.
+</dd>
+<dd>
+<p>When data is entered into an <strong>RRD</strong>, it is first fit into time slots of
+the length defined with the <strong>-s</strong> option becoming a <em>primary data point</em>.</p>
+</dd>
+<dd>
+<p>The data is also consolidated with the consolidation function (<em>CF</em>)
of the archive. The following consolidation functions are defined:
-<STRONG>AVERAGE</STRONG>, <STRONG>MIN</STRONG>, <STRONG>MAX</STRONG>, <STRONG>LAST</STRONG>.</P>
-<P><EM>xff</EM> The xfiles factor defines what part of a consolidation interval may
-be made up from <EM>*UNKNOWN*</EM> data while the consolidated value is still
-regarded as known.</P>
-<P><EM>steps</EM> defines how many of these <EM>primary data points</EM> are used to
-build a <EM>consolidated data point</EM> which then goes into the archive.</P>
-<P><EM>rows</EM> defines how many generations of data values are kept in an <STRONG>RRA</STRONG>.</P>
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="the heartbeat and the step">The HEARTBEAT and the STEP</A></H1>
-<P>Here is an explanation by Don Baarda on the inner workings of rrdtool.
+<strong>AVERAGE</strong>, <strong>MIN</strong>, <strong>MAX</strong>, <strong>LAST</strong>.</p>
+</dd>
+<dd>
+<p><em>xff</em> The xfiles factor defines what part of a consolidation interval may
+be made up from <em>*UNKNOWN*</em> data while the consolidated value is still
+regarded as known.</p>
+</dd>
+<dd>
+<p><em>steps</em> defines how many of these <em>primary data points</em> are used to
+build a <em>consolidated data point</em> which then goes into the archive.</p>
+</dd>
+<dd>
+<p><em>rows</em> defines how many generations of data values are kept in an <strong>RRA</strong>.</p>
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="the_heartbeat_and_the_step">The HEARTBEAT and the STEP</a></h1>
+<p>Here is an explanation by Don Baarda on the inner workings of rrdtool.
It may help you to sort out why all this *UNKNOWN* data is popping
-up in your databases:</P>
-<P>RRD gets fed samples at arbitrary times. From these it builds Primary
+up in your databases:</p>
+<p>RRD gets fed samples at arbitrary times. From these it builds Primary
Data Points (PDPs) at exact times every ``step'' interval. The PDPs are
-then accumulated into RRAs.</P>
-<P>The ``heartbeat'' defines the maximum acceptable interval between
+then accumulated into RRAs.</p>
+<p>The ``heartbeat'' defines the maximum acceptable interval between
samples. If the interval between samples is less than ``heartbeat'',
then an average rate is calculated and applied for that interval. If
the interval between samples is longer than ``heartbeat'', then that
entire interval is considered ``unknown''. Note that there are other
things that can make a sample interval ``unknown'', such as the rate
-exceeding limits, or even an ``unknown'' input sample.</P>
-<P>The known rates during a PDP's ``step'' interval are used to calculate
+exceeding limits, or even an ``unknown'' input sample.</p>
+<p>The known rates during a PDP's ``step'' interval are used to calculate
an average rate for that PDP. Also, if the total ``unknown'' time during
the ``step'' interval exceeds the ``heartbeat'', the entire PDP is marked
as ``unknown''. This means that a mixture of known and ``unknown'' sample
@@ -159,8 +198,8 @@
``heartbeat'' is not only the maximum acceptable interval between
samples, but also the maximum acceptable amount of ``unknown'' time per
PDP (obviously this is only significant if you have ``heartbeat'' less
-than ``step'').</P>
-<P>The ``heartbeat'' can be short (unusual) or long (typical) relative to
+than ``step'').</p>
+<p>The ``heartbeat'' can be short (unusual) or long (typical) relative to
the ``step'' interval between PDPs. A short ``heartbeat'' means you
require multiple samples per PDP, and if you don't get them mark the
PDP unknown. A long heartbeat can span multiple ``steps'', which means
@@ -168,35 +207,41 @@
sample. An extreme example of this might be a ``step'' of 5mins and a
``heartbeat'' of one day, in which case a single sample every day will
result in all the PDPs for that entire day period being set to the
-same average rate. <EM>-- Don Baarda <<A HREF="mailto:don.baarda at baesystems.com">don.baarda at baesystems.com</A>></EM></P>
-<P>
-<HR>
-<H1><A NAME="how to measure">HOW TO MEASURE</A></H1>
-<P>Here are a few hints on how to measure:</P>
-<DL>
-<DT><STRONG><A NAME="item_Temperature">Temperature</A></STRONG><BR>
-<DD>
+same average rate. <em>-- Don Baarda <<a href="mailto:don.baarda at baesystems.com">don.baarda at baesystems.com</a>></em></p>
+<p>
+</p>
+<hr />
+<h1><a name="how_to_measure">HOW TO MEASURE</a></h1>
+<p>Here are a few hints on how to measure:</p>
+<dl>
+<dt><strong><a name="item_temperature">Temperature</a></strong><br />
+</dt>
+<dd>
Normally you have some type of meter you can read to get the temperature.
The temperature is not realy connected with a time. The only connection is
that the temperature reading happened at a certain time. You can use the
-<STRONG>GAUGE</STRONG> data source type for this. RRRtool will the record your reading
+<strong>GAUGE</strong> data source type for this. RRRtool will the record your reading
together with the time.
-<P></P>
-<DT><STRONG><A NAME="item_Mail_Messages">Mail Messages</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_mail_messages">Mail Messages</a></strong><br />
+</dt>
+<dd>
Assume you have a method to count the number of messages transported by
your mailserver in a certain amount of time, this give you data like '5
messages in the last 65 seconds'. If you look at the count of 5 like and
-<STRONG>ABSOLUTE</STRONG> datatype you can simply update the rrd with the number 5 and the
+<strong>ABSOLUTE</strong> datatype you can simply update the rrd with the number 5 and the
end time of your monitoring period. RRDtool will then record the number of
messages per second. If at some later stage you want to know the number of
messages transported in a day, you can get the average messages per second
from RRDtool for the day in question and multiply this number with the
number of seconds in a day. Because all math is run with Doubles, the
precision should be acceptable.
-<P></P>
-<DT><STRONG><A NAME="item_It%27s_always_a_Rate">It's always a Rate</A></STRONG><BR>
-<DD>
+</dd>
+<p></p>
+<dt><strong><a name="item_it%27s_always_a_rate">It's always a Rate</a></strong><br />
+</dt>
+<dd>
RRDtool stores rates in amount/second for COUNTER, DERIVE and ABSOLUTE data.
When you plot the data, you will get on the y axis amount/second which you
might be tempted to convert to absolute amount volume by multiplying by the
@@ -207,28 +252,31 @@
draws bar-plots, where the delta-time is clear on the plot for each point
(such that when you read the graph you see for example GB on the y axis,
days on the x axis and one bar for each day).
-<P></P></DL>
-<P>
-<HR>
-<H1><A NAME="example">EXAMPLE</A></H1>
-<P><CODE>rrdtool create temperature.rrd --step 300 DS:temp:GAUGE:600:-273:5000
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="example">EXAMPLE</a></h1>
+<p><code>rrdtool create temperature.rrd --step 300 DS:temp:GAUGE:600:-273:5000
RRA:AVERAGE:0.5:1:1200 RRA:MIN:0.5:12:2400 RRA:MAX:0.5:12:2400
-RRA:AVERAGE:0.5:12:2400</CODE></P>
-<P>This sets up an <STRONG>RRD</STRONG> called <EM>temperature.rrd</EM> which accepts one
+RRA:AVERAGE:0.5:12:2400</code></p>
+<p>This sets up an <strong>RRD</strong> called <em>temperature.rrd</em> which accepts one
temperature value every 300 seconds. If no new data is supplied for
-more than 600 seconds, the temperature becomes <EM>*UNKNOWN*</EM>. The
-minimum acceptable value is -273 and the maximum is 5000.</P>
-<P>A few archives areas are also defined. The first stores the
+more than 600 seconds, the temperature becomes <em>*UNKNOWN*</em>. The
+minimum acceptable value is -273 and the maximum is 5000.</p>
+<p>A few archives areas are also defined. The first stores the
temperatures supplied for 100 hours (1200 * 300 seconds = 100
hours). The second RRA stores the minimum temperature recorded over
every hour (12 * 300 seconds = 1 hour), for 100 days (2400 hours). The
third and the fourth RRA's do the same for the maximum and
-average temperature, respectively.</P>
-<P>
-<HR>
-<H1><A NAME="author">AUTHOR</A></H1>
-<P>Tobias Oetiker <<A HREF="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</A>></P>
+average temperature, respectively.</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Tobias Oetiker <<a href="mailto:oetiker at ee.ethz.ch">oetiker at ee.ethz.ch</a>></p>
-</BODY>
+</body>
-</HTML>
+</html>
Modified: trunk/orca/packages/rrdtool-1.0.41/perl-shared/RRDs.pm
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/perl-shared/RRDs.pm (original)
+++ trunk/orca/packages/rrdtool-1.0.41/perl-shared/RRDs.pm 2003-02-20 15:24:04.000000000 -0800
@@ -7,7 +7,7 @@
require DynaLoader;
-$VERSION = 1.000401;
+$VERSION = 1.000411;
bootstrap RRDs $VERSION;
Modified: trunk/orca/packages/rrdtool-1.0.41/CHANGES
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/CHANGES (original)
+++ trunk/orca/packages/rrdtool-1.0.41/CHANGES 2003-02-20 15:24:04.000000000 -0800
@@ -2,6 +2,50 @@
---------------------------
- bugfix, + enhancement, * contrib, = RELEASE
---------------------------------------------
+= 1.0.41 2003/02/19 -- Tobi
+
+- 2003/02/16 Matthias Lederhofer <matled at gmx.net>
+ fixed macro name clash in parsetime
+ fixed handling of stdin in rrdtool restore
+
++ 2003/01/23 Travis Brown <tebrown at csh.rit.edu>
+ added option to turn off minor gridlines
+
+- 2003/01/20 Anthony Howe <achowe at snert.com>
+ disable CDPATH in configure if it is set hell breaks loose
+
+- 2003/01/17 Stanislav Sinyagin <ssinyagin at yahoo.com>
+ fix borderline problem with rrd_fetch selecting the wrong rra under certain conditions
+
++ 2003/01/15 James Overbeck <grendel at gmo.jp>
+ single letter names for all rrd_graph options
+
++ 2002/12/20 Carter Bullard <carter at qosient.com>
+ new text formatting escape: \J disables glue expansion
+
+- 2002/12/14 Russell Van Tassell <russell at loosenut.com>
+ fixed "gcc -B/usr/ccs/bin/" problem for perl on solaris
+
+- 2002/11/29 David Lee <t.d.lee at durham.ac.uk>
+ added rrdtool info into main manpage
+
++ 2002/11/18 Tarmo Ainsaar <Tarmo.Ainsaar at eenet.ee>
+ new formatting marker '%lg' for [G]PRINT
+
+- 2002/11/19 Albert Chin-A-Young <china at thewrittenword.com>
+ [gd1.3/gd.c src/gifsize.c]
+ Declare ZeroDataBlock static to avoid duplicate name clash in
+ object files when linked together.
+- 2002/11/19 Albert Chin-A-Young <china at thewrittenword.com>
+ [configure.in]
+ Test -OPT:IEEE_NaN_inf=ON on IRIX for SGI C compiler.
+
+- 2002/10/24 Krzysztof Ceglinski <Krzysztof_Ceglinski at idg.com.pl>
+ make rrd_cgi work with apache 2
+
+- 2002/10/22 Darren Kelly <darren.kelly at shenick.com>
+ PREV(X) fixed again ...
+
= 1.0.40 2002/10/11 -- Tobi
- 2002/10/11 Jeffrey Wheat <jeff at nt.cetlink.net>
Modified: trunk/orca/packages/rrdtool-1.0.41/Makefile.am
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/Makefile.am (original)
+++ trunk/orca/packages/rrdtool-1.0.41/Makefile.am 2003-02-20 15:24:04.000000000 -0800
@@ -11,7 +11,7 @@
perl-piped/RRDp.pm perl-piped/Makefile.PL perl-piped/t/base.t \
perl-shared/MANIFEST perl-shared/README perl-shared/RRDs.xs \
perl-shared/ntmake.pl perl-shared/Makefile.PL.in perl-shared/t/base.t \
- perl-shared/rrdpl.ds? perl-shared/RRDs.pm
+ perl-shared/rrdpl.ds? perl-shared/RRDs.pm rrdtool.spec
CLEANFILES = config.cache
@@ -73,15 +73,15 @@
(cd website && wmk-1.7.4 -f manual tutorial contributors.wml && ./site-sync )
to-versync:
- perl -i -p -e '"$(VERSION)" =~ /(\d+)\.(\d+)\.(\d+)/; $$v=sprintf("%1d.%02d0%02d1" ,$${1},$${2},$${3}); s|VERSION\s*=\s*[\d.]+|VERSION = $$v|' perl-*/RRD?.pm
+ perl -i -p -e '"$(VERSION)" =~ /(\d+)\.(\d+)\.(\d+)/; $$v=sprintf("%1d.%02d0%02d1" ,$${1},$${2},$${3}); s|VERSION\s*=\s*[\d.]+|VERSION = $$v|' perl-*/RRD?.pm rrdtool.spec
perl -i -p -e 's|RRDtool\s+\d+\.\d+\.\d+ |RRDtool $(VERSION) |' src/*.[ch]
to-dist: to-docs dist
mv $(PACKAGE)-$(VERSION).tar.gz archive
-
+
to-scp: to-dist
cp CHANGES archive/$(PACKAGE)-$(VERSION).tar.gz /home/oetiker/public_html/webtools/rrdtool/pub/
- (cd /home/oetiker/public_html/webtools/rrdtool/pub; rm $(PACKAGE).tar.gz; ln -s $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE).tar.gz)
+ (cd /home/oetiker/public_html/webtools/rrdtool/pub; rm $(PACKAGE).tar.gz; ln -s $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE).tar.gz;gmd5sum $(PACKAGE).tar.gz >$(PACKAGE).tar.gz.md5; pgps $(PACKAGE).tar.gz.md5)
# $(RSYNC) CHANGES archive/$(PACKAGE)-$(VERSION).tar.gz tobi at ipn.caida.org:/ipn/web/Tools/RRDtool/pub/
Modified: trunk/orca/packages/rrdtool-1.0.41/gd1.3/gd.c
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/gd1.3/gd.c (original)
+++ trunk/orca/packages/rrdtool-1.0.41/gd1.3/gd.c 2003-02-20 15:24:04.000000000 -0800
@@ -1554,7 +1554,7 @@
} GifScreen;
#endif
-int ZeroDataBlock;
+static int ZeroDataBlock;
void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color)
Modified: trunk/orca/packages/rrdtool-1.0.41/rrdtool.spec
==============================================================================
--- trunk/orca/packages/rrdtool-1.0.40/rrdtool.spec (original)
+++ trunk/orca/packages/rrdtool-1.0.41/rrdtool.spec 2003-02-20 15:24:04.000000000 -0800
@@ -1,54 +1,107 @@
-%define name rrdtool
-%define ver 1.0.21
-%define extension tar.gz
-
-Summary: Round Robin Database Tools
-Name: %name
-Version: %{ver}
-Release: 2
-Copyright: GPL
-Group: Applications/Networking
-Source: %{name}-%{ver}.%{extension}
-Patch0: rrdtool-perldestdir.patch
-Patch1: rrdtool-tcldestdir.patch
-URL: http://ee-staff.ethz.ch/~oetiker/webtools/rrdtool/
-Buildroot: /tmp/%{name}-%{ver}-root
+%define DISTRO %([ -f /etc/redhat-release ] && sed -e "s/\\(.\\+\\)\\( Linux release \\)\\(.\\+\\)\\( .\\+\\)/\\1 \\3/" /etc/redhat-release)
+%define DISTRO_REL %([ -f /etc/redhat-release ] && sed -e "s/\\(.\\+ release \\)\\(.\\+\\)\\( .\\+\\)/\\2/" /etc/redhat-release)
+%define REQ_RPM_REL %(rpm -q --queryformat "%{VERSION}" rpm)
+%define GLIBC_REL %(rpm -q --queryformat "%{VERSION}" glibc)
+
+Summary: RRDtool - round robin database
+Name: rrdtool
+Version: 1.0.40
+Release: 1.%{DISTRO_REL}
+Copyright: GPL
+Group: Applications/Databases
+Source: http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/%{name}-%{version}.tar.gz
+Source1: MRTG-HOWTO
+Buildroot: /var/tmp/rrdtool-root
+Prefix: %{_prefix}
+BuildRequires: tcl
+Url: http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
+Vendor: Tobi Oetiker <oetiker at ee.ethz.ch>
+Packager: Henri Gomez <hgomez at users.sourceforge.net>, Ragnar Kjørstad <rrdtool at ragnark.vestdata.no>
%description
-It is pretty easy to gather status information from all sorts of things,
-ranging from the temperature in your office to the number of octets which
-have passed through the FDDI interface of your router. But it is not so
-trivial to store this data in a efficient and systematic manner. This is
-where RRDtool kicks in. It lets you log and analyze the data you gather from
-all kinds of data-sources (DS). The data analysis part of RRDtool is based
-on the ability to quickly generate graphical representations of the data
-values collected over a definable time period.
+RRD is the Acronym for Round Robin Database. RRD is a system to store and
+display time-series data (i.e. network bandwidth, machine-room temperature,
+server load average). It stores the data in a very compact way that will not
+expand over time, and it presents useful graphs by processing the data to
+enforce a certain data density. It can be used either via simple wrapper
+scripts (from shell or Perl) or via frontends that poll network devices and
+put a friendly user interface on it.
+
+%package devel
+Summary: RRDtool - round robin database static libraries and headers
+Group: Development/Libraries
+Requires: rrdtool
+%description devel
+RRD is the Acronym for Round Robin Database. RRD is a system to store and
+display time-series data (i.e. network bandwidth, machine-room temperature,
+server load average). This package allow you to use directly this library.
+
%prep
-%setup
-%patch0 -p1
-%patch1 -p1
+%setup -q
+
%build
-./configure --with-tcllib=/usr/lib --prefix=/usr
+CFLAGS="$RPM_OPT_FLAGS" ./configure --with-tcllib=%{_libdir} --prefix=%{_prefix} --enable-shared
make
+# @perl@ and @PERL@ correction
+cd examples
+find . -type f -exec /usr/bin/perl -e 's/^#! \@perl\@/#!\/usr\/bin\/perl/gi' -p -i \{\} \;
+find . -name "*.pl" -exec perl -e 's;\015;;gi' -p -i \{\} \;
+# clean-up pod2man
%install
-make install DESTDIR=${RPM_BUILD_ROOT}
-# install tcl interface...
-make site-tcl-install DESTDIR=${RPM_BUILD_ROOT}
-# rpm uses /doc for its file restructuring...
-mv ${RPM_BUILD_ROOT}/usr/doc ${RPM_BUILD_ROOT}/usr/txt
+rm -rf ${RPM_BUILD_ROOT}
+make install prefix=${RPM_BUILD_ROOT}/usr imandir=${RPM_BUILD_ROOT}%{_mandir}/man1 mandir=${RPM_BUILD_ROOT}%{_mandir}
-%clean
-rm -rf $RPM_BUILD_ROOT
+# reduce executables len
+strip ${RPM_BUILD_ROOT}/%{_bindir}/rrd*
+# reduce libraries len
+strip ${RPM_BUILD_ROOT}/%{_libdir}/librrd*.so
+strip ${RPM_BUILD_ROOT}/%{_libdir}/librrd*.a
+strip ${RPM_BUILD_ROOT}/%{_libdir}/perl/auto/RRDs/RRDs.so
+eval `perl '-V:installarchlib'`
+install -d ${RPM_BUILD_ROOT}/$installarchlib
+mv -f ${RPM_BUILD_ROOT}/%{_libdir}/perl/* ${RPM_BUILD_ROOT}/$installarchlib
+# now create include and files
+install -d ${RPM_BUILD_ROOT}/%{_includedir}
+install -m644 src/rrd*.h ${RPM_BUILD_ROOT}/%{_includedir}
+install -m755 contrib/log2rrd/log2rrd.pl ${RPM_BUILD_ROOT}/%{_bindir}
+# remove .in/.am files
+find . -type f -name "*.in" -exec rm -f \{\} \;
+find . -type f -name "*.am" -exec rm -f \{\} \;
+find ${RPM_BUILD_ROOT}/$installarchlib -type f -print | sed "s@^${RPM_BUILD_ROOT}@@g" > %{name}-%{version}-file
-%files
-%doc CHANGES CONTRIBUTORS COPYING COPYRIGHT NT-BUILD-TIPS.txt README TODO
-%doc ${RPM_BUILD_ROOT}/usr/contrib/
-%doc ${RPM_BUILD_ROOT}/usr/txt/
-%doc ${RPM_BUILD_ROOT}/usr/examples/
-%doc ${RPM_BUILD_ROOT}/usr/html/
-/usr/man/
-/usr/bin/
-/usr/lib/
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+
+%files -f %{name}-%{version}-file
+%defattr(-,root,root)
+%{_bindir}/*
+%{_libdir}/librrd.so*
+%{_mandir}/man1/*
+%doc C* README TODO doc/*.txt doc/*.html $RPM_SOURCE_DIR/MRTG-HOWTO contrib/*
+
+%files devel
+%defattr(-,root,root)
+%{_libdir}/lib*.a
+%{_includedir}/*.h
+%doc examples/*
+
+
+%changelog
+* Mon Oct 28 2002 Andrew Pam <xanni at sericyb.com.au>
+- 1.0.40
+
+* Fri Jul 05 2002 Henri Gomez <hgomez at users.sourceforge.net>
+- 1.0.39
+
+* Mon Jun 03 2002 Henri Gomez <hgomez at users.sourceforge.net>
+- 1.0.38
+
+* Fri Apr 19 2002 Henri Gomez <hgomez at users.sourceforge.net>
+- 1.0.37
+
+* Tue Mar 12 2002 Henri Gomez <hgomez at users.sourceforge.net>
+- 1.0.34
+- rrdtools include zlib 1.1.4 which fix vulnerabilities in 1.1.3
More information about the Orca-checkins
mailing list