summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: be3cca0)
raw | patch | inline | side by side (parent: be3cca0)
author | Sebastian Harl <sh@tokkee.org> | |
Tue, 7 Apr 2009 12:39:21 +0000 (14:39 +0200) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Tue, 7 Apr 2009 12:39:21 +0000 (14:39 +0200) |
138 files changed:
index e6f80e6dadddda070ee8de4e0e8dafa7051d24bb..3f0098804c389b032cebd95d7a5460d8bbe8595f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
+2009-04-07 07:31 oetiker
+
+ * branches/1.3/program/bindings/perl-piped/RRDp.pm,
+ branches/1.3/program/bindings/perl-shared/RRDs.pm,
+ branches/1.3/program/configure.ac,
+ branches/1.3/program/doc/rrdbuild.pod,
+ branches/1.3/program/rrdtool.spec,
+ branches/1.3/program/src/pngsize.c,
+ branches/1.3/program/src/rrd.h,
+ branches/1.3/program/src/rrd_cgi.c,
+ branches/1.3/program/src/rrd_create.c,
+ branches/1.3/program/src/rrd_datalang.c,
+ branches/1.3/program/src/rrd_diff.c,
+ branches/1.3/program/src/rrd_dump.c,
+ branches/1.3/program/src/rrd_error.c,
+ branches/1.3/program/src/rrd_fetch.c,
+ branches/1.3/program/src/rrd_first.c,
+ branches/1.3/program/src/rrd_format.c,
+ branches/1.3/program/src/rrd_format.h,
+ branches/1.3/program/src/rrd_gfx.c,
+ branches/1.3/program/src/rrd_graph.c,
+ branches/1.3/program/src/rrd_graph_helper.c,
+ branches/1.3/program/src/rrd_hw.c,
+ branches/1.3/program/src/rrd_hw.h,
+ branches/1.3/program/src/rrd_i18n.h,
+ branches/1.3/program/src/rrd_info.c,
+ branches/1.3/program/src/rrd_is_thread_safe.h,
+ branches/1.3/program/src/rrd_last.c,
+ branches/1.3/program/src/rrd_lastupdate.c,
+ branches/1.3/program/src/rrd_not_thread_safe.c,
+ branches/1.3/program/src/rrd_open.c,
+ branches/1.3/program/src/rrd_resize.c,
+ branches/1.3/program/src/rrd_restore.c,
+ branches/1.3/program/src/rrd_rpncalc.c,
+ branches/1.3/program/src/rrd_rpncalc.h,
+ branches/1.3/program/src/rrd_thread_safe.c,
+ branches/1.3/program/src/rrd_thread_safe_nt.c,
+ branches/1.3/program/src/rrd_tool.c,
+ branches/1.3/program/src/rrd_tool.h,
+ branches/1.3/program/src/rrd_tune.c,
+ branches/1.3/program/src/rrd_update.c,
+ branches/1.3/program/src/rrd_version.c,
+ branches/1.3/program/src/rrd_xport.c,
+ branches/1.3/program/src/rrd_xport.h,
+ branches/1.3/program/src/rrdupdate.c: prepare for the release of
+ rrdtool-1.3.7
+
+2009-04-07 07:25 oetiker
+
+ * branches/1.3/website/.htaccess,
+ branches/1.3/website/gallery/index.en.html,
+ branches/1.3/website/gallery/miszek.xml,
+ branches/1.3/website/inc/template.inc,
+ branches/1.3/website/rrdworld/index.wml,
+ branches/1.3/website/rrdworld/tacLOG_RRD.png,
+ branches/1.3/website/rrdworld/tacLOG_RRD.xml,
+ branches/1.3/website/site-sync: sync up
+
+2009-04-07 07:23 oetiker
+
+ * branches/1.3/program/doc/rrdbuild.pod: fix build docs
+
+2009-04-07 07:21 oetiker
+
+ * branches/1.3/program/m4: provide have m4 macros go here
+
+2009-04-07 07:20 oetiker
+
+ * branches/1.3/program/configure.ac: set helper directory
+
+2009-04-07 07:20 oetiker
+
+ * branches/1.3/program/src/rrd_graph.c: fix lazy fix ... syntax
+ error
+
+2009-04-07 07:19 oetiker
+
+ * branches/1.3/program/Makefile.am: update ACLOCAL flags
+
+2009-04-07 06:37 oetiker
+
+ * branches/1.3/program/doc/rrdgraph.pod,
+ branches/1.3/program/src/rrd_graph.c, NEWS, doc/rrdgraph.pod,
+ src/rrd_graph.c: fix for #213 restore old behaviour of --lazy.
+ Even in lazy mode all the data calculation elements are run. The
+ main time saving comes from the fact that the graph is not being
+ drawn and the image does not have to be compressed.
+
+2009-04-07 06:03 oetiker
+
+ * branches/1.3/program/src/rrd_dump.c, src/rrd_dump.c: make sure
+ rrd_dump outputs numbers with C locale so that . does not suddenly
+ become , this fixes #212
+
+2009-04-06 14:12 oetiker
+
+ * branches/1.3/program/src/rrd_update.c, src/rrd_update.c: printf
+ for time_t with %lli can easily cause a segfault since on many
+ platforms time_t is only 32bit ... by adding (long long) to the
+ time value this gets fixed.
+
+2009-03-21 10:44 oetiker
+
+ * branches/1.3/program/src/rrd_hw.c: removed more rrd_flush
+ instances
+
+2009-03-21 09:55 oetiker
+
+ * branches/1.3/program/src/rrd_hw.c: rrd_flush is not necessary here
+ this used to ba a call to fflush which is something different
+ anyway.
+
+2009-03-08 08:02 oetiker
+
+ * branches/1.2/program/WIN32-BUILD-TIPS.txt,
+ branches/1.2/program/bindings/Makefile.am,
+ branches/1.2/program/bindings/perl-shared/MANIFEST,
+ branches/1.2/program/bindings/perl-shared/ntmake-build,
+ branches/1.2/program/bindings/perl-shared/ntmake.PL,
+ branches/1.3/program/WIN32-BUILD-TIPS.txt,
+ branches/1.3/program/bindings/Makefile.am,
+ branches/1.3/program/bindings/perl-shared/MANIFEST,
+ branches/1.3/program/bindings/perl-shared/ntmake-build,
+ branches/1.3/program/bindings/perl-shared/ntmake.PL,
+ WIN32-BUILD-TIPS.txt, bindings/Makefile.am,
+ bindings/perl-shared/MANIFEST, bindings/perl-shared/ntmake-build,
+ bindings/perl-shared/ntmake.PL: Renaming ntmake.pl to ntmake.PL
+ (r1742) had unforseen side effects. At least on freebsd ntmake.PL
+ gets called automatically during build. This is not desired. I
+ renamed the file to ntmake-build sinc it gets called explicilty on
+ windows anyway. Reported by Kevin modified by Tobi
+
+2009-03-06 05:51 oetiker
+
+ * branches/1.3/program/src/rrd_xport.c, src/rrd_xport.c: there were
+ two lines of debug info printed by rrd_xport, messing up the xml
+ code. Fix by Alejandro Galue.
+
+2009-03-06 05:40 oetiker
+
+ * branches/1.3/program/configure.ac,
+ branches/1.3/program/src/rrd_thread_safe.c: Even though POSIX/XSI
+ requires "strerror_r" to return an "int", some systems (e.g. the
+ GNU libc) return a "char *" _and_ ignore the second argument (user
+ provided buffer). The configure script now checks for that
+ behavior using AC_FUNC_STRERROR_R. rrd_strerror() in
+ rrd_thread_safe.c has been updated to (hopefully) handle all
+ possible cases. Previously, rrd_strerror() would have returned
+ "strerror_r failed. sorry!" in mostly any cases when using glibc,
+ since "if (strerror_r())" had been used to check for errors which
+ evaluates to true if a (non-NULL) pointer was returned. Now, we,
+ at least, return the error number in case anything else fails.
+ Thanks to Alessandro Iurlano for reporting this issue after
+ spotting it in collectd <http://collectd.org>. patch by Sebastian
+ Harl
+
+2009-02-21 09:46 oetiker
+
+ * branches/1.3/website/rrdworld/index.wml,
+ branches/1.3/website/rrdworld/observer.png,
+ branches/1.3/website/rrdworld/observer.xml,
+ branches/1.3/website/rrdworld/observernms.jpg,
+ branches/1.3/website/rrdworld/observernms.xml: update observer
+ entry
+
+2009-02-21 09:43 oetiker
+
+ * branches/1.2/program/doc/bin_dec_hex.pod,
+ branches/1.2/program/doc/cdeftutorial.pod,
+ branches/1.2/program/doc/rrdgraph.pod,
+ branches/1.2/program/doc/rrdgraph_data.pod,
+ branches/1.2/program/doc/rrdgraph_examples.pod,
+ branches/1.2/program/doc/rrdgraph_graph.pod,
+ branches/1.2/program/doc/rrdgraph_rpn.pod,
+ branches/1.2/program/doc/rrdresize.pod,
+ branches/1.2/program/doc/rrdtutorial.es.pod,
+ branches/1.2/program/doc/rrdtutorial.pod,
+ branches/1.3/program/doc/bin_dec_hex.pod,
+ branches/1.3/program/doc/cdeftutorial.pod,
+ branches/1.3/program/doc/rrdgraph.pod,
+ branches/1.3/program/doc/rrdgraph_data.pod,
+ branches/1.3/program/doc/rrdgraph_examples.pod,
+ branches/1.3/program/doc/rrdgraph_graph.pod,
+ branches/1.3/program/doc/rrdgraph_rpn.pod,
+ branches/1.3/program/doc/rrdresize.pod,
+ branches/1.3/program/doc/rrdtutorial.es.pod,
+ branches/1.3/program/doc/rrdtutorial.pod, doc/bin_dec_hex.pod,
+ doc/cdeftutorial.pod, doc/rrdgraph.pod, doc/rrdgraph_data.pod,
+ doc/rrdgraph_examples.pod, doc/rrdgraph_graph.pod,
+ doc/rrdgraph_rpn.pod, doc/rrdresize.pod, doc/rrdtutorial.es.pod,
+ doc/rrdtutorial.pod: Misc documentation fixes by Alex van den
+ Bogaerdt
+
+2009-02-21 09:22 oetiker
+
+ * branches/1.3/program/doc/rrdgraph.pod,
+ branches/1.3/program/doc/rrdgraph_rpn.pod: Documentation fixes by
+ Bernhard Reutner-Fischer
+
+2009-01-26 05:59 oetiker
+
+ * branches/1.3/website/inc/design.css: fix css to not mutilate trac
+ layout
+
+2009-01-25 22:39 oetiker
+
+ * branches/1.3/program/doc/rrdgraph.pod, doc/rrdgraph.pod: added doc
+ on new graphv graph_start und graph_end info variables
+
+2009-01-25 22:02 oetiker
+
+ * branches/1.2/program/src/rrd_dump.c,
+ branches/1.2/program/src/rrd_first.c,
+ branches/1.3/program/src/rrd_dump.c,
+ branches/1.3/program/src/rrd_first.c,
+ branches/1.3/program/src/rrd_graph.c, src/rrd_dump.c,
+ src/rrd_first.c, src/rrd_graph.c: fix type conversion error (on
+ windows) unsigned/signed affecting timestamps on rrd_dump.
+
+2009-01-25 21:52 oetiker
+
+ * branches/1.2/program/bindings/Makefile.am,
+ branches/1.2/program/bindings/perl-shared/ntmake.PL,
+ branches/1.2/program/bindings/perl-shared/ntmake.pl,
+ branches/1.3/program/bindings/Makefile.am,
+ branches/1.3/program/bindings/perl-shared/ntmake.PL,
+ branches/1.3/program/bindings/perl-shared/ntmake.pl,
+ bindings/Makefile.am, bindings/perl-shared/ntmake.PL,
+ bindings/perl-shared/ntmake.pl: rename ntmake.pl to ntmake.PL so
+ that it does not get installed
+
+2009-01-25 15:49 oetiker
+
+ * branches/1.3/website/download.wml,
+ branches/1.3/website/gallery/index.wml,
+ branches/1.3/website/gallery/miszek.png,
+ branches/1.3/website/gallery/miszek.xml,
+ branches/1.3/website/index.wml,
+ branches/1.3/website/rrdworld/index.wml,
+ branches/1.3/website/rrdworld/lpar2rrd.png,
+ branches/1.3/website/rrdworld/lpar2rrd.xml,
+ branches/1.3/website/sponsor.wml: misc web updates
+
+2009-01-22 15:43 oetiker
+
+ * branches/1.3/program/src/rrd_open.c: Missed to include utime.h.
+ #207.
+
+2009-01-19 14:27 oetiker
+
+ * branches/1.3/program/bindings/perl-piped/RRDp.pm,
+ branches/1.3/program/bindings/perl-shared/RRDs.pm,
+ branches/1.3/program/configure.ac,
+ branches/1.3/program/doc/rrdbuild.pod,
+ branches/1.3/program/rrdtool-1.3-release,
+ branches/1.3/program/rrdtool.spec,
+ branches/1.3/program/src/pngsize.c,
+ branches/1.3/program/src/rrd.h,
+ branches/1.3/program/src/rrd_cgi.c,
+ branches/1.3/program/src/rrd_create.c,
+ branches/1.3/program/src/rrd_datalang.c,
+ branches/1.3/program/src/rrd_diff.c,
+ branches/1.3/program/src/rrd_dump.c,
+ branches/1.3/program/src/rrd_error.c,
+ branches/1.3/program/src/rrd_fetch.c,
+ branches/1.3/program/src/rrd_first.c,
+ branches/1.3/program/src/rrd_format.c,
+ branches/1.3/program/src/rrd_format.h,
+ branches/1.3/program/src/rrd_gfx.c,
+ branches/1.3/program/src/rrd_graph.c,
+ branches/1.3/program/src/rrd_graph_helper.c,
+ branches/1.3/program/src/rrd_hw.c,
+ branches/1.3/program/src/rrd_hw.h,
+ branches/1.3/program/src/rrd_i18n.h,
+ branches/1.3/program/src/rrd_info.c,
+ branches/1.3/program/src/rrd_is_thread_safe.h,
+ branches/1.3/program/src/rrd_last.c,
+ branches/1.3/program/src/rrd_lastupdate.c,
+ branches/1.3/program/src/rrd_not_thread_safe.c,
+ branches/1.3/program/src/rrd_open.c,
+ branches/1.3/program/src/rrd_resize.c,
+ branches/1.3/program/src/rrd_restore.c,
+ branches/1.3/program/src/rrd_rpncalc.c,
+ branches/1.3/program/src/rrd_rpncalc.h,
+ branches/1.3/program/src/rrd_thread_safe.c,
+ branches/1.3/program/src/rrd_thread_safe_nt.c,
+ branches/1.3/program/src/rrd_tool.c,
+ branches/1.3/program/src/rrd_tool.h,
+ branches/1.3/program/src/rrd_tune.c,
+ branches/1.3/program/src/rrd_update.c,
+ branches/1.3/program/src/rrd_version.c,
+ branches/1.3/program/src/rrd_xport.c,
+ branches/1.3/program/src/rrd_xport.h,
+ branches/1.3/program/src/rrdupdate.c: prepare for the release of
+ rrdtool-1.3.6
+
+2009-01-14 08:14 oetiker
+
+ * branches/1.3/program/src/rrd_graph.c, src/rrd_graph.c: In
+ rrd_graph: the width/height values are written into
+ rrd_infoval_t's u_cnt but read out of u_int (u_long vs. int). This
+ breaks on LP64BE. Patch by Rafal Boni rafal pobox.com
+
+2009-01-09 06:14 oetiker
+
+ * branches/1.3/website/download.wml,
+ branches/1.3/website/sponsor.wml,
+ branches/1.3/website/tut/index.wml: added links
+
+2009-01-06 16:32 oetiker
+
+ * branches/1.3/program/src/rrd_resize.c, src/rrd_resize.c: with MMAP
+ enabled rrd resize GROW was broken ... this fixes it ...
+
+2009-01-06 15:45 oetiker
+
+ * branches/1.2/program/src/rrd_graph.c,
+ branches/1.3/program/src/rrd_graph.c, src/rrd_graph.c: TICK with
+ negative numbers should 'start from the top of the graph' looking
+ down ... now it does.
+
+2009-01-06 14:54 oetiker
+
+ * branches/1.2/program/src/rrd_cgi.c,
+ branches/1.3/program/src/rrd_cgi.c, src/rrd_cgi.c: fix for
+ segfault in rrd_cgi: caused by freeing a invalid address when
+ printing an error message.
+
+2008-12-26 08:05 oetiker
+
+ * branches/1.3/program/configure.ac,
+ branches/1.3/program/src/rrd_graph.h, configure.ac,
+ src/rrd_graph.h: Include libgen.h to get prototype for basename in
+ a POSIX conformant way. Fix for #202.
+
+2008-12-26 08:03 oetiker
+
+ * branches/1.3/program/doc/rrdbuild.pod, doc/rrdbuild.pod:
+ improvements for build docs by Zorzoli, Pablo
+
+2008-12-22 21:23 oetiker
+
+ * branches/1.3/program/src/rrd_fetch.c, src/rrd_fetch.c: should free
+ memory after a successful fetch too ...
+
+2008-12-22 21:23 oetiker
+
+ * branches/1.3/program/bindings/perl-shared/RRDs.pm,
+ bindings/perl-shared/RRDs.pm: documentation fixes
+
+2008-12-22 10:25 oetiker
+
+ * branches/1.3/website/logos/asdasd_101x51.png: fixed size
+
+2008-12-22 07:21 oetiker
+
+ * branches/1.3/program/doc/rrdgraph.pod, doc/rrdgraph.pod: Fix for
+ POD error by Sebasian Harl
+
+2008-12-22 07:20 oetiker
+
+ * branches/1.3/program/doc/bin_dec_hex.pod,
+ branches/1.3/program/doc/rpntutorial.pod,
+ branches/1.3/program/doc/rrdbuild.pod,
+ branches/1.3/program/doc/rrdcgi.pod,
+ branches/1.3/program/doc/rrdgraph-old.pod,
+ branches/1.3/program/doc/rrdgraph.pod,
+ branches/1.3/program/doc/rrdgraph_data.pod,
+ branches/1.3/program/doc/rrdgraph_examples.pod,
+ branches/1.3/program/doc/rrdgraph_graph.pod,
+ branches/1.3/program/doc/rrdtool.pod,
+ branches/1.3/program/doc/rrdtutorial.pod, doc/bin_dec_hex.pod,
+ doc/rpntutorial.pod, doc/rrdbuild.pod, doc/rrdcgi.pod,
+ doc/rrdgraph-old.pod, doc/rrdgraph.pod, doc/rrdgraph_data.pod,
+ doc/rrdgraph_examples.pod, doc/rrdgraph_graph.pod,
+ doc/rrdgraph_libdbi.pod, doc/rrdtool.pod, doc/rrdtutorial.pod:
+ Fixes some typos by Sebastian Harl.
+
+2008-12-19 14:26 oetiker
+
+ * branches/1.3/program/src/Makefile.am,
+ branches/1.3/program/src/plbasename.c,
+ branches/1.3/program/src/plbasename.h,
+ branches/1.3/program/src/rrd_graph.c,
+ branches/1.3/program/src/rrd_update.c,
+ branches/1.3/program/win32/rrdlib.vcproj, src/Makefile.am,
+ src/plbasename.c, src/plbasename.h, src/rrd_graph.c,
+ src/rrd_update.c, win32/rrdlib.vcproj: win32 fixes by Stefan .
+ Ludewig . exitgames . com * added portable plbasename since
+ basename is not available on stock win32 * rrd_update was using %d
+ to show a timestamp ... %lli is better since it also will show
+ 64bit time_t correctly.
+
+2008-12-18 23:56 oetiker
+
+ * branches/1.3/program/Makefile.am, Makefile.am: fix extra dist to
+ include missing win32 files
+
+2008-12-18 07:34 oetiker
+
+ * branches/1.3/website/index.wml,
+ branches/1.3/website/logos/hitmeister.gif,
+ branches/1.3/website/sponsor.wml: added hitmeister sponsor
+
+2008-12-16 08:04 oetiker
+
+ * branches/1.3/website/inc/trac.css: special css for trac
+
2008-12-15 22:06 oetiker
* branches/1.3/program/bindings/perl-piped/RRDp.pm,
diff --git a/Makefile.am b/Makefile.am
index 7b6595e508f34723a9e54eb0e0e614819964210c..b703754ef30dce05329957b58f6ca749371e1a2c 100644 (file)
--- a/Makefile.am
+++ b/Makefile.am
+ACLOCAL_AMFLAGS = -I m4
## Process this file with automake to produce Makefile.in
RSYNC = rsync --rsh=ssh
# the following files are not mentioned in any other Makefile
EXTRA_DIST = COPYRIGHT CHANGES WIN32-BUILD-TIPS.txt TODO CONTRIBUTORS THREADS \
intltool-extract.in intltool-merge.in intltool-update.in \
- rrdtool.spec favicon.ico win32/config.h win32/rrd.dsp \
- win32/rrdlib.vcproj win32/rrd.vcproj win32/rrdtool.dsp win32/rrdtool.dsw \
- win32/rrdtool.vcproj win32/Makefile \
- win32/rrd_config.h.msvc netware/Makefile
+ rrdtool.spec favicon.ico win32/Makefile win32/config.h \
+ win32/rrd.dsp win32/rrd.sln win32/rrd.vcproj \
+ win32/rrd_config.h.msvc win32/rrdlib.vcproj win32/rrdtool.dsp \
+ win32/rrdtool.dsw win32/rrdtool.vcproj netware/Makefile
diff --git a/Makefile.in b/Makefile.in
index 180f131d90d6b4523003854018695d6a57509092..bfb43fcf8a076aa2ef0f7fd1a97ed851946b5532 100644 (file)
--- a/Makefile.in
+++ b/Makefile.in
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
+ACLOCAL_AMFLAGS = -I m4
RSYNC = rsync --rsh=ssh
@BUILD_LIBINTL_FALSE@PO =
SUBDIRS = $(PO) src examples doc bindings
EXTRA_DIST = COPYRIGHT CHANGES WIN32-BUILD-TIPS.txt TODO CONTRIBUTORS THREADS \
intltool-extract.in intltool-merge.in intltool-update.in \
- rrdtool.spec favicon.ico win32/config.h win32/rrd.dsp \
- win32/rrdlib.vcproj win32/rrd.vcproj win32/rrdtool.dsp win32/rrdtool.dsw \
- win32/rrdtool.vcproj win32/Makefile \
- win32/rrd_config.h.msvc netware/Makefile
+ rrdtool.spec favicon.ico win32/Makefile win32/config.h \
+ win32/rrd.dsp win32/rrd.sln win32/rrd.vcproj \
+ win32/rrd_config.h.msvc win32/rrdlib.vcproj win32/rrdtool.dsp \
+ win32/rrdtool.dsw win32/rrdtool.vcproj netware/Makefile
CLEANFILES = config.cache
diff --git a/WIN32-BUILD-TIPS.txt b/WIN32-BUILD-TIPS.txt
index 67d2dd9b2041e9d32eefbe72afa14e4ed8a4da94..b3fae966ffb3095e6146b89b6764358f978a72fd 100644 (file)
--- a/WIN32-BUILD-TIPS.txt
+++ b/WIN32-BUILD-TIPS.txt
(8) Run vcvars32.bat; this batch file, in your vc98\bin directory will
set necessary environment options for command line compiling.
(9) In bindings\perl-shared, run
-perl ntmake.pl
+perl ntmake-build
nmake
nmake test
If nmake test succeeds, you are good to go. RRDs.dll is in
diff --git a/bindings/Makefile.am b/bindings/Makefile.am
index cd5cd217daa3b785814582ecda7167efac541e55..d975032c0d4628d6d83feb39f12b0dfeb01747e7 100644 (file)
--- a/bindings/Makefile.am
+++ b/bindings/Makefile.am
# the following files are not mentioned in any other Makefile
EXTRA_DIST = perl-piped/MANIFEST perl-piped/README perl-piped/Makefile.PL perl-piped/RRDp.pm perl-piped/t/base.t \
- perl-shared/ntmake.pl perl-shared/MANIFEST perl-shared/README perl-shared/Makefile.PL perl-shared/RRDs.pm perl-shared/RRDs.xs perl-shared/t/base.t \
+ perl-shared/ntmake-build perl-shared/MANIFEST perl-shared/README perl-shared/Makefile.PL perl-shared/RRDs.pm perl-shared/RRDs.xs perl-shared/t/base.t \
ruby/CHANGES ruby/README ruby/extconf.rb ruby/main.c ruby/test.rb \
python/ACKNOWLEDGEMENT python/AUTHORS python/COPYING python/README python/rrdtoolmodule.c python/setup.py
diff --git a/bindings/Makefile.in b/bindings/Makefile.in
index a08bb0f74fa247603dc2d663642dda3aa8e21d28..284d7fa15c2ae821252f0c144b856eebd3257c76 100644 (file)
--- a/bindings/Makefile.in
+++ b/bindings/Makefile.in
# the following files are not mentioned in any other Makefile
EXTRA_DIST = perl-piped/MANIFEST perl-piped/README perl-piped/Makefile.PL perl-piped/RRDp.pm perl-piped/t/base.t \
- perl-shared/ntmake.pl perl-shared/MANIFEST perl-shared/README perl-shared/Makefile.PL perl-shared/RRDs.pm perl-shared/RRDs.xs perl-shared/t/base.t \
+ perl-shared/ntmake-build perl-shared/MANIFEST perl-shared/README perl-shared/Makefile.PL perl-shared/RRDs.pm perl-shared/RRDs.xs perl-shared/t/base.t \
ruby/CHANGES ruby/README ruby/extconf.rb ruby/main.c ruby/test.rb \
python/ACKNOWLEDGEMENT python/AUTHORS python/COPYING python/README python/rrdtoolmodule.c python/setup.py
index 618707ed56759c347fea96766fbabe9ed4923ec9..dc79358c7b71ed9c0f4bd0e77cae64145bb5ac62 100644 (file)
sub end ();
sub read ();
-$VERSION=1.3005;
+$VERSION=1.3007;
sub start ($){
croak "rrdtool is already running"
index 664d2315a9bcef8fbdf67c4efebe73a3cf6802c2..0f30b7eb29a8e2d0466e722785b8148e0740da19 100644 (file)
-ntmake.pl
+ntmake-build
MANIFEST
README
Makefile.PL
index 0b1958e5a1b0b0c1f47db6400285f2586e6e709e..c9889d0dcb04b313d55f1f73d176b5fd1dcfdddf 100644 (file)
require DynaLoader;
-$VERSION=1.3005;
+$VERSION=1.3007;
bootstrap RRDs $VERSION;
=head2 Calling Sequence
-This module accesses RRDtool functionality directly from within perl. The
+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
+RRDtool documentation. The command line call
rrdtool update mydemo.rrd --template in:out N:12:13
print "$key = $$hash{$key}\n";
}
-B<RRDs::graphv> takes the same paramters as B<RRDs::graph> but it returns a
+B<RRDs::graphv> takes the same parameters as B<RRDs::graph> but it returns a
pointer to hash. The hash returned contains meta information about the
graph. Like its size as well as the position of the graph area on the image.
When calling with and empty filename than the contents of the graph will be
=head1 NOTE
-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
+If you are manipulating the TZ variable you should also call the POSIX
+function L<tzset(3)> to initialize all internal state of the library for properly
operating in the timezone of your choice.
use POSIX qw(tzset);
diff --git a/bindings/perl-shared/ntmake-build b/bindings/perl-shared/ntmake-build
--- /dev/null
@@ -0,0 +1,27 @@
+use ExtUtils::MakeMaker;
+use Config;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+# Run VCVARS32.BAT before generating makefile/compiling.
+WriteMakefile(
+ 'NAME' => 'RRDs',
+ 'VERSION_FROM' => 'RRDs.pm',
+# 'DEFINE' => "-DPERLPATCHLEVEL=$Config{PATCHLEVEL}",
+# keep compatible w/ ActiveState 5xx builds
+ 'DEFINE' => "-DPERLPATCHLEVEL=5",
+
+ 'INC' => '-I../../src/ "-I/Program Files/GnuWin32/include"',
+# Since we are now using GnuWin32 libraries dynamically (instead of static
+# complile with code redistributed with rrdtool), use /MD instead of /MT.
+# Yes, this means we need msvcrt.dll but GnuWin32 dlls already require it
+# and it is available on most versions of Windows.
+ 'OPTIMIZE' => '-O2 -MD',
+ 'LIBS' => '../../src/release/rrd.lib "/Program Files/GnuWin32/lib/libart_lgpl.lib" "/Program Files/GnuWin32/lib/libz.lib" "/Program Files/GnuWin32/lib/libpng.lib" "/Program Files/GnuWin32/lib/libfreetype.lib"',
+ 'realclean' => {FILES => 't/demo?.rrd t/demo?.png' },
+ ($] ge '5.005') ? (
+ 'AUTHOR' => 'Tobias Oetiker (tobi@oetiker.ch)',
+ 'ABSTRACT' => 'Round Robin Database Tool',
+ ) : ()
+
+
+);
diff --git a/bindings/perl-shared/ntmake.pl b/bindings/perl-shared/ntmake.pl
+++ /dev/null
@@ -1,27 +0,0 @@
-use ExtUtils::MakeMaker;
-use Config;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-# Run VCVARS32.BAT before generating makefile/compiling.
-WriteMakefile(
- 'NAME' => 'RRDs',
- 'VERSION_FROM' => 'RRDs.pm',
-# 'DEFINE' => "-DPERLPATCHLEVEL=$Config{PATCHLEVEL}",
-# keep compatible w/ ActiveState 5xx builds
- 'DEFINE' => "-DPERLPATCHLEVEL=5",
-
- 'INC' => '-I../../src/ "-I/Program Files/GnuWin32/include"',
-# Since we are now using GnuWin32 libraries dynamically (instead of static
-# complile with code redistributed with rrdtool), use /MD instead of /MT.
-# Yes, this means we need msvcrt.dll but GnuWin32 dlls already require it
-# and it is available on most versions of Windows.
- 'OPTIMIZE' => '-O2 -MD',
- 'LIBS' => '../../src/release/rrd.lib "/Program Files/GnuWin32/lib/libart_lgpl.lib" "/Program Files/GnuWin32/lib/libz.lib" "/Program Files/GnuWin32/lib/libpng.lib" "/Program Files/GnuWin32/lib/libfreetype.lib"',
- 'realclean' => {FILES => 't/demo?.rrd t/demo?.png' },
- ($] ge '5.005') ? (
- 'AUTHOR' => 'Tobias Oetiker (tobi@oetiker.ch)',
- 'ABSTRACT' => 'Round Robin Database Tool',
- ) : ()
-
-
-);
diff --git a/configure b/configure
index bf3cd231448ba34f1dab97eefc3563e75f48f5ab..094d188a0ae3451245c77a828f7b1dd5de1f6255 100755 (executable)
--- a/configure
+++ b/configure
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for rrdtool 1.3.5.
+# Generated by GNU Autoconf 2.61 for rrdtool 1.3.7.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# Identity of this package.
PACKAGE_NAME='rrdtool'
PACKAGE_TARNAME='rrdtool'
-PACKAGE_VERSION='1.3.5'
-PACKAGE_STRING='rrdtool 1.3.5'
+PACKAGE_VERSION='1.3.7'
+PACKAGE_STRING='rrdtool 1.3.7'
PACKAGE_BUGREPORT=''
ac_default_prefix=/usr/local/rrdtool-$PACKAGE_VERSION
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures rrdtool 1.3.5 to adapt to many kinds of systems.
+\`configure' configures rrdtool 1.3.7 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of rrdtool 1.3.5:";;
+ short | recursive ) echo "Configuration of rrdtool 1.3.7:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-rrdtool configure 1.3.5
+rrdtool configure 1.3.7
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by rrdtool $as_me 1.3.5, which was
+It was created by rrdtool $as_me 1.3.7, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
-NUMVERS=1.3005
+NUMVERS=1.3007
-LIBVERS=4:4:0
+LIBVERS=4:6:0
ac_aux_dir=
# Define the identity of the package.
PACKAGE='rrdtool'
- VERSION='1.3.5'
+ VERSION='1.3.7'
cat >>confdefs.h <<_ACEOF
+
ac_config_headers="$ac_config_headers rrd_config.h"
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 4877 "configure"' > conftest.$ac_ext
+ echo '#line 4878 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7700: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7701: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7704: \$? = $ac_status" >&5
+ echo "$as_me:7705: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7990: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7991: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7994: \$? = $ac_status" >&5
+ echo "$as_me:7995: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8094: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8095: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:8098: \$? = $ac_status" >&5
+ echo "$as_me:8099: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10471 "configure"
+#line 10472 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10571 "configure"
+#line 10572 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12972: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12973: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:12976: \$? = $ac_status" >&5
+ echo "$as_me:12977: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:13076: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:13077: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:13080: \$? = $ac_status" >&5
+ echo "$as_me:13081: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14674: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14675: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14678: \$? = $ac_status" >&5
+ echo "$as_me:14679: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14778: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14779: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14782: \$? = $ac_status" >&5
+ echo "$as_me:14783: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16998: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16999: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17002: \$? = $ac_status" >&5
+ echo "$as_me:17003: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17288: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17289: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17292: \$? = $ac_status" >&5
+ echo "$as_me:17293: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17392: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17393: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:17396: \$? = $ac_status" >&5
+ echo "$as_me:17397: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
-for ac_header in features.h sys/stat.h sys/types.h fcntl.h locale.h fp_class.h malloc.h unistd.h ieeefp.h math.h sys/times.h sys/param.h sys/resource.h signal.h float.h stdio.h stdlib.h errno.h string.h ctype.h
+
+for ac_header in libgen.h features.h sys/stat.h sys/types.h fcntl.h locale.h fp_class.h malloc.h unistd.h ieeefp.h math.h sys/times.h sys/param.h sys/resource.h signal.h float.h stdio.h stdlib.h errno.h string.h ctype.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -21767,8 +21769,170 @@ esac
+for ac_func in tzset fsync mbstowcs opendir readdir chdir chroot getuid setlocale strerror snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+{ echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5
+echo $ECHO_N "checking whether strerror_r is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_strerror_r+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strerror_r
+ (void) strerror_r;
+#endif
-for ac_func in tzset fsync mbstowcs opendir readdir chdir chroot getuid setlocale strerror strerror_r snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strerror_r=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_have_decl_strerror_r=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror_r" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strerror_r" >&6; }
+if test $ac_cv_have_decl_strerror_r = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRERROR_R 0
+_ACEOF
+
+
+fi
+
+
+
+for ac_func in strerror_r
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -21861,6 +22025,132 @@ _ACEOF
fi
done
+{ echo "$as_me:$LINENO: checking whether strerror_r returns char *" >&5
+echo $ECHO_N "checking whether strerror_r returns char *... $ECHO_C" >&6; }
+if test "${ac_cv_func_strerror_r_char_p+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ ac_cv_func_strerror_r_char_p=no
+ if test $ac_cv_have_decl_strerror_r = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ char *p = strerror_r (0, buf, sizeof buf);
+ return !p || x;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_func_strerror_r_char_p=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ else
+ # strerror_r is not declared. Choose between
+ # systems that have relatively inaccessible declarations for the
+ # function. BeOS and DEC UNIX 4.0 fall in this category, but the
+ # former has a strerror_r that returns char*, while the latter
+ # has a strerror_r that returns `int'.
+ # This test should segfault on the DEC system.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+ extern char *strerror_r ();
+int
+main ()
+{
+char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ return ! isalpha (x);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_strerror_r_char_p=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+ fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r_char_p" >&5
+echo "${ECHO_T}$ac_cv_func_strerror_r_char_p" >&6; }
+if test $ac_cv_func_strerror_r_char_p = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STRERROR_R_CHAR_P 1
+_ACEOF
+
+fi
+
case $TERM in
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by rrdtool $as_me 1.3.5, which was
+This file was extended by rrdtool $as_me 1.3.7, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-rrdtool config.status 1.3.5
+rrdtool config.status 1.3.7
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff --git a/configure.ac b/configure.ac
index a7008312f8120469a5212f32438d150599d3610f..496841f07eef3aa1aaa0fcb29474e675490f1492 100644 (file)
--- a/configure.ac
+++ b/configure.ac
dnl the official version number is
dnl a.b.c
-AC_INIT([rrdtool],[1.3.5])
+AC_INIT([rrdtool],[1.3.7])
dnl for testing a numberical version number comes handy
dnl the released version are
dnl a.bccc
dnl the devel versions will be something like
dnl a.b999yymmddhh
-NUMVERS=1.3005
+NUMVERS=1.3007
AC_SUBST(NUMVERS)
dnl for the linker to understand which versions the library are compatible with
dnl
dnl see http://sourceware.org/autobook/autobook/autobook_91.html
dnl
-LIBVERS=4:4:0
+LIBVERS=4:6:0
AC_SUBST(LIBVERS)
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE
+AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([rrd_config.h])
dnl all our local stuff like install scripts and include files
dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_DIRENT
-AC_CHECK_HEADERS(features.h sys/stat.h sys/types.h fcntl.h locale.h fp_class.h malloc.h unistd.h ieeefp.h math.h sys/times.h sys/param.h sys/resource.h signal.h float.h stdio.h stdlib.h errno.h string.h ctype.h)
+AC_CHECK_HEADERS(libgen.h features.h sys/stat.h sys/types.h fcntl.h locale.h fp_class.h malloc.h unistd.h ieeefp.h math.h sys/times.h sys/param.h sys/resource.h signal.h float.h stdio.h stdlib.h errno.h string.h ctype.h)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
dnl for each function found we get a definition in config.h
dnl of the form HAVE_FUNCTION
-AC_CHECK_FUNCS(tzset fsync mbstowcs opendir readdir chdir chroot getuid setlocale strerror strerror_r snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday)
+AC_CHECK_FUNCS(tzset fsync mbstowcs opendir readdir chdir chroot getuid setlocale strerror snprintf vsnprintf fpclass class fp_class isnan memmove strchr mktime getrusage gettimeofday)
+
+AC_FUNC_STRERROR_R
CONFIGURE_PART(Map/Fadvis/Madvise checking)
diff --git a/doc/RRDs.html b/doc/RRDs.html
index fc71f3c5070ade0a7592e8e0ddeab93b3d3fe32a..a0db39b3dbe15a50e71b922bd9cd6074db02e9c6 100644 (file)
--- a/doc/RRDs.html
+++ b/doc/RRDs.html
<p>
</p>
<h2><a name="calling_sequence">Calling Sequence</a></h2>
-<p>This module accesses RRDtool functionality directly from within perl. The
+<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>
+RRDtool documentation. The command line call</p>
<pre>
rrdtool update mydemo.rrd --template in:out N:12:13</pre>
<p>gets turned into</p>
foreach my $key (keys %$hash){
print "$key = $$hash{$key}\n";
}</pre>
-<p><strong>RRDs::graphv</strong> takes the same paramters as <strong>RRDs::graph</strong> but it returns a
+<p><strong>RRDs::graphv</strong> takes the same parameters as <strong>RRDs::graph</strong> but it returns a
pointer to hash. The hash returned contains meta information about the
graph. Like its size as well as the position of the graph area on the image.
When calling with and empty filename than the contents of the graph will be
@@ -145,8 +145,8 @@ epoch (1970-01-01) for the supplied ``start'' and ``end'' arguments, respectivel
</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
+<p>If you are manipulating the TZ variable you should also call the POSIX
+function <em>tzset(3)</em> to initialize all internal state of the library for properly
operating in the timezone of your choice.</p>
<pre>
use POSIX qw(tzset);
diff --git a/doc/bin_dec_hex.1 b/doc/bin_dec_hex.1
index 13b92bb9a68bed7ec84919c3896f933501f850e7..c4936decd9a93d65f8d07601e1be243bf9c5c28c 100644 (file)
--- a/doc/bin_dec_hex.1
+++ b/doc/bin_dec_hex.1
.\" ========================================================================
.\"
.IX Title "BIN_DEC_HEX 1"
-.TH BIN_DEC_HEX 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH BIN_DEC_HEX 1 "2009-02-21" "1.3.7" "rrdtool"
.SH "NAME"
bin_dec_hex \- How to use binary, decimal, and hexadecimal notation.
.SH "DESCRIPTION"
Pascal, \*(L"#\*(R" for \s-1HTML\s0. It is common to assume that if a number starts
with a zero, it is octal. It does not matter what is used as long as
you know what it is. I will use \*(L"0x\*(R" for hexadecimal, \*(L"%\*(R" for binary
-and \*(L"0\*(R" for octal. The following numbers are all the same, just their represenatation (base) is different: 021 0x11 17 \f(CW%00010001\fR
+and \*(L"0\*(R" for octal. The following numbers are all the same, just their
+representation (base) is different: 021 0x11 17 \f(CW%00010001\fR
.PP
To do arithmetics and conversions you need to understand one more thing.
It is something you already know but perhaps you do not \*(L"see\*(R" it yet:
(which is just plain 16) four times and write down \*(L"4\*(R" to get 0xA04?.
Subtract 64 from 69 (69 \- 4*16) and the last digit is 5 \-\-> 0xA045.
.PP
-The other method builds ub the number from the right. Let's try 41'029
+The other method builds up the number from the right. Let's try 41'029
again. Divide by 16 and do not use fractions (only whole numbers).
.PP
.Vb 4
basic questions. They will not only get their answer, but at the same
time learn a whole lot more.
.PP
-Alex van den Bogaerdt <alex@ergens.op.het.net>
+Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
diff --git a/doc/bin_dec_hex.html b/doc/bin_dec_hex.html
index 7fcc0276350421cc7353e7261764e8cd0d69ab86..1592801f9f9112a84ba779f0795ea546b7be7b4c 100644 (file)
--- a/doc/bin_dec_hex.html
+++ b/doc/bin_dec_hex.html
Pascal, ``#'' for HTML. It is common to assume that if a number starts
with a zero, it is octal. 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 their represenatation (base) is different: 021 0x11 17 %00010001</p>
+and ``0'' for octal. The following numbers are all the same, just their
+representation (base) 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, (no prefix, so it is decimal) you are talking
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?.
Subtract 64 from 69 (69 - 4*16) and the last digit is 5 --> 0xA045.</p>
-<p>The other method builds ub the number from the right. Let's try 41'029
+<p>The other method builds up the number from the right. Let's try 41'029
again. Divide by 16 and do not use fractions (only whole numbers).</p>
<pre>
41'029 / 16 is 2'564 with a remainder of 5. Write down 5.
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@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<p>Alex van den Bogaerdt <<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>></p>
</body>
diff --git a/doc/bin_dec_hex.pod b/doc/bin_dec_hex.pod
index 7a2adf5d2cfe7bc444e9b5ce257334df1eb3524a..5d3d925c879a075f5c8fe9241265745da2a77eeb 100644 (file)
--- a/doc/bin_dec_hex.pod
+++ b/doc/bin_dec_hex.pod
Pascal, "#" for HTML. It is common to assume that if a number starts
with a zero, it is octal. 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 their represenatation (base) is different: 021 0x11 17 %00010001
+and "0" for octal. The following numbers are all the same, just their
+representation (base) is different: 021 0x11 17 %00010001
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:
(which is just plain 16) four times and write down "4" to get 0xA04?.
Subtract 64 from 69 (69 - 4*16) and the last digit is 5 --> 0xA045.
-The other method builds ub the number from the right. Let's try 41'029
+The other method builds up the number from the right. Let's try 41'029
again. Divide by 16 and do not use fractions (only whole numbers).
41'029 / 16 is 2'564 with a remainder of 5. Write down 5.
basic questions. They will not only get their answer, but at the same
time learn a whole lot more.
-Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt>
+Alex van den Bogaerdt E<lt>alex@vandenbogaerdt.nlE<gt>
diff --git a/doc/bin_dec_hex.txt b/doc/bin_dec_hex.txt
index 25c8447c7b651fb31f8b2a677c15781b83164dc2..7e81115193ce232aeb0979f8b6e78439c961a0ac 100644 (file)
--- a/doc/bin_dec_hex.txt
+++ b/doc/bin_dec_hex.txt
for HTML. It is common to assume that if a number starts with a zero,
it is octal. 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 their represenata-
+ octal. The following numbers are all the same, just their representa-
tion (base) is different: 021 0x11 17 %00010001
To do arithmetics and conversions you need to understand one more
get 0xA04?. Subtract 64 from 69 (69 - 4*16) and the last digit is 5
--> 0xA045.
- The other method builds ub the number from the right. Let's try 41'029
+ The other method builds up the number from the right. Let's try 41'029
again. Divide by 16 and do not use fractions (only whole numbers).
41'029 / 16 is 2'564 with a remainder of 5. Write down 5.
basic questions. They will not only get their answer, but at the same
time learn a whole lot more.
- Alex van den Bogaerdt <alex@ergens.op.het.net>
+ Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
-1.3.5 2008-03-15 BIN_DEC_HEX(1)
+1.3.7 2009-02-21 BIN_DEC_HEX(1)
diff --git a/doc/cdeftutorial.1 b/doc/cdeftutorial.1
index 07ec9b2e30790c80742667a05c50cc3078c0f1a7..74e995fb24509acc18a7dd876ad723f5f0cbea9f 100644 (file)
--- a/doc/cdeftutorial.1
+++ b/doc/cdeftutorial.1
.\" ========================================================================
.\"
.IX Title "CDEFTUTORIAL 1"
-.TH CDEFTUTORIAL 1 "2008-10-30" "1.3.5" "rrdtool"
+.TH CDEFTUTORIAL 1 "2009-02-21" "1.3.7" "rrdtool"
.SH "NAME"
cdeftutorial \- Alex van den Bogaerdt's CDEF tutorial
.SH "DESCRIPTION"
to add it. I will then try to provide an answer in the next release
of this tutorial. No feedback equals no changes! Additions to
this document are also welcome. \*(-- Alex van den Bogaerdt
-<alex@ergens.op.het.net>
+<alex@vandenbogaerdt.nl>
.Sh "Why this tutorial?"
.IX Subsection "Why this tutorial?"
One of the powerful parts of RRDtool is its ability to do all sorts
other people on the RRDtool mailing 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:
-<alex@ergens.op.het.net>
+<alex@vandenbogaerdt.nl>
.PP
Remember: \fBNo feedback equals no changes!\fR
.SH "SEE ALSO"
.SH "AUTHOR"
.IX Header "AUTHOR"
Alex van den Bogaerdt
-<alex@ergens.op.het.net>
+<alex@vandenbogaerdt.nl>
diff --git a/doc/cdeftutorial.html b/doc/cdeftutorial.html
index 1a991358af6a92a6edc49a3dd1da8c0b4053552e..679ec0e3cfeedb6df325d8e4b98235a0f7405214 100644 (file)
--- a/doc/cdeftutorial.html
+++ b/doc/cdeftutorial.html
to add it. I will then try to provide an answer in the next release
of this tutorial. No feedback equals no changes! Additions to
this document are also welcome. -- Alex van den Bogaerdt
-<<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>></p>
<p>
</p>
<h2><a name="why_this_tutorial">Why this tutorial?</a></h2>
other people on the RRDtool mailing 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@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>></p>
<p>Remember: <strong>No feedback equals no changes!</strong></p>
<p>
</p>
<hr />
<h1><a name="author">AUTHOR</a></h1>
<p>Alex van den Bogaerdt
-<<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>></p>
</body>
diff --git a/doc/cdeftutorial.pod b/doc/cdeftutorial.pod
index 2cfe586908c50d09cc7b3168d57899fc30554231..2bd8fd66f76e1f8335cee9264f0efe5d093ba016 100644 (file)
--- a/doc/cdeftutorial.pod
+++ b/doc/cdeftutorial.pod
to add it. I will then try to provide an answer in the next release
of this tutorial. No feedback equals no changes! Additions to
this document are also welcome. -- Alex van den Bogaerdt
-E<lt>alex@ergens.op.het.netE<gt>
+E<lt>alex@vandenbogaerdt.nlE<gt>
=head2 Why this tutorial?
other people on the RRDtool mailing 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:
-E<lt>alex@ergens.op.het.netE<gt>
+E<lt>alex@vandenbogaerdt.nlE<gt>
Remember: B<No feedback equals no changes!>
=head1 AUTHOR
Alex van den Bogaerdt
-E<lt>alex@ergens.op.het.netE<gt>
+E<lt>alex@vandenbogaerdt.nlE<gt>
diff --git a/doc/cdeftutorial.txt b/doc/cdeftutorial.txt
index d419ed6b4176499f9c5b7100202d8b853dd95a09..0b34ba07ac17138cf90c0becdd97ba83520b26d1 100644 (file)
--- a/doc/cdeftutorial.txt
+++ b/doc/cdeftutorial.txt
adding it to this document would benefit most users, please do ask me
to add it. I will then try to provide an answer in the next release of
this tutorial. No feedback equals no changes! Additions to this docu-
- ment are also welcome. -- Alex van den Bogaerdt
- <alex@ergens.op.het.net>
+ ment are also welcome. -- Alex van den Bogaerdt <alex@vandenbo-
+ gaerdt.nl>
W\bWh\bhy\by t\bth\bhi\bis\bs t\btu\but\bto\bor\bri\bia\bal\bl?\b?
This document was created from questions asked by either myself or by
other people on the RRDtool mailing 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: <alex@ergens.op.het.net>
+ there should be an addition, mail me: <alex@vandenbogaerdt.nl>
Remember: N\bNo\bo f\bfe\bee\bed\bdb\bba\bac\bck\bk e\beq\bqu\bua\bal\bls\bs n\bno\bo c\bch\bha\ban\bng\bge\bes\bs!\b!
The RRDtool manpages
A\bAU\bUT\bTH\bHO\bOR\bR
- Alex van den Bogaerdt <alex@ergens.op.het.net>
+ Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
-1.3.5 2008-10-30 CDEFTUTORIAL(1)
+1.3.7 2009-02-21 CDEFTUTORIAL(1)
diff --git a/doc/rpntutorial.1 b/doc/rpntutorial.1
index 47a87c011bceb167e229210556098ecc43d1eccd..a5aa87a8cd0c6b1217d9e6570e6e7baa7735ccbd 100644 (file)
--- a/doc/rpntutorial.1
+++ b/doc/rpntutorial.1
.\" ========================================================================
.\"
.IX Title "RPNTUTORIAL 1"
-.TH RPNTUTORIAL 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RPNTUTORIAL 1 "2008-12-22" "1.3.7" "rrdtool"
.SH "NAME"
rpntutorial \- Reading RRDtool RPN Expressions by Steve Rader
.SH "DESCRIPTION"
@@ -181,7 +181,7 @@ important to be able to read \s-1IF\s0 operators along with the \s-1LT\s0, \s-1L
.IX Header "Some Examples"
While compound expressions can look overly complex, they can be
considered elegantly simple. To quickly comprehend \s-1RPN\s0 expressions,
-you must know the the algorithm for evaluating \s-1RPN\s0 expressions:
+you must know the algorithm for evaluating \s-1RPN\s0 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.
.Ve
.PP
read \*(L"if A then 10 else input\*(R". Now replace A with it's verbose
-description againg and\*(--voila!\-\-you have a easily readable description
+description again and\*(--voila!\-\-you have a easily readable description
of the expression:
.PP
.Vb 1
diff --git a/doc/rpntutorial.html b/doc/rpntutorial.html
index d3c0956ac2926cfb41d68c1d4dc4de7e8810a23e..58d239cca301bde7b08252b102f304bf55145f86 100644 (file)
--- a/doc/rpntutorial.html
+++ b/doc/rpntutorial.html
<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:
+you must know 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>
<pre>
2) A,10,input,IF eval is A,10,input,IF</pre>
<p>read ``if A then 10 else input''. Now replace A with it's verbose
-description againg and--voila!--you have a easily readable description
+description again and--voila!--you have a easily readable description
of the expression:</p>
<pre>
if input > 10 then 10 else input</pre>
diff --git a/doc/rpntutorial.pod b/doc/rpntutorial.pod
index b3beac1ded0735012874a4340affb79b1a833e38..b830f2700cc3a55bf2c77241cdb801a7c60c95aa 100644 (file)
--- a/doc/rpntutorial.pod
+++ b/doc/rpntutorial.pod
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:
+you must know 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.
2) A,10,input,IF eval is A,10,input,IF
read "if A then 10 else input". Now replace A with it's verbose
-description againg and--voila!--you have a easily readable description
+description again and--voila!--you have a easily readable description
of the expression:
if input > 10 then 10 else input
diff --git a/doc/rpntutorial.txt b/doc/rpntutorial.txt
index 79d04768f05e1317b3a9e94b86c850af7d37de4f..8c70ad518d180a36a98003e843ab308f02979a20 100644 (file)
--- a/doc/rpntutorial.txt
+++ b/doc/rpntutorial.txt
@@ -51,7 +51,7 @@ R\bRe\bea\bad\bdi\bin\bng\bg t\bth\bhe\be I\bIF\bF O\bOp\bpe\ber\bra\bat\bto\bor\br
S\bSo\bom\bme\be E\bEx\bxa\bam\bmp\bpl\ble\bes\bs
While compound expressions can look overly complex, they can be consid-
ered elegantly simple. To quickly comprehend RPN expressions, you must
- know the the algorithm for evaluating RPN expressions: iterate searches
+ know 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.
2) A,10,input,IF eval is A,10,input,IF
read "if A then 10 else input". Now replace A with it's verbose
- description againg and--voila!--you have a easily readable description
+ description again and--voila!--you have a easily readable description
of the expression:
if input > 10 then 10 else input
-1.3.5 2008-03-15 RPNTUTORIAL(1)
+1.3.7 2008-12-22 RPNTUTORIAL(1)
diff --git a/doc/rrd-beginners.1 b/doc/rrd-beginners.1
index 409df53ec77aaa209d849b91466aaa74a759b9df..a06c0ddf27c195e696b1e28c4150b5e299bf9583 100644 (file)
--- a/doc/rrd-beginners.1
+++ b/doc/rrd-beginners.1
.\" ========================================================================
.\"
.IX Title "RRD-BEGINNERS 1"
-.TH RRD-BEGINNERS 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRD-BEGINNERS 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrd\-beginners \- RRDtool Beginners' Guide
.SH "SYNOPSIS"
diff --git a/doc/rrd-beginners.txt b/doc/rrd-beginners.txt
index 871a97c2148305cdf2f60005bfe81269ac3dd575..12056ea5aa8c0b9aa099378b63c17f49ac5117fe 100644 (file)
--- a/doc/rrd-beginners.txt
+++ b/doc/rrd-beginners.txt
-1.3.5 2008-03-15 RRD-BEGINNERS(1)
+1.3.7 2008-03-15 RRD-BEGINNERS(1)
diff --git a/doc/rrdbuild.1 b/doc/rrdbuild.1
index 3cb645aa0fbb2792ac33dc52f998d56ff7c6e147..f95c206fc8af7abcc7c2985f9c6d8eafc1cf9b0f 100644 (file)
--- a/doc/rrdbuild.1
+++ b/doc/rrdbuild.1
.\" ========================================================================
.\"
.IX Title "RRDBUILD 1"
-.TH RRDBUILD 1 "2008-12-15" "1.3.5" "rrdtool"
+.TH RRDBUILD 1 "2009-04-07" "1.3.7" "rrdtool"
.SH "NAME"
rrdbuild \- Instructions for building RRDtool
.SH "OVERVIEW"
.PP
.Vb 2
\& BUILD_DIR=/tmp/rrdbuild
-\& INSTALL_DIR=/usr/local/rrdtool\-1.3.5
+\& INSTALL_DIR=/usr/local/rrdtool\-1.3.7
.Ve
.PP
If your \fI/tmp\fR is mounted with the option noexec (\s-1RHEL\s0 seems todo that) you have to choose
pre\-installed.
.PP
.Vb 4
-\& wget http://oss.oetiker.ch/rrdtool/pub/rrdtool\-1.3.5.tar.gz
-\& gunzip \-c rrdtool\-1.3.5.tar.gz | tar xf \-
-\& cd rrdtool\-1.3.5
+\& wget http://oss.oetiker.ch/rrdtool/pub/rrdtool\-1.3.7.tar.gz
+\& gunzip \-c rrdtool\-1.3.7.tar.gz | tar xf \-
+\& cd rrdtool\-1.3.7
\& ./configure \-\-prefix=$INSTALL_DIR && make && make install
.Ve
.PP
If your \s-1OS\s0 lets you install additional packages from a software repository,
you may get away with installing the missing packages. When the packages are
installed, run configure again and try to compile again. Below you find some
-hints on getting your \s-1OS\s0 ready for the rrdtool compilation.
+hints on getting your \s-1OS\s0 ready for the rrdtool compilation.
.PP
-Additions to this list are welcome.
+Additions to this list are welcome. In general rrdtool should work with the
+latest versions of the libraries. The versions listed here are just what was
+current when I tested this.
.Sh "OpenSolaris 2008.05"
.IX Subsection "OpenSolaris 2008.05"
Just add a compiler and the gnome development package:
\& pkg install SUNWgnome\-common\-devel
.Ve
.PP
-There is a problem with \fIcairo.pc\fR on opensolaris. It suggests that
+There is a problem with \fIcairo.pc\fR on OpenSolaris. It suggests that
xrender is required for compilation with cairo. This is not true and also
-bad since opensolaris does not include an \fIxrender.pc\fR file. Use perl to
+bad since OpenSolaris does not include an \fIxrender.pc\fR file. Use Perl to
fix this:
.PP
.Vb 1
\& export PATH=/opt/SunStudioExpress/bin
.Ve
.PP
-Since there does not seem to ba a viable msgfmt tool on opensolaris (short
+Since there does not seem to be a viable msgfmt tool on OpenSolaris (short
of installing it yourself). You have to call configure with the
.PP
.Vb 1
expectations, so you may want to compile their latest versions.
.Sh "General build tips for \s-1AIX\s0"
.IX Subsection "General build tips for AIX"
-If you are working with \s-1AIX\s0, you may find the the \fB\-\-disable\-shared\fR option
+If you are working with \s-1AIX\s0, you may find the \fB\-\-disable\-shared\fR option
will cause things to break for you. In that case you may have to install the
shared libraries into the rrdtool \s-1PREFIX\s0 and work with \fB\-\-disable\-static\fR
instead.
if you are using the Sun Studio/Forte compiler, you may also want to set
.Sp
.Vb 2
-\& CFLAGS="\-xO3 \-xcode=pic13" (SPARC)
-\& CFLAGS="\-xO3 \-Kpic" (x86)
+\& export CFLAGS="\-xO3 \-xcode=pic13" (SPARC)
+\& export CFLAGS="\-xO3 \-Kpic" (x86)
.Ve
.IP "Linux" 4
.IX Item "Linux"
-.Vb 1
+.Vb 2
+\& export CFLAGS="\-O3 \-fPIC"
\& export LDFLAGS="\-Wl,\-\-rpath \-Wl,${INSTALL_DIR}/lib"
.Ve
.IP "\s-1HPUX\s0" 4
\& export LDFLAGS="\-Wl,\-blibpath:${INSTALL_DIR}/lib"
.Ve
.PP
-If you have GNUmake installed and it is not called 'make',
+If you have \s-1GNU\s0 make installed and it is not called 'make',
then do
.PP
.Vb 2
\& wget http://pkgconfig.freedesktop.org/releases/pkg\-config\-0.23.tar.gz
\& gunzip \-c pkg\-config\-0.23.tar.gz | tar xf \-
\& cd pkg\-config\-0.23
-\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
+\& ./configure \-\-prefix=$INSTALL_DIR
\& $MAKE
\& $MAKE install
.Ve
.PP
+After installing pkgconfig in a custom directory, setting up the corresponding
+environment variable will be helpful.
+.PP
+.Vb 1
+\& export PKG_CONFIG=$INSTALL_DIR/bin/pkg\-config
+.Ve
+.PP
\fIBuilding zlib\fR
.IX Subsection "Building zlib"
.PP
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/zlib\-1.2.3.tar.gz
\& gunzip \-c zlib\-1.2.3.tar.gz | tar xf \-
\& cd zlib\-1.2.3
-\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC" \-\-shared
+\& ./configure \-\-prefix=$INSTALL_DIR \-\-shared
\& $MAKE
\& $MAKE install
.Ve
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/libpng\-1.2.18.tar.gz
\& gunzip \-c libpng\-1.2.18.tar.gz | tar xf \-
-\& cd libpng\-1.2.10
-\& env CFLAGS="\-O3 \-fPIC" ./configure \-\-prefix=$INSTALL_DIR
+\& cd libpng\-1.2.18
+\& ./configure \-\-prefix=$INSTALL_DIR
\& $MAKE
\& $MAKE install
.Ve
.PP
.Vb 7
\& cd $BUILD_DIR
-\& wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2\-sources\-2.6.31.tar.gz
-\& gunzip \-c libxml2\-sources\-2.6.31.tar.gz | tar xf \-
-\& cd libxml2\-sources\-2.6.31
-\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
+\& wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2\-2.6.32.tar.gz
+\& gunzip \-c libxml2\-2.6.32.tar.gz | tar xf \-
+\& cd libxml2\-2.6.32
+\& ./configure \-\-prefix=$INSTALL_DIR
\& $MAKE
\& $MAKE install
.Ve
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/fontconfig\-2.4.2.tar.gz
\& gunzip \-c fontconfig\-2.4.2.tar.gz | tar xf \-
\& cd fontconfig\-2.4.2
-\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
+\& ./configure \-\-prefix=$INSTALL_DIR \-\-with\-freetype\-config=$INSTALL_DIR/bin/freetype\-config
\& $MAKE
\& $MAKE install
.Ve
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/pixman\-0.10.0.tar.gz
\& gunzip \-c pixman\-0.10.0.tar.gz | tar xf \-
\& cd pixman\-0.10.0
-\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
+\& ./configure \-\-prefix=$INSTALL_DIR
\& $MAKE
\& $MAKE install
.Ve
\fIBuilding Cairo\fR
.IX Subsection "Building Cairo"
.PP
-.Vb 11
+.Vb 10
\& cd $BUILD_DIR
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/cairo\-1.6.4.tar.gz
\& gunzip \-c cairo\-1.6.4.tar.gz | tar xf \-
-\& cd cairo\-1.4.10
+\& cd cairo\-1.6.4
\& ./configure \-\-prefix=$INSTALL_DIR \e
\& \-\-enable\-xlib=no \e
\& \-\-enable\-xlib\-render=no \e
-\& \-\-enable\-win32=no \e
-\& CFLAGS="\-O3 \-fPIC"
+\& \-\-enable\-win32=no
\& $MAKE
\& $MAKE install
.Ve
\& wget http://oss.oetiker.ch/rrdtool/pub/libs/glib\-2.15.4.tar.gz
\& gunzip \-c glib\-2.15.4.tar.gz | tar xf \-
\& cd glib\-2.15.4
-\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC"
+\& ./configure \-\-prefix=$INSTALL_DIR
\& $MAKE
\& $MAKE install
.Ve
.PP
.Vb 7
\& cd $BUILD_DIR
-\& wget http://oss.oetiker.ch/rrdtool/pub/libs/pango\-1.21.1.tar.gz
-\& gunzip \-c pango\-1.21.1.tar.gz | tar xf \-
+\& wget http://oss.oetiker.ch/rrdtool/pub/libs/pango\-1.21.1.tar.bz2
+\& bunzip2 \-c pango\-1.21.1.tar.bz2 | tar xf \-
\& cd pango\-1.21.1
-\& ./configure \-\-prefix=$INSTALL_DIR CFLAGS="\-O3 \-fPIC" \-\-without\-x
+\& ./configure \-\-prefix=$INSTALL_DIR \-\-without\-x
\& $MAKE
\& $MAKE install
.Ve
their current state.
.PP
.Vb 5
-\& cd $BUILD_DIR/rrdtool\-1.3.5
+\& cd $BUILD_DIR/rrdtool\-1.3.7
\& ./configure \-\-prefix=$INSTALL_DIR \-\-disable\-tcl \-\-disable\-python
\& $MAKE clean
\& $MAKE
\& $MAKE install
.Ve
.PP
-\&\s-1SOLARIS\s0 \s-1HINT:\s0 if you want to build the perl module for the native perl (the
+\&\s-1SOLARIS\s0 \s-1HINT:\s0 if you want to build the Perl module for the native Perl (the
one shipping with Solaris) you will need the Sun Forte compiler installed on
your box or you have to hand-tune bindings/perl\-shared/Makefile while
building!
diff --git a/doc/rrdbuild.html b/doc/rrdbuild.html
index 8df3f447b2af69d5b0c20496c0da528890a9307d..bf9a9aef494aff8c42e8a265961a2d083ce106c5 100644 (file)
--- a/doc/rrdbuild.html
+++ b/doc/rrdbuild.html
<p>Once you have decided. Save the two locations into environment variables.</p>
<pre>
BUILD_DIR=/tmp/rrdbuild
- INSTALL_DIR=/usr/local/rrdtool-1.3.5</pre>
+ INSTALL_DIR=/usr/local/rrdtool-1.3.7</pre>
<p>If your <em>/tmp</em> is mounted with the option noexec (RHEL seems todo that) you have to choose
a different directory!</p>
<p>Now make sure the BUILD_DIR exists and go there:</p>
<p>Lets first assume you already have all the necessary libraries
pre-installed.</p>
<pre>
- wget <a href="http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.5.tar.gz">http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.5.tar.gz</a>
- gunzip -c rrdtool-1.3.5.tar.gz | tar xf -
- cd rrdtool-1.3.5
+ wget <a href="http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.7.tar.gz">http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.7.tar.gz</a>
+ gunzip -c rrdtool-1.3.7.tar.gz | tar xf -
+ cd rrdtool-1.3.7
./configure --prefix=$INSTALL_DIR && make && make install</pre>
<p>Ok, this was very optimistic. This try will probably have ended with
<strong>configure</strong> complaining about several missing libraries.</p>
you may get away with installing the missing packages. When the packages are
installed, run configure again and try to compile again. Below you find some
hints on getting your OS ready for the rrdtool compilation.</p>
-<p>Additions to this list are welcome.</p>
+<p>Additions to this list are welcome. In general rrdtool should work with the
+latest versions of the libraries. The versions listed here are just what was
+current when I tested this.</p>
<p>
</p>
<h2><a name="opensolaris_2008_05">OpenSolaris 2008.05</a></h2>
<pre>
pkg install sunstudioexpress
pkg install SUNWgnome-common-devel</pre>
-<p>There is a problem with <em>cairo.pc</em> on opensolaris. It suggests that
+<p>There is a problem with <em>cairo.pc</em> on OpenSolaris. It suggests that
xrender is required for compilation with cairo. This is not true and also
-bad since opensolaris does not include an <em>xrender.pc</em> file. Use perl to
+bad since OpenSolaris does not include an <em>xrender.pc</em> file. Use Perl to
fix this:</p>
<pre>
perl -i~ -p -e 's/(Requires.*?)\s*xrender.*/$1/' /usr/lib/pkgconfig/cairo.pc</pre>
<p>Make sure rrdtool finds your new compiler</p>
<pre>
export PATH=/opt/SunStudioExpress/bin</pre>
-<p>Since there does not seem to ba a viable msgfmt tool on opensolaris (short
+<p>Since there does not seem to be a viable msgfmt tool on OpenSolaris (short
of installing it yourself). You have to call configure with the</p>
<pre>
--disable-libintl</pre>
<p>
</p>
<h2><a name="general_build_tips_for_aix">General build tips for AIX</a></h2>
-<p>If you are working with AIX, you may find the the <strong>--disable-shared</strong> option
+<p>If you are working with AIX, you may find the <strong>--disable-shared</strong> option
will cause things to break for you. In that case you may have to install the
shared libraries into the rrdtool PREFIX and work with <strong>--disable-static</strong>
instead.</p>
export LDFLAGS=-R${INSTALL_DIR}/lib</pre>
<p>if you are using the Sun Studio/Forte compiler, you may also want to set</p>
<pre>
- CFLAGS="-xO3 -xcode=pic13" (SPARC)
- CFLAGS="-xO3 -Kpic" (x86)</pre>
+ export CFLAGS="-xO3 -xcode=pic13" (SPARC)
+ export CFLAGS="-xO3 -Kpic" (x86)</pre>
</dd>
<dt><strong><a name="item_linux">Linux</a></strong></dt>
<dd>
<pre>
+ export CFLAGS="-O3 -fPIC"
export LDFLAGS="-Wl,--rpath -Wl,${INSTALL_DIR}/lib"</pre>
</dd>
<dt><strong><a name="item_hpux">HPUX</a></strong></dt>
export LDFLAGS="-Wl,-blibpath:${INSTALL_DIR}/lib"</pre>
</dd>
</dl>
-<p>If you have GNUmake installed and it is not called 'make',
+<p>If you have GNU make installed and it is not called 'make',
then do</p>
<pre>
export MAKE=gmake
wget <a href="http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz">http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz</a>
gunzip -c pkg-config-0.23.tar.gz | tar xf -
cd pkg-config-0.23
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install</pre>
+<p>After installing pkgconfig in a custom directory, setting up the corresponding
+environment variable will be helpful.</p>
+<pre>
+ export PKG_CONFIG=$INSTALL_DIR/bin/pkg-config</pre>
<p>
</p>
<h3><a name="building_zlib">Building zlib</a></h3>
wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/zlib-1.2.3.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/zlib-1.2.3.tar.gz</a>
gunzip -c zlib-1.2.3.tar.gz | tar xf -
cd zlib-1.2.3
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --shared
+ ./configure --prefix=$INSTALL_DIR --shared
$MAKE
$MAKE install</pre>
<p>
cd $BUILD_DIR
wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.18.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.18.tar.gz</a>
gunzip -c libpng-1.2.18.tar.gz | tar xf -
- cd libpng-1.2.10
- env CFLAGS="-O3 -fPIC" ./configure --prefix=$INSTALL_DIR
+ cd libpng-1.2.18
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install</pre>
<p>
<h3><a name="building_libxml2">Building LibXML2</a></h3>
<pre>
cd $BUILD_DIR
- wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-sources-2.6.31.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-sources-2.6.31.tar.gz</a>
- gunzip -c libxml2-sources-2.6.31.tar.gz | tar xf -
- cd libxml2-sources-2.6.31
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-2.6.32.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-2.6.32.tar.gz</a>
+ gunzip -c libxml2-2.6.32.tar.gz | tar xf -
+ cd libxml2-2.6.32
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install</pre>
<p>
wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/fontconfig-2.4.2.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/fontconfig-2.4.2.tar.gz</a>
gunzip -c fontconfig-2.4.2.tar.gz | tar xf -
cd fontconfig-2.4.2
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR --with-freetype-config=$INSTALL_DIR/bin/freetype-config
$MAKE
$MAKE install</pre>
<p>
wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/pixman-0.10.0.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/pixman-0.10.0.tar.gz</a>
gunzip -c pixman-0.10.0.tar.gz | tar xf -
cd pixman-0.10.0
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install</pre>
<p>
cd $BUILD_DIR
wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/cairo-1.6.4.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/cairo-1.6.4.tar.gz</a>
gunzip -c cairo-1.6.4.tar.gz | tar xf -
- cd cairo-1.4.10
+ cd cairo-1.6.4
./configure --prefix=$INSTALL_DIR \
--enable-xlib=no \
--enable-xlib-render=no \
- --enable-win32=no \
- CFLAGS="-O3 -fPIC"
+ --enable-win32=no
$MAKE
$MAKE install</pre>
<p>
wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/glib-2.15.4.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/glib-2.15.4.tar.gz</a>
gunzip -c glib-2.15.4.tar.gz | tar xf -
cd glib-2.15.4
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install</pre>
<p>
<h3><a name="building_pango">Building Pango</a></h3>
<pre>
cd $BUILD_DIR
- wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.gz">http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.gz</a>
- gunzip -c pango-1.21.1.tar.gz | tar xf -
+ wget <a href="http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.bz2">http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.bz2</a>
+ bunzip2 -c pango-1.21.1.tar.bz2 | tar xf -
cd pango-1.21.1
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --without-x
+ ./configure --prefix=$INSTALL_DIR --without-x
$MAKE
$MAKE install</pre>
<p>
tcl setups that would prevent rrdtool from building if they are included in
their current state.</p>
<pre>
- cd $BUILD_DIR/rrdtool-1.3.5
+ cd $BUILD_DIR/rrdtool-1.3.7
./configure --prefix=$INSTALL_DIR --disable-tcl --disable-python
$MAKE clean
$MAKE
$MAKE install</pre>
-<p>SOLARIS HINT: if you want to build the perl module for the native perl (the
+<p>SOLARIS HINT: if you want to build the Perl module for the native Perl (the
one shipping with Solaris) you will need the Sun Forte compiler installed on
your box or you have to hand-tune bindings/perl-shared/Makefile while
building!</p>
diff --git a/doc/rrdbuild.pod b/doc/rrdbuild.pod
index 44fc962f1bfe9e2ca5ea1ae23fcbbe12e0af2ae2..85097220783538a887cf4806bbe86a126d1fbee4 100644 (file)
--- a/doc/rrdbuild.pod
+++ b/doc/rrdbuild.pod
Once you have decided. Save the two locations into environment variables.
BUILD_DIR=/tmp/rrdbuild
- INSTALL_DIR=/usr/local/rrdtool-1.3.5
+ INSTALL_DIR=/usr/local/rrdtool-1.3.7
If your F</tmp> is mounted with the option noexec (RHEL seems todo that) you have to choose
Lets first assume you already have all the necessary libraries
pre-installed.
- wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.5.tar.gz
- gunzip -c rrdtool-1.3.5.tar.gz | tar xf -
- cd rrdtool-1.3.5
+ wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.7.tar.gz
+ gunzip -c rrdtool-1.3.7.tar.gz | tar xf -
+ cd rrdtool-1.3.7
./configure --prefix=$INSTALL_DIR && make && make install
Ok, this was very optimistic. This try will probably have ended with
If your OS lets you install additional packages from a software repository,
you may get away with installing the missing packages. When the packages are
installed, run configure again and try to compile again. Below you find some
-hints on getting your OS ready for the rrdtool compilation.
+hints on getting your OS ready for the rrdtool compilation.
-Additions to this list are welcome.
+Additions to this list are welcome. In general rrdtool should work with the
+latest versions of the libraries. The versions listed here are just what was
+current when I tested this.
=head2 OpenSolaris 2008.05
pkg install sunstudioexpress
pkg install SUNWgnome-common-devel
-There is a problem with F<cairo.pc> on opensolaris. It suggests that
+There is a problem with F<cairo.pc> on OpenSolaris. It suggests that
xrender is required for compilation with cairo. This is not true and also
-bad since opensolaris does not include an F<xrender.pc> file. Use perl to
+bad since OpenSolaris does not include an F<xrender.pc> file. Use Perl to
fix this:
perl -i~ -p -e 's/(Requires.*?)\s*xrender.*/$1/' /usr/lib/pkgconfig/cairo.pc
export PATH=/opt/SunStudioExpress/bin
-Since there does not seem to ba a viable msgfmt tool on opensolaris (short
+Since there does not seem to be a viable msgfmt tool on OpenSolaris (short
of installing it yourself). You have to call configure with the
--disable-libintl
=head2 General build tips for AIX
-If you are working with AIX, you may find the the B<--disable-shared> option
+If you are working with AIX, you may find the B<--disable-shared> option
will cause things to break for you. In that case you may have to install the
shared libraries into the rrdtool PREFIX and work with B<--disable-static>
instead.
if you are using the Sun Studio/Forte compiler, you may also want to set
- CFLAGS="-xO3 -xcode=pic13" (SPARC)
- CFLAGS="-xO3 -Kpic" (x86)
+ export CFLAGS="-xO3 -xcode=pic13" (SPARC)
+ export CFLAGS="-xO3 -Kpic" (x86)
=item Linux
+ export CFLAGS="-O3 -fPIC"
export LDFLAGS="-Wl,--rpath -Wl,${INSTALL_DIR}/lib"
=item HPUX
=back
-If you have GNUmake installed and it is not called 'make',
+If you have GNU make installed and it is not called 'make',
then do
export MAKE=gmake
wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz
gunzip -c pkg-config-0.23.tar.gz | tar xf -
cd pkg-config-0.23
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
+After installing pkgconfig in a custom directory, setting up the corresponding
+environment variable will be helpful.
+
+ export PKG_CONFIG=$INSTALL_DIR/bin/pkg-config
+
=head3 Building zlib
Chances are very high that you already have that on your system ...
wget http://oss.oetiker.ch/rrdtool/pub/libs/zlib-1.2.3.tar.gz
gunzip -c zlib-1.2.3.tar.gz | tar xf -
cd zlib-1.2.3
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --shared
+ ./configure --prefix=$INSTALL_DIR --shared
$MAKE
$MAKE install
cd $BUILD_DIR
wget http://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.18.tar.gz
gunzip -c libpng-1.2.18.tar.gz | tar xf -
- cd libpng-1.2.10
- env CFLAGS="-O3 -fPIC" ./configure --prefix=$INSTALL_DIR
+ cd libpng-1.2.18
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
=head3 Building LibXML2
cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-sources-2.6.31.tar.gz
- gunzip -c libxml2-sources-2.6.31.tar.gz | tar xf -
- cd libxml2-sources-2.6.31
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-2.6.32.tar.gz
+ gunzip -c libxml2-2.6.32.tar.gz | tar xf -
+ cd libxml2-2.6.32
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
wget http://oss.oetiker.ch/rrdtool/pub/libs/fontconfig-2.4.2.tar.gz
gunzip -c fontconfig-2.4.2.tar.gz | tar xf -
cd fontconfig-2.4.2
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR --with-freetype-config=$INSTALL_DIR/bin/freetype-config
$MAKE
$MAKE install
wget http://oss.oetiker.ch/rrdtool/pub/libs/pixman-0.10.0.tar.gz
gunzip -c pixman-0.10.0.tar.gz | tar xf -
cd pixman-0.10.0
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
cd $BUILD_DIR
wget http://oss.oetiker.ch/rrdtool/pub/libs/cairo-1.6.4.tar.gz
gunzip -c cairo-1.6.4.tar.gz | tar xf -
- cd cairo-1.4.10
+ cd cairo-1.6.4
./configure --prefix=$INSTALL_DIR \
--enable-xlib=no \
--enable-xlib-render=no \
- --enable-win32=no \
- CFLAGS="-O3 -fPIC"
+ --enable-win32=no
$MAKE
$MAKE install
wget http://oss.oetiker.ch/rrdtool/pub/libs/glib-2.15.4.tar.gz
gunzip -c glib-2.15.4.tar.gz | tar xf -
cd glib-2.15.4
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
=head3 Building Pango
cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.gz
- gunzip -c pango-1.21.1.tar.gz | tar xf -
+ wget http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.bz2
+ bunzip2 -c pango-1.21.1.tar.bz2 | tar xf -
cd pango-1.21.1
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --without-x
+ ./configure --prefix=$INSTALL_DIR --without-x
$MAKE
$MAKE install
tcl setups that would prevent rrdtool from building if they are included in
their current state.
- cd $BUILD_DIR/rrdtool-1.3.5
+ cd $BUILD_DIR/rrdtool-1.3.7
./configure --prefix=$INSTALL_DIR --disable-tcl --disable-python
$MAKE clean
$MAKE
$MAKE install
-SOLARIS HINT: if you want to build the perl module for the native perl (the
+SOLARIS HINT: if you want to build the Perl module for the native Perl (the
one shipping with Solaris) you will need the Sun Forte compiler installed on
your box or you have to hand-tune bindings/perl-shared/Makefile while
building!
diff --git a/doc/rrdbuild.txt b/doc/rrdbuild.txt
index 743a3e9f547e5502067e0c094270c9dfe81ec8c1..18e2696b08bf35b490ec33f404b0d18c43daa0dd 100644 (file)
--- a/doc/rrdbuild.txt
+++ b/doc/rrdbuild.txt
ables.
BUILD_DIR=/tmp/rrdbuild
- INSTALL_DIR=/usr/local/rrdtool-1.3.5
+ INSTALL_DIR=/usr/local/rrdtool-1.3.7
If your _\b/_\bt_\bm_\bp is mounted with the option noexec (RHEL seems todo that)
you have to choose a different directory!
Lets first assume you already have all the necessary libraries
pre-installed.
- wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.5.tar.gz
- gunzip -c rrdtool-1.3.5.tar.gz | tar xf -
- cd rrdtool-1.3.5
+ wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.7.tar.gz
+ gunzip -c rrdtool-1.3.7.tar.gz | tar xf -
+ cd rrdtool-1.3.7
./configure --prefix=$INSTALL_DIR && make && make install
Ok, this was very optimistic. This try will probably have ended with
@@ -63,7 +63,9 @@ I\bIN\bNS\bST\bTA\bAL\bLL\bLI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
Below you find some hints on getting your OS ready for the rrdtool com-
pilation.
- Additions to this list are welcome.
+ Additions to this list are welcome. In general rrdtool should work with
+ the latest versions of the libraries. The versions listed here are just
+ what was current when I tested this.
O\bOp\bpe\ben\bnS\bSo\bol\bla\bar\bri\bis\bs 2\b20\b00\b08\b8.\b.0\b05\b5
@@ -72,9 +74,9 @@ I\bIN\bNS\bST\bTA\bAL\bLL\bLI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
pkg install sunstudioexpress
pkg install SUNWgnome-common-devel
- There is a problem with _\bc_\ba_\bi_\br_\bo_\b._\bp_\bc on opensolaris. It suggests that xren-
+ There is a problem with _\bc_\ba_\bi_\br_\bo_\b._\bp_\bc on OpenSolaris. It suggests that xren-
der is required for compilation with cairo. This is not true and also
- bad since opensolaris does not include an _\bx_\br_\be_\bn_\bd_\be_\br_\b._\bp_\bc file. Use perl to
+ bad since OpenSolaris does not include an _\bx_\br_\be_\bn_\bd_\be_\br_\b._\bp_\bc file. Use Perl to
fix this:
perl -i~ -p -e 's/(Requires.*?)\s*xrender.*/$1/' /usr/lib/pkgconfig/cairo.pc
@@ -83,7 +85,7 @@ I\bIN\bNS\bST\bTA\bAL\bLL\bLI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
export PATH=/opt/SunStudioExpress/bin
- Since there does not seem to ba a viable msgfmt tool on opensolaris
+ Since there does not seem to be a viable msgfmt tool on OpenSolaris
(short of installing it yourself). You have to call configure with the
--disable-libintl
@@ -132,8 +134,8 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
G\bGe\ben\bne\ber\bra\bal\bl b\bbu\bui\bil\bld\bd t\bti\bip\bps\bs f\bfo\bor\br A\bAI\bIX\bX
- If you are working with AIX, you may find the the -\b--\b-d\bdi\bis\bsa\bab\bbl\ble\be-\b-s\bsh\bha\bar\bre\bed\bd
- option will cause things to break for you. In that case you may have to
+ If you are working with AIX, you may find the -\b--\b-d\bdi\bis\bsa\bab\bbl\ble\be-\b-s\bsh\bha\bar\bre\bed\bd option
+ will cause things to break for you. In that case you may have to
install the shared libraries into the rrdtool PREFIX and work with
-\b--\b-d\bdi\bis\bsa\bab\bbl\ble\be-\b-s\bst\bta\bat\bti\bic\bc instead.
@@ -166,10 +168,11 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
if you are using the Sun Studio/Forte compiler, you may also want
to set
- CFLAGS="-xO3 -xcode=pic13" (SPARC)
- CFLAGS="-xO3 -Kpic" (x86)
+ export CFLAGS="-xO3 -xcode=pic13" (SPARC)
+ export CFLAGS="-xO3 -Kpic" (x86)
Linux
+ export CFLAGS="-O3 -fPIC"
export LDFLAGS="-Wl,--rpath -Wl,${INSTALL_DIR}/lib"
HPUX
@@ -178,7 +181,7 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
AIX
export LDFLAGS="-Wl,-blibpath:${INSTALL_DIR}/lib"
- If you have GNUmake installed and it is not called 'make', then do
+ If you have GNU make installed and it is not called 'make', then do
export MAKE=gmake
export GNUMAKE=gmake
@@ -196,10 +199,15 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz
gunzip -c pkg-config-0.23.tar.gz | tar xf -
cd pkg-config-0.23
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
+ After installing pkgconfig in a custom directory, setting up the corre-
+ sponding environment variable will be helpful.
+
+ export PKG_CONFIG=$INSTALL_DIR/bin/pkg-config
+
_\bB_\bu_\bi_\bl_\bd_\bi_\bn_\bg _\bz_\bl_\bi_\bb
Chances are very high that you already have that on your system ...
@@ -208,7 +216,7 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
wget http://oss.oetiker.ch/rrdtool/pub/libs/zlib-1.2.3.tar.gz
gunzip -c zlib-1.2.3.tar.gz | tar xf -
cd zlib-1.2.3
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --shared
+ ./configure --prefix=$INSTALL_DIR --shared
$MAKE
$MAKE install
@@ -222,8 +230,8 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
cd $BUILD_DIR
wget http://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.18.tar.gz
gunzip -c libpng-1.2.18.tar.gz | tar xf -
- cd libpng-1.2.10
- env CFLAGS="-O3 -fPIC" ./configure --prefix=$INSTALL_DIR
+ cd libpng-1.2.18
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
@@ -245,10 +253,10 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
_\bB_\bu_\bi_\bl_\bd_\bi_\bn_\bg _\bL_\bi_\bb_\bX_\bM_\bL_\b2
cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-sources-2.6.31.tar.gz
- gunzip -c libxml2-sources-2.6.31.tar.gz | tar xf -
- cd libxml2-sources-2.6.31
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-2.6.32.tar.gz
+ gunzip -c libxml2-2.6.32.tar.gz | tar xf -
+ cd libxml2-2.6.32
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
@@ -263,7 +271,7 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
wget http://oss.oetiker.ch/rrdtool/pub/libs/fontconfig-2.4.2.tar.gz
gunzip -c fontconfig-2.4.2.tar.gz | tar xf -
cd fontconfig-2.4.2
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR --with-freetype-config=$INSTALL_DIR/bin/freetype-config
$MAKE
$MAKE install
@@ -273,7 +281,7 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
wget http://oss.oetiker.ch/rrdtool/pub/libs/pixman-0.10.0.tar.gz
gunzip -c pixman-0.10.0.tar.gz | tar xf -
cd pixman-0.10.0
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
@@ -282,12 +290,11 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
cd $BUILD_DIR
wget http://oss.oetiker.ch/rrdtool/pub/libs/cairo-1.6.4.tar.gz
gunzip -c cairo-1.6.4.tar.gz | tar xf -
- cd cairo-1.4.10
+ cd cairo-1.6.4
./configure --prefix=$INSTALL_DIR \
--enable-xlib=no \
--enable-xlib-render=no \
- --enable-win32=no \
- CFLAGS="-O3 -fPIC"
+ --enable-win32=no
$MAKE
$MAKE install
@@ -297,17 +304,17 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
wget http://oss.oetiker.ch/rrdtool/pub/libs/glib-2.15.4.tar.gz
gunzip -c glib-2.15.4.tar.gz | tar xf -
cd glib-2.15.4
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ ./configure --prefix=$INSTALL_DIR
$MAKE
$MAKE install
_\bB_\bu_\bi_\bl_\bd_\bi_\bn_\bg _\bP_\ba_\bn_\bg_\bo
cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.gz
- gunzip -c pango-1.21.1.tar.gz | tar xf -
+ wget http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.bz2
+ bunzip2 -c pango-1.21.1.tar.bz2 | tar xf -
cd pango-1.21.1
- ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --without-x
+ ./configure --prefix=$INSTALL_DIR --without-x
$MAKE
$MAKE install
@@ -324,13 +331,13 @@ B\bBU\bUI\bIL\bLD\bDI\bIN\bNG\bG D\bDE\bEP\bPE\bEN\bND\bDE\bEN\bNC\bCI\bIE\bES\bS
python and tcl setups that would prevent rrdtool from building if they
are included in their current state.
- cd $BUILD_DIR/rrdtool-1.3.5
+ cd $BUILD_DIR/rrdtool-1.3.7
./configure --prefix=$INSTALL_DIR --disable-tcl --disable-python
$MAKE clean
$MAKE
$MAKE install
- SOLARIS HINT: if you want to build the perl module for the native perl
+ SOLARIS HINT: if you want to build the Perl module for the native Perl
(the one shipping with Solaris) you will need the Sun Forte compiler
installed on your box or you have to hand-tune bind-
ings/perl-shared/Makefile while building!
-1.3.5 2008-12-15 RRDBUILD(1)
+1.3.7 2009-04-07 RRDBUILD(1)
diff --git a/doc/rrdcgi.1 b/doc/rrdcgi.1
index 3338986909af762f11d44b6e635f3cbb18e35503..99f62fae49e37f5cd8b5579d7eb9770c33e778a2 100644 (file)
--- a/doc/rrdcgi.1
+++ b/doc/rrdcgi.1
.\" ========================================================================
.\"
.IX Title "RRDCGI 1"
-.TH RRDCGI 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDCGI 1 "2008-12-22" "1.3.7" "rrdtool"
.SH "NAME"
rrdcgi \- Create web pages containing RRD graphs based on templates
.SH "SYNOPSIS"
.SH "EXAMPLE 3"
.IX Header "EXAMPLE 3"
This example shows how to handle the case where the \s-1RRD\s0, graphs and
-cgi-bins are seperate directories
+cgi-bins are separate directories
.PP
.Vb 14
\& #!/.../bin/rrdcgi
diff --git a/doc/rrdcgi.html b/doc/rrdcgi.html
index 917ab97ee2e5dfafaa4a8f633e18adacec172ca1..6cdda17c46f6818a78f9749a3fee100b99ed7690 100644 (file)
--- a/doc/rrdcgi.html
+++ b/doc/rrdcgi.html
<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>
+cgi-bins are separate directories</p>
<pre>
#!/.../bin/rrdcgi
<HTML>
diff --git a/doc/rrdcgi.pod b/doc/rrdcgi.pod
index 4c81e018d41a244f2c54e26e39b32adc48e1967e..e34d4c00e29d5b43c646cf6072dd00205db71a57 100644 (file)
--- a/doc/rrdcgi.pod
+++ b/doc/rrdcgi.pod
=head1 EXAMPLE 3
This example shows how to handle the case where the RRD, graphs and
-cgi-bins are seperate directories
+cgi-bins are separate directories
#!/.../bin/rrdcgi
<HTML>
diff --git a/doc/rrdcgi.txt b/doc/rrdcgi.txt
index ebb291c3dd277125a166f50ef465df838c2b90fe..cc4bc6f47ae5fa8cc56542727d6733aa58117ebc 100644 (file)
--- a/doc/rrdcgi.txt
+++ b/doc/rrdcgi.txt
E\bEX\bXA\bAM\bMP\bPL\bLE\bE 3\b3
This example shows how to handle the case where the RRD, graphs and
- cgi-bins are seperate directories
+ cgi-bins are separate directories
#!/.../bin/rrdcgi
<HTML>
-1.3.5 2008-03-15 RRDCGI(1)
+1.3.7 2008-12-22 RRDCGI(1)
diff --git a/doc/rrdcreate.1 b/doc/rrdcreate.1
index a592a42f33e42453021e8818824d2664fdcc0d56..6e20b3c25c0caf1b0d59d769feb1794b188f5ebc 100644 (file)
--- a/doc/rrdcreate.1
+++ b/doc/rrdcreate.1
.\" ========================================================================
.\"
.IX Title "RRDCREATE 1"
-.TH RRDCREATE 1 "2008-06-11" "1.3.5" "rrdtool"
+.TH RRDCREATE 1 "2008-06-11" "1.3.7" "rrdtool"
.SH "NAME"
rrdcreate \- Set up a new Round Robin Database
.SH "SYNOPSIS"
diff --git a/doc/rrdcreate.txt b/doc/rrdcreate.txt
index 678ea43f02dc1ced8c66417735bdc879a73ea314..627e92d57ad757696a7af8418d703c246109d939 100644 (file)
--- a/doc/rrdcreate.txt
+++ b/doc/rrdcreate.txt
-1.3.5 2008-06-11 RRDCREATE(1)
+1.3.7 2008-06-11 RRDCREATE(1)
diff --git a/doc/rrddump.1 b/doc/rrddump.1
index 3b4da7e3238dae7b76d6911403fa34b32c1aeb2d..0d36ce259af8d549e669327e5d172936c8a225a6 100644 (file)
--- a/doc/rrddump.1
+++ b/doc/rrddump.1
.\" ========================================================================
.\"
.IX Title "RRDDUMP 1"
-.TH RRDDUMP 1 "2008-05-16" "1.3.5" "rrdtool"
+.TH RRDDUMP 1 "2008-05-16" "1.3.7" "rrdtool"
.SH "NAME"
rrddump \- dump the contents of an RRD to XML format
.SH "SYNOPSIS"
diff --git a/doc/rrddump.txt b/doc/rrddump.txt
index 717982676ad83b5459561bec40d272b01795cf89..11c2d32a2b9553c47a769ebac10aa68c8a290c4a 100644 (file)
--- a/doc/rrddump.txt
+++ b/doc/rrddump.txt
-1.3.5 2008-05-16 RRDDUMP(1)
+1.3.7 2008-05-16 RRDDUMP(1)
diff --git a/doc/rrdfetch.1 b/doc/rrdfetch.1
index e2a949e26891c9ebbd611ade50123b8caf6e2c5a..95bb79a313b00c164acc4f69209321a577180029 100644 (file)
--- a/doc/rrdfetch.1
+++ b/doc/rrdfetch.1
.\" ========================================================================
.\"
.IX Title "RRDFETCH 1"
-.TH RRDFETCH 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDFETCH 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdfetch \- Fetch data from an RRD.
.SH "SYNOPSIS"
diff --git a/doc/rrdfetch.txt b/doc/rrdfetch.txt
index b2ba2c8eba60f06a318ef7fccb443602c15f1893..810e4bc8aacc0a5cbf5deecc2d22fc7b46a1fd65 100644 (file)
--- a/doc/rrdfetch.txt
+++ b/doc/rrdfetch.txt
-1.3.5 2008-03-15 RRDFETCH(1)
+1.3.7 2008-03-15 RRDFETCH(1)
diff --git a/doc/rrdfirst.1 b/doc/rrdfirst.1
index 615dda3d24d2c056e15157f499f3dc97c3e8f7c9..dd78da9178ec298581f13830966d96cf6510af08 100644 (file)
--- a/doc/rrdfirst.1
+++ b/doc/rrdfirst.1
.\" ========================================================================
.\"
.IX Title "RRDFIRST 1"
-.TH RRDFIRST 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDFIRST 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdfirst \- Return the date of the first data sample in an RRA within an RRD
.SH "SYNOPSIS"
diff --git a/doc/rrdfirst.txt b/doc/rrdfirst.txt
index 3eb180806bb156f8d07202d690a5095080b9a290..d23341523f97a50f512bdad7910d4ea5c50e970e 100644 (file)
--- a/doc/rrdfirst.txt
+++ b/doc/rrdfirst.txt
-1.3.5 2008-03-15 RRDFIRST(1)
+1.3.7 2008-03-15 RRDFIRST(1)
diff --git a/doc/rrdgraph.1 b/doc/rrdgraph.1
index d3c50dd66e454a5c48392765946594edd27a942a..6dac276d369ecb9ee29fc5270fbaaaaf5384cdd4 100644 (file)
--- a/doc/rrdgraph.1
+++ b/doc/rrdgraph.1
.\" ========================================================================
.\"
.IX Title "RRDGRAPH 1"
-.TH RRDGRAPH 1 "2008-12-09" "1.3.5" "rrdtool"
+.TH RRDGRAPH 1 "2009-04-07" "1.3.7" "rrdtool"
.SH "NAME"
rrdgraph \- Round Robin Database tool grapher functions
.SH "SYNOPSIS"
.PP
A horizontal string at the top of the graph and/or a vertically
placed string at the left hand side of the graph.
-.RE
-.IP "Right Axis"
-.IX Item "Right Axis"
+.Sh "Right Axis"
+.IX Subsection "Right Axis"
[\fB\-\-right\-axis\fR \fIscale\fR\fB:\fR\fIshift\fR]
[\fB\-\-right\-axis\-label\fR \fIlabel\fR]
.PP
.PP
In order to avoid anti-aliasing blurring effects rrdtool snaps
points to device resolution pixels, this results in a crisper
-aperance. If this is not to your liking, you can use this switch
+appearance. If this is not to your liking, you can use this switch
to turn this behaviour off.
.PP
Gridfitting is turned off for \s-1PDF\s0, \s-1EPS\s0, \s-1SVG\s0 output by default.
suppress the grid and labels altogether. The default for this option is
to automatically select sensible values.
.Sp
-If you have set \-\-y\-grid to 'none' not only the labels get supressed, also
+If you have set \-\-y\-grid to 'none' not only the labels get suppressed, also
the space reserved for the labels is removed. You can still add space
manually if you use the \-\-units\-length command to explicitly reserve space.
.Sp
[\fB\-z\fR|\fB\-\-lazy\fR]
.PP
Only generate the graph if the current graph is out of date or not existent.
-Note, that only the image size will be returned, if you run with lazy even
-when using graphv and even when using \s-1PRINT\s0.
+Note, that all the calculations will happen regardless so that the output of
+\&\s-1PRINT\s0 and graphv will be complete regardless. Note that the behaviour of
+lazy in this regard has seen several changes over time. The only thing you
+can realy rely on before rrdtool 1.3.7 is that lazy will not generate the
+graph when it is already there and up to date, and also that it will output
+the size of the graph.
.PP
[\fB\-f\fR|\fB\-\-imginfo\fR \fIprintfstr\fR]
.PP
.PP
Use Times for the title: \f(CW\*(C`\-\-font TITLE:13:Times\*(C'\fR
.PP
-If you do not give a font string you can modify just the sice of the default font:
+If you do not give a font string you can modify just the size of the default font:
\&\f(CW\*(C`\-\-font TITLE:13:\*(C'\fR.
.PP
If you specify the size 0 then you can modify just the font without touching
-the size. This is especially usefull for altering the default font without
+the size. This is especially useful for altering the default font without
resetting the default fontsizes: \f(CW\*(C`\-\-font DEFAULT:0:Courier\*(C'\fR.
.PP
RRDtool comes with a preset default font. You can set the environment
.PP
[\fB\-W\fR|\fB\-\-watermark\fR \fIstring\fR]
.PP
-Adds the given string as a watermark, horizontally centred, at the bottom
+Adds the given string as a watermark, horizontally centered, at the bottom
of the graph.
.Sh "Data and variables"
.IX Subsection "Data and variables"
.IX Subsection "graphv"
Calling rrdtool with the graphv option will return information in the
rrdtool info format. On the command line this means that all output will be
-in key=value format. When used from the perl and ruby bindings a hash
+in key=value format. When used from the Perl and Ruby bindings a hash
pointer will be returned from the call.
.PP
When the filename '\-' is given, the contents of the graph itself will also
be returned through this interface (hash key 'image'). On the command line
the output will look like this:
.PP
-.Vb 12
+.Vb 14
\& print[0] = "0.020833"
\& print[1] = "0.0440833"
\& graph_left = 51
\& graph_top = 22
\& graph_width = 400
\& graph_height = 100
+\& graph_start = 1232908800
+\& graph_end = 1232914200
\& image_width = 481
\& image_height = 154
\& value_min = 0.0000000000e+00
.IX Header "AUTHOR"
Program by Tobias Oetiker <tobi@oetiker.ch>
.PP
-This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
+with corrections and/or additions by several people
diff --git a/doc/rrdgraph.html b/doc/rrdgraph.html
index 86155dae54757e48ad1d10870cf3e73d12639453..c3abf01b9a1fad3e8dd164c0593804c362d78aff 100644 (file)
--- a/doc/rrdgraph.html
+++ b/doc/rrdgraph.html
<li><a href="#filename"><em>filename</em></a></li>
<li><a href="#time_range">Time range</a></li>
<li><a href="#labels">Labels</a></li>
+ <li><a href="#right_axis">Right Axis</a></li>
<li><a href="#size">Size</a></li>
<li><a href="#limits">Limits</a></li>
<li><a href="#grid">Grid</a></li>
[<strong>-v</strong>|<strong>--vertical-label</strong> <em>string</em>]</p>
<p>A horizontal string at the top of the graph and/or a vertically
placed string at the left hand side of the graph.</p>
-<dl>
-<dt><strong><a name="item_right_axis">Right Axis</a></strong></dt>
-
-<dd>
+<p>
+</p>
+<h2><a name="right_axis">Right Axis</a></h2>
<p>[<strong>--right-axis</strong> <em>scale</em><strong>:</strong><em>shift</em>]
[<strong>--right-axis-label</strong> <em>label</em>]</p>
<p>A second axis will be drawn to the right of the graph. It is tied to the
<p>By default the format of the axis lables gets determined automatically. If
you want todo this your self, use this option with the same %lf arguments
you know from the PRING and GPRINT commands.</p>
-</dd>
-</dl>
<p>
</p>
<h2><a name="size">Size</a></h2>
<p>[<strong>-N</strong>|<strong>--no-gridfit</strong>]</p>
<p>In order to avoid anti-aliasing blurring effects rrdtool snaps
points to device resolution pixels, this results in a crisper
-aperance. If this is not to your liking, you can use this switch
+appearance. If this is not to your liking, you can use this switch
to turn this behaviour off.</p>
<p>Gridfitting is turned off for PDF, EPS, SVG output by default.</p>
<p>
placed every <em>label factor</em> lines. You can specify <code>-y none</code> to
suppress the grid and labels altogether. The default for this option is
to automatically select sensible values.</p>
-<p>If you have set --y-grid to 'none' not only the labels get supressed, also
+<p>If you have set --y-grid to 'none' not only the labels get suppressed, also
the space reserved for the labels is removed. You can still add space
manually if you use the --units-length command to explicitly reserve space.</p>
<p>[<strong>-Y</strong>|<strong>--alt-y-grid</strong>]</p>
<h2><a name="miscellaneous">Miscellaneous</a></h2>
<p>[<strong>-z</strong>|<strong>--lazy</strong>]</p>
<p>Only generate the graph if the current graph is out of date or not existent.
-Note, that only the image size will be returned, if you run with lazy even
-when using graphv and even when using PRINT.</p>
+Note, that all the calculations will happen regardless so that the output of
+PRINT and graphv will be complete regardless. Note that the behaviour of
+lazy in this regard has seen several changes over time. The only thing you
+can realy rely on before rrdtool 1.3.7 is that lazy will not generate the
+graph when it is already there and up to date, and also that it will output
+the size of the graph.</p>
<p>[<strong>-f</strong>|<strong>--imginfo</strong> <em>printfstr</em>]</p>
<p>After the image has been created, the graph function uses printf
together with this format string to create output similar to the PRINT
@@ -317,10 +319,10 @@ for the title, <code>AXIS</code> for the axis labels, <code>UNIT</code> for the
label, <code>LEGEND</code> for the graph legend, <code>WATERMARK</code> for the watermark on the
edge of the graph.</p>
<p>Use Times for the title: <code>--font TITLE:13:Times</code></p>
-<p>If you do not give a font string you can modify just the sice of the default font:
+<p>If you do not give a font string you can modify just the size of the default font:
<code>--font TITLE:13:</code>.</p>
<p>If you specify the size 0 then you can modify just the font without touching
-the size. This is especially usefull for altering the default font without
+the size. This is especially useful for altering the default font without
resetting the default fontsizes: <code>--font DEFAULT:0:Courier</code>.</p>
<p>RRDtool comes with a preset default font. You can set the environment
variable <code>RRD_DEFAULT_FONT</code> if you want to change this.</p>
should be set to 1024 so that one Kb is 1024 byte. For traffic
measurement, 1 kb/s is 1000 b/s.</p>
<p>[<strong>-W</strong>|<strong>--watermark</strong> <em>string</em>]</p>
-<p>Adds the given string as a watermark, horizontally centred, at the bottom
+<p>Adds the given string as a watermark, horizontally centered, at the bottom
of the graph.</p>
<p>
</p>
@@ -411,7 +413,7 @@ See <a href="././rrdgraph_graph.html">the rrdgraph_graph manpage</a> for the exa
<h2><a name="graphv">graphv</a></h2>
<p>Calling rrdtool with the graphv option will return information in the
rrdtool info format. On the command line this means that all output will be
-in key=value format. When used from the perl and ruby bindings a hash
+in key=value format. When used from the Perl and Ruby bindings a hash
pointer will be returned from the call.</p>
<p>When the filename '-' is given, the contents of the graph itself will also
be returned through this interface (hash key 'image'). On the command line
graph_top = 22
graph_width = 400
graph_height = 100
+ graph_start = 1232908800
+ graph_end = 1232914200
image_width = 481
image_height = 154
value_min = 0.0000000000e+00
<hr />
<h1><a name="author">AUTHOR</a></h1>
<p>Program by Tobias Oetiker <<a href="mailto:tobi@oetiker.ch">tobi@oetiker.ch</a>></p>
-<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>>
+with corrections and/or additions by several people</p>
</body>
diff --git a/doc/rrdgraph.pod b/doc/rrdgraph.pod
index 6cb023436fcb794b353fe4346d90762eef08e293..06bf6793e3b81e028a2f8a61e20c5d4c14742711 100644 (file)
--- a/doc/rrdgraph.pod
+++ b/doc/rrdgraph.pod
A horizontal string at the top of the graph and/or a vertically
placed string at the left hand side of the graph.
-=item Right Axis
+=head2 Right Axis
[B<--right-axis> I<scale>B<:>I<shift>]
[B<--right-axis-label> I<label>]
In order to avoid anti-aliasing blurring effects rrdtool snaps
points to device resolution pixels, this results in a crisper
-aperance. If this is not to your liking, you can use this switch
+appearance. If this is not to your liking, you can use this switch
to turn this behaviour off.
Gridfitting is turned off for PDF, EPS, SVG output by default.
suppress the grid and labels altogether. The default for this option is
to automatically select sensible values.
-If you have set --y-grid to 'none' not only the labels get supressed, also
+If you have set --y-grid to 'none' not only the labels get suppressed, also
the space reserved for the labels is removed. You can still add space
manually if you use the --units-length command to explicitly reserve space.
[B<-z>|B<--lazy>]
Only generate the graph if the current graph is out of date or not existent.
-Note, that only the image size will be returned, if you run with lazy even
-when using graphv and even when using PRINT.
+Note, that all the calculations will happen regardless so that the output of
+PRINT and graphv will be complete regardless. Note that the behaviour of
+lazy in this regard has seen several changes over time. The only thing you
+can realy rely on before rrdtool 1.3.7 is that lazy will not generate the
+graph when it is already there and up to date, and also that it will output
+the size of the graph.
[B<-f>|B<--imginfo> I<printfstr>]
Use Times for the title: C<--font TITLE:13:Times>
-If you do not give a font string you can modify just the sice of the default font:
+If you do not give a font string you can modify just the size of the default font:
C<--font TITLE:13:>.
If you specify the size 0 then you can modify just the font without touching
-the size. This is especially usefull for altering the default font without
+the size. This is especially useful for altering the default font without
resetting the default fontsizes: C<--font DEFAULT:0:Courier>.
RRDtool comes with a preset default font. You can set the environment
[B<-W>|B<--watermark> I<string>]
-Adds the given string as a watermark, horizontally centred, at the bottom
+Adds the given string as a watermark, horizontally centered, at the bottom
of the graph.
=head2 Data and variables
Calling rrdtool with the graphv option will return information in the
rrdtool info format. On the command line this means that all output will be
-in key=value format. When used from the perl and ruby bindings a hash
+in key=value format. When used from the Perl and Ruby bindings a hash
pointer will be returned from the call.
When the filename '-' is given, the contents of the graph itself will also
graph_top = 22
graph_width = 400
graph_height = 100
+ graph_start = 1232908800
+ graph_end = 1232914200
image_width = 481
image_height = 154
value_min = 0.0000000000e+00
Program by Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
-This manual page by Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt>
+This manual page by Alex van den Bogaerdt E<lt>alex@vandenbogaerdt.nlE<gt>
+with corrections and/or additions by several people
diff --git a/doc/rrdgraph.txt b/doc/rrdgraph.txt
index 692d0fdb96953ba87bf48049bb215c8a3d4f3efe..210c9cee6fe8b2c3b2887e0c6283ed61f8a9a403 100644 (file)
--- a/doc/rrdgraph.txt
+++ b/doc/rrdgraph.txt
A horizontal string at the top of the graph and/or a vertically placed
string at the left hand side of the graph.
-Right Axis
-[-\b--\b-r\bri\big\bgh\bht\bt-\b-a\bax\bxi\bis\bs _\bs_\bc_\ba_\bl_\be:\b:_\bs_\bh_\bi_\bf_\bt] [-\b--\b-r\bri\big\bgh\bht\bt-\b-a\bax\bxi\bis\bs-\b-l\bla\bab\bbe\bel\bl _\bl_\ba_\bb_\be_\bl]
+ R\bRi\big\bgh\bht\bt A\bAx\bxi\bis\bs
-A second axis will be drawn to the right of the graph. It is tied to the left
-axis via the scale and shift parameters. You can also define a label for the
-right axis.
+ [-\b--\b-r\bri\big\bgh\bht\bt-\b-a\bax\bxi\bis\bs _\bs_\bc_\ba_\bl_\be:\b:_\bs_\bh_\bi_\bf_\bt] [-\b--\b-r\bri\big\bgh\bht\bt-\b-a\bax\bxi\bis\bs-\b-l\bla\bab\bbe\bel\bl _\bl_\ba_\bb_\be_\bl]
-[-\b--\b-r\bri\big\bgh\bht\bt-\b-a\bax\bxi\bis\bs-\b-f\bfo\bor\brm\bma\bat\bt _\bf_\bo_\br_\bm_\ba_\bt_\b-_\bs_\bt_\br_\bi_\bn_\bg]
+ A second axis will be drawn to the right of the graph. It is tied to
+ the left axis via the scale and shift parameters. You can also define a
+ label for the right axis.
-By default the format of the axis lables gets determined automatically. If you
-want todo this your self, use this option with the same %lf arguments you know
-from the PRING and GPRINT commands.
+ [-\b--\b-r\bri\big\bgh\bht\bt-\b-a\bax\bxi\bis\bs-\b-f\bfo\bor\brm\bma\bat\bt _\bf_\bo_\br_\bm_\ba_\bt_\b-_\bs_\bt_\br_\bi_\bn_\bg]
-S\bSi\biz\bze\be
+ By default the format of the axis lables gets determined automatically.
+ If you want todo this your self, use this option with the same %lf
+ arguments you know from the PRING and GPRINT commands.
-[-\b-w\bw|-\b--\b-w\bwi\bid\bdt\bth\bh _\bp_\bi_\bx_\be_\bl_\bs] [-\b-h\bh|-\b--\b-h\bhe\bei\big\bgh\bht\bt _\bp_\bi_\bx_\be_\bl_\bs] [-\b-j\bj|-\b--\b-o\bon\bnl\bly\by-\b-g\bgr\bra\bap\bph\bh]
-[-\b-D\bD|-\b--\b-f\bfu\bul\bll\bl-\b-s\bsi\biz\bze\be-\b-m\bmo\bod\bde\be]
+ S\bSi\biz\bze\be
-By default, the width and height of the c\bca\ban\bnv\bva\bas\bs (the part with the actual data
-and such). This defaults to 400 pixels by 100 pixels.
+ [-\b-w\bw|-\b--\b-w\bwi\bid\bdt\bth\bh _\bp_\bi_\bx_\be_\bl_\bs] [-\b-h\bh|-\b--\b-h\bhe\bei\big\bgh\bht\bt _\bp_\bi_\bx_\be_\bl_\bs] [-\b-j\bj|-\b--\b-o\bon\bnl\bly\by-\b-g\bgr\bra\bap\bph\bh]
+ [-\b-D\bD|-\b--\b-f\bfu\bul\bll\bl-\b-s\bsi\biz\bze\be-\b-m\bmo\bod\bde\be]
-If you specify the -\b--\b-f\bfu\bul\bll\bl-\b-s\bsi\biz\bze\be-\b-m\bmo\bod\bde\be option, the width and height specify the
-final dimensions of the output image and the canvas is automatically resized
-to fit.
+ By default, the width and height of the c\bca\ban\bnv\bva\bas\bs (the part with the
+ actual data and such). This defaults to 400 pixels by 100 pixels.
-If you specify the -\b--\b-o\bon\bnl\bly\by-\b-g\bgr\bra\bap\bph\bh option and set the height < 32 pixels you will
-get a tiny graph image (thumbnail) to use as an icon for use in an overview,
-for example. All labeling will be stripped off the graph.
+ If you specify the -\b--\b-f\bfu\bul\bll\bl-\b-s\bsi\biz\bze\be-\b-m\bmo\bod\bde\be option, the width and height spec-
+ ify the final dimensions of the output image and the canvas is automat-
+ ically resized to fit.
-L\bLi\bim\bmi\bit\bts\bs
+ If you specify the -\b--\b-o\bon\bnl\bly\by-\b-g\bgr\bra\bap\bph\bh option and set the height < 32 pixels
+ you will get a tiny graph image (thumbnail) to use as an icon for use
+ in an overview, for example. All labeling will be stripped off the
+ graph.
-[-\b-u\bu|-\b--\b-u\bup\bpp\bpe\ber\br-\b-l\bli\bim\bmi\bit\bt _\bv_\ba_\bl_\bu_\be] [-\b-l\bl|-\b--\b-l\blo\bow\bwe\ber\br-\b-l\bli\bim\bmi\bit\bt _\bv_\ba_\bl_\bu_\be] [-\b-r\br|-\b--\b-r\bri\big\bgi\bid\bd]
+ L\bLi\bim\bmi\bit\bts\bs
-By default the graph will be autoscaling so that it will adjust the y-axis to
-the range of the data. You can change this behaviour by explicitly setting the
-limits. The displayed y-axis will then range at least from l\blo\bow\bwe\ber\br-\b-l\bli\bim\bmi\bit\bt to
-u\bup\bpp\bpe\ber\br-\b-l\bli\bim\bmi\bit\bt. Autoscaling will still permit those boundaries to be stretched
-unless the r\bri\big\bgi\bid\bd option is set.
+ [-\b-u\bu|-\b--\b-u\bup\bpp\bpe\ber\br-\b-l\bli\bim\bmi\bit\bt _\bv_\ba_\bl_\bu_\be] [-\b-l\bl|-\b--\b-l\blo\bow\bwe\ber\br-\b-l\bli\bim\bmi\bit\bt _\bv_\ba_\bl_\bu_\be] [-\b-r\br|-\b--\b-r\bri\big\bgi\bid\bd]
-[-\b-A\bA|-\b--\b-a\bal\blt\bt-\b-a\bau\but\bto\bos\bsc\bca\bal\ble\be]
+ By default the graph will be autoscaling so that it will adjust the
+ y-axis to the range of the data. You can change this behaviour by
+ explicitly setting the limits. The displayed y-axis will then range at
+ least from l\blo\bow\bwe\ber\br-\b-l\bli\bim\bmi\bit\bt to u\bup\bpp\bpe\ber\br-\b-l\bli\bim\bmi\bit\bt. Autoscaling will still permit
+ those boundaries to be stretched unless the r\bri\big\bgi\bid\bd option is set.
-Sometimes the default algorithm for selecting the y-axis scale is not satis-
-factory. Normally the scale is selected from a predefined set of ranges and
-this fails miserably when you need to graph something like "260 + 0.001 *
-sin(x)". This option calculates the minimum and maximum y-axis from the actual
-minimum and maximum data values. Our example would display slightly less than
-"260-0.001" to slightly more than "260+0.001" (this feature was contributed by
-Sasha Mikheev).
+ [-\b-A\bA|-\b--\b-a\bal\blt\bt-\b-a\bau\but\bto\bos\bsc\bca\bal\ble\be]
-[-\b-J\bJ|-\b--\b-a\bal\blt\bt-\b-a\bau\but\bto\bos\bsc\bca\bal\ble\be-\b-m\bmi\bin\bn]
+ Sometimes the default algorithm for selecting the y-axis scale is not
+ satisfactory. Normally the scale is selected from a predefined set of
+ ranges and this fails miserably when you need to graph something like
+ "260 + 0.001 * sin(x)". This option calculates the minimum and maximum
+ y-axis from the actual minimum and maximum data values. Our example
+ would display slightly less than "260-0.001" to slightly more than
+ "260+0.001" (this feature was contributed by Sasha Mikheev).
-Where "--alt-autoscale" will modify both the absolute maximum AND minimum
-values, this option will only affect the minimum value. The maximum 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.
+ [-\b-J\bJ|-\b--\b-a\bal\blt\bt-\b-a\bau\but\bto\bos\bsc\bca\bal\ble\be-\b-m\bmi\bin\bn]
-[-\b-M\bM|-\b--\b-a\bal\blt\bt-\b-a\bau\but\bto\bos\bsc\bca\bal\ble\be-\b-m\bma\bax\bx]
+ Where "--alt-autoscale" will modify both the absolute maximum AND mini-
+ mum values, this option will only affect the minimum value. The maximum
+ 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 compres-
+ sion, and thus the throughput may be higher than the WAN line speed.
-Where "--alt-autoscale" will modify both the absolute maximum AND minimum val-
-ues, 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 graph-
-ing router traffic when the WAN line uses compression, and thus the throughput
-may be higher than the WAN line speed.
+ [-\b-M\bM|-\b--\b-a\bal\blt\bt-\b-a\bau\but\bto\bos\bsc\bca\bal\ble\be-\b-m\bma\bax\bx]
-[-\b-N\bN|-\b--\b-n\bno\bo-\b-g\bgr\bri\bid\bdf\bfi\bit\bt]
+ Where "--alt-autoscale" will modify both the absolute maximum AND mini-
+ mum 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 compres-
+ sion, and thus the throughput may be higher than the WAN line speed.
-In order to avoid anti-aliasing blurring effects rrdtool snaps points to
-device resolution pixels, this results in a crisper aperance. If this is not
-to your liking, you can use this switch to turn this behaviour off.
+ [-\b-N\bN|-\b--\b-n\bno\bo-\b-g\bgr\bri\bid\bdf\bfi\bit\bt]
-Gridfitting is turned off for PDF, EPS, SVG output by default.
+ In order to avoid anti-aliasing blurring effects rrdtool snaps points
+ to device resolution pixels, this results in a crisper appearance. If
+ this is not to your liking, you can use this switch to turn this
+ behaviour off.
-G\bGr\bri\bid\bd
+ Gridfitting is turned off for PDF, EPS, SVG output by default.
+ G\bGr\bri\bid\bd
-X-Axis
- [-\b-x\bx|-\b--\b-x\bx-\b-g\bgr\bri\bid\bd _\bG_\bT_\bM:\b:_\bG_\bS_\bT:\b:_\bM_\bT_\bM:\b:_\bM_\bS_\bT:\b:_\bL_\bT_\bM:\b:_\bL_\bS_\bT:\b:_\bL_\bP_\bR:\b:_\bL_\bF_\bM]
- [-\b-x\bx|-\b--\b-x\bx-\b-g\bgr\bri\bid\bd n\bno\bon\bne\be]
+ X-Axis
+ [-\b-x\bx|-\b--\b-x\bx-\b-g\bgr\bri\bid\bd _\bG_\bT_\bM:\b:_\bG_\bS_\bT:\b:_\bM_\bT_\bM:\b:_\bM_\bS_\bT:\b:_\bL_\bT_\bM:\b:_\bL_\bS_\bT:\b:_\bL_\bP_\bR:\b:_\bL_\bF_\bM]
- The x-axis label is quite complex to configure. If you don't have very
- special needs it is probably best to rely on the autoconfiguration to get
- this right. You can specify the string "none" to suppress the grid and
- labels altogether.
+ [-\b-x\bx|-\b--\b-x\bx-\b-g\bgr\bri\bid\bd n\bno\bon\bne\be]
- The grid is defined by specifying a certain amount of time in the _\b?_\bT_\bM
- positions. You can choose from "SECOND", "MINUTE", "HOUR", "DAY", "WEEK",
- "MONTH" or "YEAR". Then you define how many of these should pass between
- each line or label. This pair (_\b?_\bT_\bM_\b:_\b?_\bS_\bT) needs to be specified for the
- base grid (_\bG_\b?_\b?), the major grid (_\bM_\b?_\b?) and the labels (_\bL_\b?_\b?). For the labels
- you also must define a precision in _\bL_\bP_\bR and a _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be format string in
- _\bL_\bF_\bM. _\bL_\bP_\bR defines where each label will be placed. If it is zero, the
- label will be placed right under the corresponding line (useful for hours,
- dates etcetera). If you specify a number of seconds here the label is
- centered on this interval (useful for Monday, January etcetera).
+ The x-axis label is quite complex to configure. If you don't have
+ very special needs it is probably best to rely on the autoconfigu-
+ ration to get this right. You can specify the string "none" to sup-
+ press the grid and labels altogether.
- --x-grid MINUTE:10:HOUR:1:HOUR:4:0:%X
+ The grid is defined by specifying a certain amount of time in the
+ _\b?_\bT_\bM positions. You can choose from "SECOND", "MINUTE", "HOUR",
+ "DAY", "WEEK", "MONTH" or "YEAR". Then you define how many of these
+ should pass between each line or label. This pair (_\b?_\bT_\bM_\b:_\b?_\bS_\bT) needs
+ to be specified for the base grid (_\bG_\b?_\b?), the major grid (_\bM_\b?_\b?) and
+ the labels (_\bL_\b?_\b?). For the labels you also must define a precision
+ in _\bL_\bP_\bR and a _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be format string in _\bL_\bF_\bM. _\bL_\bP_\bR defines where each
+ label will be placed. If it is zero, the label will be placed right
+ under the corresponding line (useful for hours, dates etcetera).
+ If you specify a number of seconds here the label is centered on
+ this interval (useful for Monday, January etcetera).
- This places grid lines every 10 minutes, major grid lines every hour, and
- labels every 4 hours. The labels are placed under the major grid lines as
- they specify exactly that time.
+ --x-grid MINUTE:10:HOUR:1:HOUR:4:0:%X
- --x-grid HOUR:8:DAY:1:DAY:1:86400:%A
+ This places grid lines every 10 minutes, major grid lines every
+ hour, and labels every 4 hours. The labels are placed under the
+ major grid lines as they specify exactly that time.
- This places grid lines every 8 hours, major grid lines and labels each
- day. The labels are placed exactly between two major grid lines as they
- specify the complete day and not just midnight.
+ --x-grid HOUR:8:DAY:1:DAY:1:86400:%A
-Y-Axis
- [-\b-y\by|-\b--\b-y\by-\b-g\bgr\bri\bid\bd _\bg_\br_\bi_\bd _\bs_\bt_\be_\bp:\b:_\bl_\ba_\bb_\be_\bl _\bf_\ba_\bc_\bt_\bo_\br]
+ This places grid lines every 8 hours, major grid lines and labels
+ each day. The labels are placed exactly between two major grid
+ lines as they specify the complete day and not just midnight.
- [-\b-y\by|-\b--\b-y\by-\b-g\bgr\bri\bid\bd n\bno\bon\bne\be]
+ Y-Axis
+ [-\b-y\by|-\b--\b-y\by-\b-g\bgr\bri\bid\bd _\bg_\br_\bi_\bd _\bs_\bt_\be_\bp:\b:_\bl_\ba_\bb_\be_\bl _\bf_\ba_\bc_\bt_\bo_\br]
- Y-axis grid lines appear at each _\bg_\br_\bi_\bd _\bs_\bt_\be_\bp interval. Labels are placed
- every _\bl_\ba_\bb_\be_\bl _\bf_\ba_\bc_\bt_\bo_\br lines. You can specify "-y none" to suppress the grid
- and labels altogether. The default for this option is to automatically
- select sensible values.
+ [-\b-y\by|-\b--\b-y\by-\b-g\bgr\bri\bid\bd n\bno\bon\bne\be]
- If you have set --y-grid to 'none' not only the labels get supressed, also
- the space reserved for the labels is removed. You can still add space man-
- ually if you use the --units-length command to explicitly reserve space.
+ Y-axis grid lines appear at each _\bg_\br_\bi_\bd _\bs_\bt_\be_\bp interval. Labels are
+ placed every _\bl_\ba_\bb_\be_\bl _\bf_\ba_\bc_\bt_\bo_\br lines. You can specify "-y none" to sup-
+ press the grid and labels altogether. The default for this option
+ is to automatically select sensible values.
- [-\b-Y\bY|-\b--\b-a\bal\blt\bt-\b-y\by-\b-g\bgr\bri\bid\bd]
+ If you have set --y-grid to 'none' not only the labels get sup-
+ pressed, also the space reserved for the labels is removed. You can
+ still add space manually if you use the --units-length command to
+ explicitly reserve space.
- Place the Y grid dynamically based on the graph's Y range. The algorithm
- ensures that you always have a grid, that there are enough but not too
- many grid lines, and that the grid is metric. That is the grid lines are
- placed every 1, 2, 5 or 10 units. This parameter will also ensure that you
- get enough decimals displayed even if your graph goes from 69.998 to
- 70.001. (contributed by Sasha Mikheev).
+ [-\b-Y\bY|-\b--\b-a\bal\blt\bt-\b-y\by-\b-g\bgr\bri\bid\bd]
- [-\b-o\bo|-\b--\b-l\blo\bog\bga\bar\bri\bit\bth\bhm\bmi\bic\bc]
+ Place the Y grid dynamically based on the graph's Y range. The
+ algorithm ensures that you always have a grid, that there are
+ enough but not too many grid lines, and that the grid is metric.
+ That is the grid lines are placed every 1, 2, 5 or 10 units. This
+ parameter will also ensure that you get enough decimals displayed
+ even if your graph goes from 69.998 to 70.001. (contributed by
+ Sasha Mikheev).
- Logarithmic y-axis scaling.
+ [-\b-o\bo|-\b--\b-l\blo\bog\bga\bar\bri\bit\bth\bhm\bmi\bic\bc]
- [-\b-X\bX|-\b--\b-u\bun\bni\bit\bts\bs-\b-e\bex\bxp\bpo\bon\bne\ben\bnt\bt _\bv_\ba_\bl_\bu_\be]
+ Logarithmic y-axis scaling.
- 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 is in the
- M (Mega, 10e6) range, for instance. Value should be an integer which is a
- multiple of 3 between -18 and 18 inclusively. It is the exponent on the
- units you wish to use. For example, use 3 to 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.
+ [-\b-X\bX|-\b--\b-u\bun\bni\bit\bts\bs-\b-e\bex\bxp\bpo\bon\bne\ben\bnt\bt _\bv_\ba_\bl_\bu_\be]
- This option is very effective at confusing the heck out of the default
- rrdtool autoscaler and grid painter. If rrdtool detects that it is not
- successful in labeling the graph under the given circumstances, it will
- switch to the more robust -\b--\b-a\bal\blt\bt-\b-y\by-\b-g\bgr\bri\bid\bd mode.
+ This sets the 10**exponent scaling of the y-axis values. Normally,
+ values will be scaled to the appropriate units (k, M, etc.). How-
+ ever, you may wish to display units always in k (Kilo, 10e3) even
+ if the data is in the M (Mega, 10e6) range, for instance. Value
+ should be an integer which is a multiple of 3 between -18 and 18
+ inclusively. It is the exponent on the units you wish to use. For
+ example, use 3 to display the y-axis values in k (Kilo, 10e3, thou-
+ sands), 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.
- [-\b-L\bL|-\b--\b-u\bun\bni\bit\bts\bs-\b-l\ble\ben\bng\bgt\bth\bh _\bv_\ba_\bl_\bu_\be]
+ This option is very effective at confusing the heck out of the
+ default rrdtool autoscaler and grid painter. If rrdtool detects
+ that it is not successful in labeling the graph under the given
+ circumstances, it will switch to the more robust -\b--\b-a\bal\blt\bt-\b-y\by-\b-g\bgr\bri\bid\bd mode.
- How many digits should rrdtool assume the y-axis labels to be? You may
- have to use this option to make enough space once you start fideling with
- the y-axis labeling.
+ [-\b-L\bL|-\b--\b-u\bun\bni\bit\bts\bs-\b-l\ble\ben\bng\bgt\bth\bh _\bv_\ba_\bl_\bu_\be]
- [-\b--\b-u\bun\bni\bit\bts\bs=\b=s\bsi\bi]
+ How many digits should rrdtool assume the y-axis labels to be? You
+ may have to use this option to make enough space once you start
+ fideling with the y-axis labeling.
- With this option y-axis values on logarithmic graphs will be scaled to the
- appropriate units (k, M, etc.) instead of using exponential notation.
- Note that for linear graphs, SI notation is used by default.
+ [-\b--\b-u\bun\bni\bit\bts\bs=\b=s\bsi\bi]
-M\bMi\bis\bsc\bce\bel\bll\bla\ban\bne\beo\bou\bus\bs
+ With this option y-axis values on logarithmic graphs will be scaled
+ to the appropriate units (k, M, etc.) instead of using exponential
+ notation. Note that for linear graphs, SI notation is used by
+ default.
-[-\b-z\bz|-\b--\b-l\bla\baz\bzy\by]
+ M\bMi\bis\bsc\bce\bel\bll\bla\ban\bne\beo\bou\bus\bs
-Only generate the graph if the current graph is out of date or not existent.
-Note, that only the image size will be returned, if you run with lazy even
-when using graphv and even when using PRINT.
+ [-\b-z\bz|-\b--\b-l\bla\baz\bzy\by]
-[-\b-f\bf|-\b--\b-i\bim\bmg\bgi\bin\bnf\bfo\bo _\bp_\br_\bi_\bn_\bt_\bf_\bs_\bt_\br]
+ Only generate the graph if the current graph is out of date or not
+ existent. Note, that all the calculations will happen regardless so
+ that the output of PRINT and graphv will be complete regardless. Note
+ that the behaviour of lazy in this regard has seen several changes over
+ time. The only thing you can realy rely on before rrdtool 1.3.7 is that
+ lazy will not generate the graph when it is already there and up to
+ date, and also that it will output the size of the graph.
-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 function is supplied with the parameters _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be, _\bx_\bs_\bi_\bz_\be and _\by_\bs_\bi_\bz_\be.
-In order to generate an I\bIM\bMG\bG tag suitable for including the graph into a web
-page, the command line would look like this:
+ [-\b-f\bf|-\b--\b-i\bim\bmg\bgi\bin\bnf\bfo\bo _\bp_\br_\bi_\bn_\bt_\bf_\bs_\bt_\br]
- --imginfo '<IMG SRC="/img/%s" WIDTH="%lu" HEIGHT="%lu" ALT="Demo">'
+ 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 function is supplied with the parameters
+ _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be, _\bx_\bs_\bi_\bz_\be and _\by_\bs_\bi_\bz_\be. In order to generate an I\bIM\bMG\bG tag suitable for
+ including the graph into a web page, the command line would look like
+ this:
-[-\b-c\bc|-\b--\b-c\bco\bol\blo\bor\br _\bC_\bO_\bL_\bO_\bR_\bT_\bA_\bG#_\br_\br_\bg_\bg_\bb_\bb[_\ba_\ba]]
+ --imginfo '<IMG SRC="/img/%s" WIDTH="%lu" HEIGHT="%lu" ALT="Demo">'
-Override the default colors for the standard elements of the graph. The _\bC_\bO_\bL_\b-
-_\bO_\bR_\bT_\bA_\bG is one of "BACK" background, "CANVAS" for the background of the actual
-graph, "SHADEA" for the left and top border, "SHADEB" for the right and bottom
-border, "GRID", "MGRID" for the major grid, "FONT" for the color of the font,
-"AXIS" for the axis of the graph, "FRAME" for the line around the color spots,
-and finally "ARROW" for the arrow head pointing up and forward. Each color is
-composed out of three hexadecimal numbers specifying its rgb color component
-(00 is off, FF is maximum) of red, green and blue. Optionally you may add
-another hexadecimal number specifying the transparency (FF is solid). You may
-set this option several times to alter multiple defaults.
+ [-\b-c\bc|-\b--\b-c\bco\bol\blo\bor\br _\bC_\bO_\bL_\bO_\bR_\bT_\bA_\bG#_\br_\br_\bg_\bg_\bb_\bb[_\ba_\ba]]
-A green arrow is made by: "--color ARROW#00FF00"
+ Override the default colors for the standard elements of the graph. The
+ _\bC_\bO_\bL_\bO_\bR_\bT_\bA_\bG is one of "BACK" background, "CANVAS" for the background of
+ the actual graph, "SHADEA" for the left and top border, "SHADEB" for
+ the right and bottom border, "GRID", "MGRID" for the major grid, "FONT"
+ for the color of the font, "AXIS" for the axis of the graph, "FRAME"
+ for the line around the color spots, and finally "ARROW" for the arrow
+ head pointing up and forward. Each color is composed out of three hex-
+ adecimal numbers specifying its rgb color component (00 is off, FF is
+ maximum) of red, green and blue. Optionally you may add another hex-
+ adecimal number specifying the transparency (FF is solid). You may set
+ this option several times to alter multiple defaults.
-[-\b--\b-z\bzo\boo\bom\bm _\bf_\ba_\bc_\bt_\bo_\br]
+ A green arrow is made by: "--color ARROW#00FF00"
-Zoom the graphics by the given amount. The factor must be > 0
+ [-\b--\b-z\bzo\boo\bom\bm _\bf_\ba_\bc_\bt_\bo_\br]
-[-\b-n\bn|-\b--\b-f\bfo\bon\bnt\bt _\bF_\bO_\bN_\bT_\bT_\bA_\bG:\b:_\bs_\bi_\bz_\be:\b:[_\bf_\bo_\bn_\bt]]
+ Zoom the graphics by the given amount. The factor must be > 0
-This lets you customize which font to use for the various text elements on the
-RRD graphs. "DEFAULT" sets the default value for all elements, "TITLE" for the
-title, "AXIS" for the axis labels, "UNIT" for the vertical unit label, "LEG-
-END" for the graph legend, "WATERMARK" for the watermark on the edge of the
-graph.
+ [-\b-n\bn|-\b--\b-f\bfo\bon\bnt\bt _\bF_\bO_\bN_\bT_\bT_\bA_\bG:\b:_\bs_\bi_\bz_\be:\b:[_\bf_\bo_\bn_\bt]]
-Use Times for the title: "--font TITLE:13:Times"
+ This lets you customize which font to use for the various text elements
+ on the RRD graphs. "DEFAULT" sets the default value for all elements,
+ "TITLE" for the title, "AXIS" for the axis labels, "UNIT" for the ver-
+ tical unit label, "LEGEND" for the graph legend, "WATERMARK" for the
+ watermark on the edge of the graph.
-If you do not give a font string you can modify just the sice of the default
-font: "--font TITLE:13:".
+ Use Times for the title: "--font TITLE:13:Times"
-If you specify the size 0 then you can modify just the font without touching
-the size. This is especially usefull for altering the default font without
-resetting the default fontsizes: "--font DEFAULT:0:Courier".
+ If you do not give a font string you can modify just the size of the
+ default font: "--font TITLE:13:".
-RRDtool comes with a preset default font. You can set the environment variable
-"RRD_DEFAULT_FONT" if you want to change this.
+ If you specify the size 0 then you can modify just the font without
+ touching the size. This is especially useful for altering the default
+ font without resetting the default fontsizes: "--font
+ DEFAULT:0:Courier".
-RRDtool uses Pango for its font handling. This means you can to use the full
-Pango syntax when selecting your font:
+ RRDtool comes with a preset default font. You can set the environment
+ variable "RRD_DEFAULT_FONT" if you want to change this.
-The font name has the form "[_\bF_\bA_\bM_\bI_\bL_\bY_\b-_\bL_\bI_\bS_\bT] [_\bS_\bT_\bY_\bL_\bE_\b-_\bO_\bP_\bT_\bI_\bO_\bN_\bS] [_\bS_\bI_\bZ_\bE]", where _\bF_\bA_\bM_\b-
-_\bI_\bL_\bY_\b-_\bL_\bI_\bS_\bT is a comma separated list of families optionally terminated by a
-comma, _\bS_\bT_\bY_\bL_\bE_\b__\bO_\bP_\bT_\bI_\bO_\bN_\bS is a whitespace separated list of words where each WORD
-describes one of style, variant, weight, stretch, or gravity, and _\bS_\bI_\bZ_\bE is a
-decimal number (size in points) or optionally followed by the unit modifier
-"px" for absolute size. Any one of the options may be absent.
+ RRDtool uses Pango for its font handling. This means you can to use the
+ full Pango syntax when selecting your font:
-[-\b-R\bR|-\b--\b-f\bfo\bon\bnt\bt-\b-r\bre\ben\bnd\bde\ber\br-\b-m\bmo\bod\bde\be {n\bno\bor\brm\bma\bal\bl,l\bli\big\bgh\bht\bt,m\bmo\bon\bno\bo}]
+ The font name has the form "[_\bF_\bA_\bM_\bI_\bL_\bY_\b-_\bL_\bI_\bS_\bT] [_\bS_\bT_\bY_\bL_\bE_\b-_\bO_\bP_\bT_\bI_\bO_\bN_\bS] [_\bS_\bI_\bZ_\bE]",
+ where _\bF_\bA_\bM_\bI_\bL_\bY_\b-_\bL_\bI_\bS_\bT is a comma separated list of families optionally ter-
+ minated by a comma, _\bS_\bT_\bY_\bL_\bE_\b__\bO_\bP_\bT_\bI_\bO_\bN_\bS is a whitespace separated list of
+ words where each WORD describes one of style, variant, weight, stretch,
+ or gravity, and _\bS_\bI_\bZ_\bE is a decimal number (size in points) or optionally
+ followed by the unit modifier "px" for absolute size. Any one of the
+ options may be absent.
-There are 3 font render modes:
+ [-\b-R\bR|-\b--\b-f\bfo\bon\bnt\bt-\b-r\bre\ben\bnd\bde\ber\br-\b-m\bmo\bod\bde\be {n\bno\bor\brm\bma\bal\bl,l\bli\big\bgh\bht\bt,m\bmo\bon\bno\bo}]
-n\bno\bor\brm\bma\bal\bl: Full Hinting and Antialiasing (default)
+ There are 3 font render modes:
-l\bli\big\bgh\bht\bt: Slight Hinting and Antialiasing
+ n\bno\bor\brm\bma\bal\bl: Full Hinting and Antialiasing (default)
-m\bmo\bon\bno\bo: Full Hinting and NO Antialiasing
+ l\bli\big\bgh\bht\bt: Slight Hinting and Antialiasing
-[-\b-B\bB|-\b--\b-f\bfo\bon\bnt\bt-\b-s\bsm\bmo\boo\bot\bth\bhi\bin\bng\bg-\b-t\bth\bhr\bre\bes\bsh\bho\bol\bld\bd _\bs_\bi_\bz_\be]
+ m\bmo\bon\bno\bo: Full Hinting and NO Antialiasing
-(this gets ignored in 1.3 for now!)
+ [-\b-B\bB|-\b--\b-f\bfo\bon\bnt\bt-\b-s\bsm\bmo\boo\bot\bth\bhi\bin\bng\bg-\b-t\bth\bhr\bre\bes\bsh\bho\bol\bld\bd _\bs_\bi_\bz_\be]
-This specifies the largest font size which will be rendered bitmapped, that
-is, without any font smoothing. By default, no text is rendered bitmapped.
+ (this gets ignored in 1.3 for now!)
-[-\b-P\bP|-\b--\b-p\bpa\ban\bng\bgo\bo-\b-m\bma\bar\brk\bku\bup\bp]
+ This specifies the largest font size which will be rendered bitmapped,
+ that is, without any font smoothing. By default, no text is rendered
+ bitmapped.
-All text in rrdtool is rendered using Pango. With the -\b--\b-p\bpa\ban\bng\bgo\bo-\b-m\bma\bar\brk\bku\bup\bp option,
-all text will be processed by pango markup. This allows to embed some simple
-html like markup tags using
+ [-\b-P\bP|-\b--\b-p\bpa\ban\bng\bgo\bo-\b-m\bma\bar\brk\bku\bup\bp]
- <span key="value">text</span>
+ All text in rrdtool is rendered using Pango. With the -\b--\b-p\bpa\ban\bng\bgo\bo-\b-m\bma\bar\brk\bku\bup\bp
+ option, all text will be processed by pango markup. This allows to
+ embed some simple html like markup tags using
-Apart from the verbose syntax, there are also the following short tags avail-
-able.
+ <span key="value">text</span>
- b Bold
- big Makes font relatively larger, equivalent to <span size="larger">
- i Italic
- s Strikethrough
- sub Subscript
- sup Superscript
- small Makes font relatively smaller, equivalent to <span size="smaller">
- tt Monospace font
- u Underline
+ Apart from the verbose syntax, there are also the following short tags
+ available.
-More details on <http://developer.gnome.org/doc/API/2.0/pango/PangoMarkupFor-
-mat.html>.
+ b Bold
+ big Makes font relatively larger, equivalent to <span size="larger">
+ i Italic
+ s Strikethrough
+ sub Subscript
+ sup Superscript
+ small Makes font relatively smaller, equivalent to <span size="smaller">
+ tt Monospace font
+ u Underline
-[-\b-G\bG|-\b--\b-g\bgr\bra\bap\bph\bh-\b-r\bre\ben\bnd\bde\ber\br-\b-m\bmo\bod\bde\be {n\bno\bor\brm\bma\bal\bl,m\bmo\bon\bno\bo}]
+ More details on <http://developer.gnome.org/doc/API/2.0/pango/Pango-
+ MarkupFormat.html>.
-There are 2 render modes:
+ [-\b-G\bG|-\b--\b-g\bgr\bra\bap\bph\bh-\b-r\bre\ben\bnd\bde\ber\br-\b-m\bmo\bod\bde\be {n\bno\bor\brm\bma\bal\bl,m\bmo\bon\bno\bo}]
-n\bno\bor\brm\bma\bal\bl: Graphs are fully Antialiased (default)
+ There are 2 render modes:
-m\bmo\bon\bno\bo: No Antialiasing
+ n\bno\bor\brm\bma\bal\bl: Graphs are fully Antialiased (default)
-[-\b-E\bE|-\b--\b-s\bsl\blo\bop\bpe\be-\b-m\bmo\bod\bde\be]
+ m\bmo\bon\bno\bo: No Antialiasing
-RRDtool graphs are composed of stair case curves by default. This is in line
-with the way RRDtool calculates its data. Some people favor a more 'organic'
-look for their graphs even though it is not all that true.
+ [-\b-E\bE|-\b--\b-s\bsl\blo\bop\bpe\be-\b-m\bmo\bod\bde\be]
-[-\b-a\ba|-\b--\b-i\bim\bmg\bgf\bfo\bor\brm\bma\bat\bt P\bPN\bNG\bG|S\bSV\bVG\bG|E\bEP\bPS\bS|P\bPD\bDF\bF]
+ RRDtool graphs are composed of stair case curves by default. This is in
+ line with the way RRDtool calculates its data. Some people favor a more
+ 'organic' look for their graphs even though it is not all that true.
-Image format for the generated graph. For the vector formats you can choose
-among the standard Postscript fonts Courier-Bold, Courier-BoldOblique,
-Courier-Oblique, Courier, Helvetica-Bold, Helvetica-BoldOblique, Hel-
-vetica-Oblique, Helvetica, Symbol, Times-Bold, Times-BoldItalic, Times-Italic,
-Times-Roman, and ZapfDingbats.
+ [-\b-a\ba|-\b--\b-i\bim\bmg\bgf\bfo\bor\brm\bma\bat\bt P\bPN\bNG\bG|S\bSV\bVG\bG|E\bEP\bPS\bS|P\bPD\bDF\bF]
-[-\b-i\bi|-\b--\b-i\bin\bnt\bte\ber\brl\bla\bac\bce\bed\bd]
+ Image format for the generated graph. For the vector formats you can
+ choose among the standard Postscript fonts Courier-Bold,
+ Courier-BoldOblique, Courier-Oblique, Courier, Helvetica-Bold, Hel-
+ vetica-BoldOblique, Helvetica-Oblique, Helvetica, Symbol, Times-Bold,
+ Times-BoldItalic, Times-Italic, Times-Roman, and ZapfDingbats.
-(this gets ignored in 1.3 for now!)
+ [-\b-i\bi|-\b--\b-i\bin\bnt\bte\ber\brl\bla\bac\bce\bed\bd]
-If images are interlaced they become visible on browsers more quickly.
+ (this gets ignored in 1.3 for now!)
-[-\b-g\bg|-\b--\b-n\bno\bo-\b-l\ble\beg\bge\ben\bnd\bd]
+ If images are interlaced they become visible on browsers more quickly.
-Suppress generation of the legend; only render the graph.
+ [-\b-g\bg|-\b--\b-n\bno\bo-\b-l\ble\beg\bge\ben\bnd\bd]
-[-\b-F\bF|-\b--\b-f\bfo\bor\brc\bce\be-\b-r\bru\bul\ble\bes\bs-\b-l\ble\beg\bge\ben\bnd\bd]
+ Suppress generation of the legend; only render the graph.
-Force the generation of HRULE and VRULE legends even if those HRULE or VRULE
-will not be drawn because out of graph boundaries (mimics behaviour of pre
-1.0.42 versions).
+ [-\b-F\bF|-\b--\b-f\bfo\bor\brc\bce\be-\b-r\bru\bul\ble\bes\bs-\b-l\ble\beg\bge\ben\bnd\bd]
-[-\b-T\bT|-\b--\b-t\bta\bab\bbw\bwi\bid\bdt\bth\bh _\bv_\ba_\bl_\bu_\be]
+ Force the generation of HRULE and VRULE legends even if those HRULE or
+ VRULE will not be drawn because out of graph boundaries (mimics
+ behaviour of pre 1.0.42 versions).
-By default the tab-width is 40 pixels, use this option to change it.
+ [-\b-T\bT|-\b--\b-t\bta\bab\bbw\bwi\bid\bdt\bth\bh _\bv_\ba_\bl_\bu_\be]
-[-\b-b\bb|-\b--\b-b\bba\bas\bse\be _\bv_\ba_\bl_\bu_\be]
+ By default the tab-width is 40 pixels, use this option to change it.
-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.
+ [-\b-b\bb|-\b--\b-b\bba\bas\bse\be _\bv_\ba_\bl_\bu_\be]
-[-\b-W\bW|-\b--\b-w\bwa\bat\bte\ber\brm\bma\bar\brk\bk _\bs_\bt_\br_\bi_\bn_\bg]
+ 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.
-Adds the given string as a watermark, horizontally centred, at the bottom of
-the graph.
+ [-\b-W\bW|-\b--\b-w\bwa\bat\bte\ber\brm\bma\bar\brk\bk _\bs_\bt_\br_\bi_\bn_\bg]
-D\bDa\bat\bta\ba a\ban\bnd\bd v\bva\bar\bri\bia\bab\bbl\ble\bes\bs
+ Adds the given string as a watermark, horizontally centered, at the
+ bottom of the graph.
-D\bDE\bEF\bF:\b:_\bv_\bn_\ba_\bm_\be=\b=_\br_\br_\bd_\bf_\bi_\bl_\be:\b:_\bd_\bs_\b-_\bn_\ba_\bm_\be:\b:_\bC_\bF[:\b:s\bst\bte\bep\bp=\b=_\bs_\bt_\be_\bp][:\b:s\bst\bta\bar\brt\bt=\b=_\bt_\bi_\bm_\be][:\b:e\ben\bnd\bd=\b=_\bt_\bi_\bm_\be]
+ D\bDa\bat\bta\ba a\ban\bnd\bd v\bva\bar\bri\bia\bab\bbl\ble\bes\bs
-C\bCD\bDE\bEF\bF:\b:_\bv_\bn_\ba_\bm_\be=\b=_\bR_\bP_\bN _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn
+ D\bDE\bEF\bF:\b:_\bv_\bn_\ba_\bm_\be=\b=_\br_\br_\bd_\bf_\bi_\bl_\be:\b:_\bd_\bs_\b-_\bn_\ba_\bm_\be:\b:_\bC_\bF[:\b:s\bst\bte\bep\bp=\b=_\bs_\bt_\be_\bp][:\b:s\bst\bta\bar\brt\bt=\b=_\bt_\bi_\bm_\be][:\b:e\ben\bnd\bd=\b=_\bt_\bi_\bm_\be]
-V\bVD\bDE\bEF\bF:\b:_\bv_\bn_\ba_\bm_\be=\b=_\bR_\bP_\bN _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn
+ C\bCD\bDE\bEF\bF:\b:_\bv_\bn_\ba_\bm_\be=\b=_\bR_\bP_\bN _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn
-You need at least one D\bDE\bEF\bF statement to generate anything. The other statements
-are useful but optional. See rrdgraph_data and rrdgraph_rpn for the exact
-format.
+ V\bVD\bDE\bEF\bF:\b:_\bv_\bn_\ba_\bm_\be=\b=_\bR_\bP_\bN _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn
-NOTE: G\bGr\bra\bap\bph\bh a\ban\bnd\bd p\bpr\bri\bin\bnt\bt e\bel\ble\bem\bme\ben\bnt\bts\bs
+ You need at least one D\bDE\bEF\bF statement to generate anything. The other
+ statements are useful but optional. See rrdgraph_data and rrdgraph_rpn
+ for the exact format.
-You need at least one graph element to generate an image and/or at least one
-print statement to generate a report. See rrdgraph_graph for the exact for-
-mat.
+ NOTE: G\bGr\bra\bap\bph\bh a\ban\bnd\bd p\bpr\bri\bin\bnt\bt e\bel\ble\bem\bme\ben\bnt\bts\bs
-g\bgr\bra\bap\bph\bhv\bv
+ You need at least one graph element to generate an image and/or at
+ least one print statement to generate a report. See rrdgraph_graph for
+ the exact format.
-Calling rrdtool with the graphv option will return information in the rrdtool
-info format. On the command line this means that all output will be in
-key=value format. When used from the perl and ruby bindings a hash pointer
-will be returned from the call.
-
-When the filename '-' is given, the contents of the graph itself will also be
-returned through this interface (hash key 'image'). On the command line the
-output will look like this:
-
- print[0] = "0.020833"
- print[1] = "0.0440833"
- graph_left = 51
- graph_top = 22
- graph_width = 400
- graph_height = 100
- image_width = 481
- image_height = 154
- value_min = 0.0000000000e+00
- value_max = 4.0000000000e-02
- image = BLOB_SIZE:8196
- [... 8196 bytes of image data ...]
+ g\bgr\bra\bap\bph\bhv\bv
-There is more information returned than in the standard interface. Especially
-the 'graph_*' keys are new. They help applications that want to know what is
-where on the graph.
+ Calling rrdtool with the graphv option will return information in the
+ rrdtool info format. On the command line this means that all output
+ will be in key=value format. When used from the Perl and Ruby bindings
+ a hash pointer will be returned from the call.
+
+ When the filename '-' is given, the contents of the graph itself will
+ also be returned through this interface (hash key 'image'). On the com-
+ mand line the output will look like this:
+
+ print[0] = "0.020833"
+ print[1] = "0.0440833"
+ graph_left = 51
+ graph_top = 22
+ graph_width = 400
+ graph_height = 100
+ graph_start = 1232908800
+ graph_end = 1232914200
+ image_width = 481
+ image_height = 154
+ value_min = 0.0000000000e+00
+ value_max = 4.0000000000e-02
+ image = BLOB_SIZE:8196
+ [... 8196 bytes of image data ...]
+
+ There is more information returned than in the standard interface.
+ Especially the 'graph_*' keys are new. They help applications that want
+ to know what is where on the graph.
S\bSE\bEE\bE A\bAL\bLS\bSO\bO
rrdgraph gives an overview of how r\brr\brd\bdt\bto\boo\bol\bl g\bgr\bra\bap\bph\bh works. rrdgraph_data
A\bAU\bUT\bTH\bHO\bOR\bR
Program by Tobias Oetiker <tobi@oetiker.ch>
- This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+ This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl> with
+ corrections and/or additions by several people
-1.3.5 2008-12-09 RRDGRAPH(1)
+1.3.7 2009-04-07 RRDGRAPH(1)
diff --git a/doc/rrdgraph_data.1 b/doc/rrdgraph_data.1
index a8bb084629c75224eee118534319fc10bdf83e7c..1118388fc8079a3ecf78b185e1c44d40e72165ac 100644 (file)
--- a/doc/rrdgraph_data.1
+++ b/doc/rrdgraph_data.1
.\" ========================================================================
.\"
.IX Title "RRDGRAPH_DATA 1"
-.TH RRDGRAPH_DATA 1 "2008-07-28" "1.3.5" "rrdtool"
+.TH RRDGRAPH_DATA 1 "2009-02-21" "1.3.7" "rrdtool"
.SH "NAME"
rrdgraph_data \- preparing data for graphing in rrdtool graph
.SH "SYNOPSIS"
.PP
Example: \f(CW\*(C`VDEF:avg=mydata,AVERAGE\*(C'\fR
.PP
-Note that currently only agregation functions work in \s-1VDEF\s0 rpn expressions.
+Note that currently only aggregation functions work in \s-1VDEF\s0 rpn expressions.
Patches to change this are welcome.
.SH "CDEF"
.IX Header "CDEF"
.IX Header "AUTHOR"
Program by Tobias Oetiker <tobi@oetiker.ch>
.PP
-This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
+with corrections and/or additions by several people
diff --git a/doc/rrdgraph_data.html b/doc/rrdgraph_data.html
index df716916ed21061a13e8da233cb092d6b1f767fb..8551d434034c34b1544456c3571e8c8c64936673 100644 (file)
--- a/doc/rrdgraph_data.html
+++ b/doc/rrdgraph_data.html
The variable can also be used in the various graph and print
elements.</p>
<p>Example: <code>VDEF:avg=mydata,AVERAGE</code></p>
-<p>Note that currently only agregation functions work in VDEF rpn expressions.
+<p>Note that currently only aggregation functions work in VDEF rpn expressions.
Patches to change this are welcome.</p>
<p>
</p>
@@ -125,7 +125,8 @@ the script, just as if it were generated by a <strong>DEF</strong> instruction.<
<hr />
<h1><a name="author">AUTHOR</a></h1>
<p>Program by Tobias Oetiker <<a href="mailto:tobi@oetiker.ch">tobi@oetiker.ch</a>></p>
-<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>>
+with corrections and/or additions by several people</p>
</body>
diff --git a/doc/rrdgraph_data.pod b/doc/rrdgraph_data.pod
index c26868f0e509ffe00559f52922ae16a770d9daf2..95b1ec70bb45a6f379ac500fa0df2519f866a890 100644 (file)
--- a/doc/rrdgraph_data.pod
+++ b/doc/rrdgraph_data.pod
Example: C<VDEF:avg=mydata,AVERAGE>
-Note that currently only agregation functions work in VDEF rpn expressions.
+Note that currently only aggregation functions work in VDEF rpn expressions.
Patches to change this are welcome.
=head1 CDEF
Program by Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
-This manual page by Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt>
+This manual page by Alex van den Bogaerdt E<lt>alex@vandenbogaerdt.nlE<gt>
+with corrections and/or additions by several people
diff --git a/doc/rrdgraph_data.txt b/doc/rrdgraph_data.txt
index 42b2ff636a43a99398d2856dafdf200643e4c133..734c39d50f3cc9f6996db66c19a4154df1803c0d 100644 (file)
--- a/doc/rrdgraph_data.txt
+++ b/doc/rrdgraph_data.txt
Example: "VDEF:avg=mydata,AVERAGE"
- Note that currently only agregation functions work in VDEF rpn expres-
+ Note that currently only aggregation functions work in VDEF rpn expres-
sions. Patches to change this are welcome.
C\bCD\bDE\bEF\bF
A\bAU\bUT\bTH\bHO\bOR\bR
Program by Tobias Oetiker <tobi@oetiker.ch>
- This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+ This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl> with
+ corrections and/or additions by several people
-1.3.5 2008-07-28 RRDGRAPH_DATA(1)
+1.3.7 2009-02-21 RRDGRAPH_DATA(1)
index 93eb74ba8157e8c2287b7e99105019c3b2af4669..c23d5b1f810a361f6c4158f53563c663a0fe91e6 100644 (file)
--- a/doc/rrdgraph_examples.1
+++ b/doc/rrdgraph_examples.1
.\" ========================================================================
.\"
.IX Title "RRDGRAPH_EXAMPLES 1"
-.TH RRDGRAPH_EXAMPLES 1 "2008-03-25" "1.3.5" "rrdtool"
+.TH RRDGRAPH_EXAMPLES 1 "2009-02-21" "1.3.7" "rrdtool"
.SH "NAME"
rrdgraph_examples \- Examples for rrdtool graph
.SH "SYNOPSIS"
rrdgraph_data describes \fB\s-1DEF\s0\fR,\fB\s-1CDEF\s0\fR and \fB\s-1VDEF\s0\fR in detail.
rrdgraph_rpn describes the \fB\s-1RPN\s0\fR language used in the \fBxDEF\fR statements.
rrdgraph_graph page describes all the graph and print functions.
-.PP
-Make sure to read rrdgraph_examples for tips&tricks.
.SH "AUTHOR"
.IX Header "AUTHOR"
Program by Tobias Oetiker <tobi@oetiker.ch>
.PP
-This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
+with corrections and/or additions by several people
index f8d3809290877cee25f2ccf892c81a3edf2baea1..3f77a70fa4c1e13fb0ab395ffe578f124b9b617e 100644 (file)
<a href="././rrdgraph_data.html">the rrdgraph_data manpage</a> describes <strong>DEF</strong>,<strong>CDEF</strong> and <strong>VDEF</strong> in detail.
<a href="././rrdgraph_rpn.html">the rrdgraph_rpn manpage</a> describes the <strong>RPN</strong> language used in the <strong>xDEF</strong> statements.
<a href="././rrdgraph_graph.html">the rrdgraph_graph manpage</a> page describes all the graph and print functions.</p>
-<p>Make sure to read <a href="././rrdgraph_examples.html">the rrdgraph_examples manpage</a> for tips&tricks.</p>
<p>
</p>
<hr />
<h1><a name="author">AUTHOR</a></h1>
<p>Program by Tobias Oetiker <<a href="mailto:tobi@oetiker.ch">tobi@oetiker.ch</a>></p>
-<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>>
+with corrections and/or additions by several people</p>
</body>
index e0920ed7e70884ce4ba92e0164cd24081afde9d7..b544275f0108c89d07f836d3e3aa61dacc4c1a11 100644 (file)
L<rrdgraph_rpn> describes the B<RPN> language used in the B<xDEF> statements.
L<rrdgraph_graph> page describes all the graph and print functions.
-Make sure to read L<rrdgraph_examples> for tipsE<amp>tricks.
-
=head1 AUTHOR
Program by Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
-This manual page by Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt>
+This manual page by Alex van den Bogaerdt E<lt>alex@vandenbogaerdt.nlE<gt>
+with corrections and/or additions by several people
index cdb8f30e92571c8dd770d78542b5be62fc6a8e7f..1b3776a597c20c32ef9c7db3bf94345e07d80bd9 100644 (file)
language used in the x\bxD\bDE\bEF\bF statements. rrdgraph_graph page describes
all the graph and print functions.
- Make sure to read rrdgraph_examples for tips&tricks.
-
A\bAU\bUT\bTH\bHO\bOR\bR
Program by Tobias Oetiker <tobi@oetiker.ch>
- This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+ This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl> with
+ corrections and/or additions by several people
-1.3.5 2008-03-25 RRDGRAPH_EXAMPLES(1)
+1.3.7 2009-02-21 RRDGRAPH_EXAMPLES(1)
diff --git a/doc/rrdgraph_graph.1 b/doc/rrdgraph_graph.1
index b790e343edb79162d54cbe8f81b631e110b27679..c526b039931153d78af0c82b880d22b0ad45faae 100644 (file)
--- a/doc/rrdgraph_graph.1
+++ b/doc/rrdgraph_graph.1
.\" ========================================================================
.\"
.IX Title "RRDGRAPH_GRAPH 1"
-.TH RRDGRAPH_GRAPH 1 "2008-09-06" "1.3.5" "rrdtool"
+.TH RRDGRAPH_GRAPH 1 "2009-02-21" "1.3.7" "rrdtool"
.SH "NAME"
rrdgraph_graph \- rrdtool graph command reference
.SH "SYNOPSIS"
will all use the same magnitude unit except for zero values.
.PP
If you \s-1PRINT\s0 a \s-1VDEF\s0 value, you can also print the time associated with it by appending the string
-\&\fB:strftime\fR to the format. Note that rrdtool uses the strftime function of your OSs clibrary. This means that
+\&\fB:strftime\fR to the format. Note that rrdtool uses the strftime function of your OSs C library. This means that
the conversion specifier may vary. Check the manual page if you are uncertain. The following is a list of
conversion specifiers usually supported across the board.
.IP "\fB%a\fR" 4
Plot a tick mark (a vertical line) for each value of \fIvname\fR that is
non-zero and not *UNKNOWN*. The \fIfraction\fR argument specifies the length of
the tick mark as a fraction of the y\-axis; the default value is 0.1 (10% of
-the axis). Note that the color specification is not optional. The \s-1TICK\s0 marks normaly
+the axis). Note that the color specification is not optional. The \s-1TICK\s0 marks normally
start at the lower edge of the graphing area. If the fraction is negative they start
at the upper border of the graphing area.
.PP
example showing how to use centered formatting.
.PP
\&\fB\en\fR is a valid alias for \fB\el\fR since incomplete parsing in earlier
-versions of rrdtool lead to this behaviour and a number of people has been using it.
+versions of rrdtool lead to this behavior and a number of people has been using it.
.PP
Normally there are two space characters inserted between every two items
printed into the graph. The space following a string can be suppressed by
.IX Header "AUTHOR"
Program by Tobias Oetiker <tobi@oetiker.ch>
.PP
-This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
+with corrections and/or additions by several people
index a34403d257ee4582ed90e581fc9150b4aa4deb0c..147ad99aaffc9e15aa2b0d918ae5c94d89f8d603 100644 (file)
--- a/doc/rrdgraph_graph.html
+++ b/doc/rrdgraph_graph.html
</dd>
</dl>
<p>If you PRINT a VDEF value, you can also print the time associated with it by appending the string
-<strong>:strftime</strong> to the format. Note that rrdtool uses the strftime function of your OSs clibrary. This means that
+<strong>:strftime</strong> to the format. Note that rrdtool uses the strftime function of your OSs C library. This means that
the conversion specifier may vary. Check the manual page if you are uncertain. The following is a list of
conversion specifiers usually supported across the board.</p>
<dl>
<p>Plot a tick mark (a vertical line) for each value of <em>vname</em> that is
non-zero and not *UNKNOWN*. The <em>fraction</em> argument specifies the length of
the tick mark as a fraction of the y-axis; the default value is 0.1 (10% of
-the axis). Note that the color specification is not optional. The TICK marks normaly
+the axis). Note that the color specification is not optional. The TICK marks normally
start at the lower edge of the graphing area. If the fraction is negative they start
at the upper border of the graphing area.</p>
<p>
right aligned, and <strong>\c</strong> for centered. In the next section there is an
example showing how to use centered formatting.</p>
<p><strong>\n</strong> is a valid alias for <strong>\l</strong> since incomplete parsing in earlier
-versions of rrdtool lead to this behaviour and a number of people has been using it.</p>
+versions of rrdtool lead to this behavior and a number of people has been using it.</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 ignores any space
@@ -580,7 +580,8 @@ Pango uses the xml <strong>span</strong> tags for inline formatting instructions
<hr />
<h1><a name="author">AUTHOR</a></h1>
<p>Program by Tobias Oetiker <<a href="mailto:tobi@oetiker.ch">tobi@oetiker.ch</a>></p>
-<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>>
+with corrections and/or additions by several people</p>
</body>
diff --git a/doc/rrdgraph_graph.pod b/doc/rrdgraph_graph.pod
index a932fa0637165f4c98e99ba577decc412483f423..fed1d438278989f394213268ee56591b8202944d 100644 (file)
--- a/doc/rrdgraph_graph.pod
+++ b/doc/rrdgraph_graph.pod
=back
If you PRINT a VDEF value, you can also print the time associated with it by appending the string
-B<:strftime> to the format. Note that rrdtool uses the strftime function of your OSs clibrary. This means that
+B<:strftime> to the format. Note that rrdtool uses the strftime function of your OSs C library. This means that
the conversion specifier may vary. Check the manual page if you are uncertain. The following is a list of
conversion specifiers usually supported across the board.
Plot a tick mark (a vertical line) for each value of I<vname> that is
non-zero and not *UNKNOWN*. The I<fraction> argument specifies the length of
the tick mark as a fraction of the y-axis; the default value is 0.1 (10% of
-the axis). Note that the color specification is not optional. The TICK marks normaly
+the axis). Note that the color specification is not optional. The TICK marks normally
start at the lower edge of the graphing area. If the fraction is negative they start
at the upper border of the graphing area.
=cut
-# This section describes the curruently defunct
+# This section describes the currently defunct
# PieChart code.
#
# =item B<PART>B<:>I<vname>B<#>I<rrggbb>[I<aa>][B<:>I<legend>]
example showing how to use centered formatting.
B<\n> is a valid alias for B<\l> since incomplete parsing in earlier
-versions of rrdtool lead to this behaviour and a number of people has been using it.
+versions of rrdtool lead to this behavior and a number of people has been using it.
Normally there are two space characters inserted between every two items
printed into the graph. The space following a string can be suppressed by
Program by Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
-This manual page by Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt>
+This manual page by Alex van den Bogaerdt E<lt>alex@vandenbogaerdt.nlE<gt>
+with corrections and/or additions by several people
diff --git a/doc/rrdgraph_graph.txt b/doc/rrdgraph_graph.txt
index 462683bd815f0f1e1f8c50607c2942a70bcd3513..a61a1667f829f0b2c3c4de41513dc3bca425b368 100644 (file)
--- a/doc/rrdgraph_graph.txt
+++ b/doc/rrdgraph_graph.txt
If you PRINT a VDEF value, you can also print the time associated with
it by appending the string :\b:s\bst\btr\brf\bft\bti\bim\bme\be to the format. Note that rrdtool
- uses the strftime function of your OSs clibrary. This means that the
+ uses the strftime function of your OSs C library. This means that the
conversion specifier may vary. Check the manual page if you are uncer-
tain. The following is a list of conversion specifiers usually sup-
ported across the board.
zero and not *UNKNOWN*. The _\bf_\br_\ba_\bc_\bt_\bi_\bo_\bn argument specifies the length of
the tick mark as a fraction of the y-axis; the default value is 0.1
(10% of the axis). Note that the color specification is not optional.
- The TICK marks normaly start at the lower edge of the graphing area. If
- the fraction is negative they start at the upper border of the graphing
- area.
+ The TICK marks normally start at the lower edge of the graphing area.
+ If the fraction is negative they start at the upper border of the
+ graphing area.
_\bS\bS_\bH\bH_\bI\bI_\bF\bF_\bT\bT_\b:\b:_\bv_\bn_\ba_\bm_\be_\b:\b:_\bo_\bf_\bf_\bs_\be_\bt
@@ -280,7 +280,7 @@ N\bNO\bOT\bTE\bES\bS o\bon\bn l\ble\beg\bge\ben\bnd\bd a\bar\brg\bgu\bum\bme\ben\bnt\bts\bs
showing how to use centered formatting.
\\b\n\bn is a valid alias for \\b\l\bl since incomplete parsing in earlier versions
- of rrdtool lead to this behaviour and a number of people has been using
+ of rrdtool lead to this behavior and a number of people has been using
it.
Normally there are two space characters inserted between every two
A\bAU\bUT\bTH\bHO\bOR\bR
Program by Tobias Oetiker <tobi@oetiker.ch>
- This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+ This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl> with
+ corrections and/or additions by several people
-1.3.5 2008-09-06 RRDGRAPH_GRAPH(1)
+1.3.7 2009-02-21 RRDGRAPH_GRAPH(1)
diff --git a/doc/rrdgraph_rpn.1 b/doc/rrdgraph_rpn.1
index 552e3aa265ffae289ce44188c8b8305f132d5f54..4cfdcbb3ce68d967a288e290ee3956a6886d5edd 100644 (file)
--- a/doc/rrdgraph_rpn.1
+++ b/doc/rrdgraph_rpn.1
.\" ========================================================================
.\"
.IX Title "RRDGRAPH_RPN 1"
-.TH RRDGRAPH_RPN 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDGRAPH_RPN 1 "2009-02-21" "1.3.7" "rrdtool"
.SH "NAME"
rrdgraph_rpn \- About RPN Math in rrdtool graph
.SH "SYNOPSIS"
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
If you have ever used a traditional \s-1HP\s0 calculator you already know
-\&\fB\s-1RPN\s0\fR. The idea behind \fB\s-1RPN\s0\fR is that you have a stack and push
+\&\fB\s-1RPN\s0\fR (Reverse Polish Notation).
+The idea behind \fB\s-1RPN\s0\fR is that you have a stack and push
your data onto this stack. Whenever you execute an operation, it
takes as many elements from the stack as needed. Pushing is done
implicitly, so whenever you specify a number or a variable, it gets
.IX Header "AUTHOR"
Program by Tobias Oetiker <tobi@oetiker.ch>
.PP
-This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
+with corrections and/or additions by several people
diff --git a/doc/rrdgraph_rpn.html b/doc/rrdgraph_rpn.html
index ef20291cda955eb90a863b4ff63a7e75105696fb..2aeac6710341501b860a1db2f6210ee576e6093c 100644 (file)
--- a/doc/rrdgraph_rpn.html
+++ b/doc/rrdgraph_rpn.html
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>If you have ever used a traditional HP calculator you already know
-<strong>RPN</strong>. The idea behind <strong>RPN</strong> is that you have a stack and push
+<strong>RPN</strong> (Reverse Polish Notation).
+The idea behind <strong>RPN</strong> is that you have a stack and push
your data onto this stack. Whenever you execute an operation, it
takes as many elements from the stack as needed. Pushing is done
implicitly, so whenever you specify a number or a variable, it gets
<hr />
<h1><a name="author">AUTHOR</a></h1>
<p>Program by Tobias Oetiker <<a href="mailto:tobi@oetiker.ch">tobi@oetiker.ch</a>></p>
-<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<p>This manual page by Alex van den Bogaerdt <<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>>
+with corrections and/or additions by several people</p>
</body>
diff --git a/doc/rrdgraph_rpn.pod b/doc/rrdgraph_rpn.pod
index aabd7383e43979ae6396d0fc210aa3c879a55563..5826c802905f04ead7cc9ca146b053335674c5e5 100644 (file)
--- a/doc/rrdgraph_rpn.pod
+++ b/doc/rrdgraph_rpn.pod
=head1 DESCRIPTION
If you have ever used a traditional HP calculator you already know
-B<RPN>. The idea behind B<RPN> is that you have a stack and push
+B<RPN> (Reverse Polish Notation).
+The idea behind B<RPN> is that you have a stack and push
your data onto this stack. Whenever you execute an operation, it
takes as many elements from the stack as needed. Pushing is done
implicitly, so whenever you specify a number or a variable, it gets
Program by Tobias Oetiker E<lt>tobi@oetiker.chE<gt>
-This manual page by Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt>
+This manual page by Alex van den Bogaerdt E<lt>alex@vandenbogaerdt.nlE<gt>
+with corrections and/or additions by several people
diff --git a/doc/rrdgraph_rpn.txt b/doc/rrdgraph_rpn.txt
index bb8effb4c22b564b8b3cef753ed63bdcdfff9359..1ab75dbc919f44038baabb2500a20965dba1ea4e 100644 (file)
--- a/doc/rrdgraph_rpn.txt
+++ b/doc/rrdgraph_rpn.txt
_\bR_\bP_\bN _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn:=_\bv_\bn_\ba_\bm_\be|_\bo_\bp_\be_\br_\ba_\bt_\bo_\br|_\bv_\ba_\bl_\bu_\be[,_\bR_\bP_\bN _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn]
D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
- If you have ever used a traditional HP calculator you already know R\bRP\bPN\bN.
- The idea behind R\bRP\bPN\bN is that you have a stack and push your data onto
- this stack. Whenever you execute an operation, it takes as many ele-
- ments from the stack as needed. Pushing is done implicitly, so whenever
- you specify a number or a variable, it gets pushed onto the stack auto-
- matically.
+ If you have ever used a traditional HP calculator you already know R\bRP\bPN\bN
+ (Reverse Polish Notation). The idea behind R\bRP\bPN\bN is that you have a
+ stack and push your data onto this stack. Whenever you execute an oper-
+ ation, it takes as many elements from the stack as needed. Pushing is
+ done implicitly, so whenever you specify a number or a variable, it
+ gets pushed onto the stack automatically.
At the end of the calculation there should be one and only one value
left on the stack. This is the outcome of the function and this is
A\bAU\bUT\bTH\bHO\bOR\bR
Program by Tobias Oetiker <tobi@oetiker.ch>
- This manual page by Alex van den Bogaerdt <alex@ergens.op.het.net>
+ This manual page by Alex van den Bogaerdt <alex@vandenbogaerdt.nl> with
+ corrections and/or additions by several people
-1.3.5 2008-03-15 RRDGRAPH_RPN(1)
+1.3.7 2009-02-21 RRDGRAPH_RPN(1)
diff --git a/doc/rrdinfo.1 b/doc/rrdinfo.1
index f4d10a99276af629d134ef1de8f2a4cf3df29cd6..b6929b2227b69930033349237d271f18e8a640d7 100644 (file)
--- a/doc/rrdinfo.1
+++ b/doc/rrdinfo.1
.\" ========================================================================
.\"
.IX Title "RRDINFO 1"
-.TH RRDINFO 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDINFO 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdinfo \- extract header information from an RRD
.SH "SYNOPSIS"
diff --git a/doc/rrdinfo.txt b/doc/rrdinfo.txt
index ca344d104058245de585f802e6c0c79ae94ab0ee..c8ec2593fb7519aa79a3563f05c6229be8b92c84 100644 (file)
--- a/doc/rrdinfo.txt
+++ b/doc/rrdinfo.txt
-1.3.5 2008-03-15 RRDINFO(1)
+1.3.7 2008-03-15 RRDINFO(1)
diff --git a/doc/rrdlast.1 b/doc/rrdlast.1
index 751755d36d077f094a0ac6fcb1cba6c580696c08..1c9707af0914d3d22149c662b8b06d4bf59bae8a 100644 (file)
--- a/doc/rrdlast.1
+++ b/doc/rrdlast.1
.\" ========================================================================
.\"
.IX Title "RRDLAST 1"
-.TH RRDLAST 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDLAST 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdlast \- Return the date of the last data sample in an RRD
.SH "SYNOPSIS"
diff --git a/doc/rrdlast.txt b/doc/rrdlast.txt
index de46d2519556eb0d73936714f1886fd3fcf4c3cc..01b84bf8ce7d4535f1aa014c1d4a68f66b56afec 100644 (file)
--- a/doc/rrdlast.txt
+++ b/doc/rrdlast.txt
-1.3.5 2008-03-15 RRDLAST(1)
+1.3.7 2008-03-15 RRDLAST(1)
diff --git a/doc/rrdlastupdate.1 b/doc/rrdlastupdate.1
index f8f813790598abccb3d3916ac60598eee004d3b1..caad1343ce41fe3c4dbd379a7eff18d9a31a520c 100644 (file)
--- a/doc/rrdlastupdate.1
+++ b/doc/rrdlastupdate.1
.\" ========================================================================
.\"
.IX Title "RRDLASTUPDATE 1"
-.TH RRDLASTUPDATE 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDLASTUPDATE 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdlastupdate \- Return the most recent update to an RRD
.SH "SYNOPSIS"
diff --git a/doc/rrdlastupdate.txt b/doc/rrdlastupdate.txt
index 01afb4a8251ec059c210a0c86595ecc736050b38..645c12b6d072681349ad27ac7587d24dc7635dc9 100644 (file)
--- a/doc/rrdlastupdate.txt
+++ b/doc/rrdlastupdate.txt
-1.3.5 2008-03-15 RRDLASTUPDATE(1)
+1.3.7 2008-03-15 RRDLASTUPDATE(1)
diff --git a/doc/rrdresize.1 b/doc/rrdresize.1
index ed5c3684658d9cb9c75e8db0ad7c5e44112d4cf2..1b29490fd0a4fbd42018a9e796f16305d6aa0b3e 100644 (file)
--- a/doc/rrdresize.1
+++ b/doc/rrdresize.1
.\" ========================================================================
.\"
.IX Title "RRDRESIZE 1"
-.TH RRDRESIZE 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDRESIZE 1 "2009-02-21" "1.3.7" "rrdtool"
.SH "NAME"
rrdresize \- alters the size of an RRA and creates a new .rrd file
.SH "SYNOPSIS"
\&\s-1RRA\s0 while at the same timestamp this data is available in another \s-1RRA\s0.
.SH "AUTHOR"
.IX Header "AUTHOR"
-Alex van den Bogaerdt <alex@ergens.op.het.net>
+Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
diff --git a/doc/rrdresize.html b/doc/rrdresize.html
index 9303df23b9486b3c5c95fa50a76a450fa1dc089b..80c6d4d7349ee8b53a278c11646aab63bb262b29 100644 (file)
--- a/doc/rrdresize.html
+++ b/doc/rrdresize.html
</p>
<hr />
<h1><a name="author">AUTHOR</a></h1>
-<p>Alex van den Bogaerdt <<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<p>Alex van den Bogaerdt <<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>></p>
</body>
diff --git a/doc/rrdresize.pod b/doc/rrdresize.pod
index 917f3fe14e5b789f88197b83d39b3522e6699ec8..af285a5a60309109bc69abefd31309842051196f 100644 (file)
--- a/doc/rrdresize.pod
+++ b/doc/rrdresize.pod
=head1 AUTHOR
-Alex van den Bogaerdt <alex@ergens.op.het.net>
+Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
diff --git a/doc/rrdresize.txt b/doc/rrdresize.txt
index a72df934da046573eafd2afa854db4fcdbbb0ec9..0374c16f6d65764ae2c1b992272719d05bac2aa9 100644 (file)
--- a/doc/rrdresize.txt
+++ b/doc/rrdresize.txt
RRA.
A\bAU\bUT\bTH\bHO\bOR\bR
- Alex van den Bogaerdt <alex@ergens.op.het.net>
+ Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
-1.3.5 2008-03-15 RRDRESIZE(1)
+1.3.7 2009-02-21 RRDRESIZE(1)
diff --git a/doc/rrdrestore.1 b/doc/rrdrestore.1
index 726f81f6a5bdb81cb66fe764b71f8860b99bbd15..33818d3ba63407b78f40c9b017032be578c60c77 100644 (file)
--- a/doc/rrdrestore.1
+++ b/doc/rrdrestore.1
.\" ========================================================================
.\"
.IX Title "RRDRESTORE 1"
-.TH RRDRESTORE 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDRESTORE 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdrestore \- Restore the contents of an RRD from its XML dump format
.SH "SYNOPSIS"
diff --git a/doc/rrdrestore.txt b/doc/rrdrestore.txt
index 034c2323c6f91a78cb62fb517cb1a854ebc83a3a..acf028c8276024920140cc8fd4e3cc138a7ce8d6 100644 (file)
--- a/doc/rrdrestore.txt
+++ b/doc/rrdrestore.txt
-1.3.5 2008-03-15 RRDRESTORE(1)
+1.3.7 2008-03-15 RRDRESTORE(1)
diff --git a/doc/rrdthreads.1 b/doc/rrdthreads.1
index 881ac5b150e78023658f6b62e4227db910a79cee..297c993bcdfab39ba75b16f7fe719c23fe849304 100644 (file)
--- a/doc/rrdthreads.1
+++ b/doc/rrdthreads.1
.\" ========================================================================
.\"
.IX Title "RRDTHREADS 1"
-.TH RRDTHREADS 1 "2008-06-08" "1.3.5" "rrdtool"
+.TH RRDTHREADS 1 "2008-06-08" "1.3.7" "rrdtool"
.SH "NAME"
rrdthreads \- Provisions for linking the RRD library to use in multi\-threaded programs
.SH "SYNOPSIS"
diff --git a/doc/rrdthreads.txt b/doc/rrdthreads.txt
index dd2f29773c73cab93c6b40da9ddf7445014da3ce..2c1d9a4193c7923ef350b17eb8cd91811a1a71b6 100644 (file)
--- a/doc/rrdthreads.txt
+++ b/doc/rrdthreads.txt
-1.3.5 2008-06-08 RRDTHREADS(1)
+1.3.7 2008-06-08 RRDTHREADS(1)
diff --git a/doc/rrdtool.1 b/doc/rrdtool.1
index 5105ae7225a7c993b684e921cac90e2e7b140777..634b4a1eec9d60d466a151231c673d71440a424c 100644 (file)
--- a/doc/rrdtool.1
+++ b/doc/rrdtool.1
.\" ========================================================================
.\"
.IX Title "RRDTOOL 1"
-.TH RRDTOOL 1 "2008-09-06" "1.3.5" "rrdtool"
+.TH RRDTOOL 1 "2008-12-22" "1.3.7" "rrdtool"
.SH "NAME"
rrdtool \- Round Robin Database Tool
.SH "SYNOPSIS"
saves a considerable amount of startup time when you plan to make
\&\fBRRDtool\fR do a lot of things quickly. Check the section on Remote_Control
further down. There is also a number of language bindings
-for RRDtool which allow you to use it directly from perl, python, tcl,
-php, etc.
+for RRDtool which allow you to use it directly from Perl, python, Tcl,
+\&\s-1PHP\s0, etc.
.IP "\fBcreate\fR" 8
.IX Item "create"
Set up a new Round Robin Database (\s-1RRD\s0). Check rrdcreate.
always be able to fetch data at exactly the time you want
to. Therefore \fBRRDtool\fR lets you update the logfile at any time you
want. It will automatically interpolate the value of the data-source
-(\fB\s-1DS\s0\fR) at the latest official time-slot (intervall) and write this
+(\fB\s-1DS\s0\fR) at the latest official time-slot (interval) and write this
interpolated value to the log. The original value you have supplied is
stored as well and is also taken into account when interpolating the
next log entry.
\&\fBs:\fR\fIsystemtime\fR. Both values are the running totals of seconds since
RRDtool was started. If an error occurs, a line of the form '\f(CW\*(C`ERROR:\*(C'\fR
\&\fIDescription of error\fR' will be printed instead. \fBRRDtool\fR will not abort,
-unless something realy serious happens. If
+unless something really serious happens. If
a \fBworkdir\fR is specified and the \s-1UID\s0 is 0, RRDtool will do a chroot to that
workdir. If the \s-1UID\s0 is not 0, RRDtool only changes the current directory to
\&\fBworkdir\fR.
Don't forget to create the database directory /var/rrd and
reinitialize your inetd.
.PP
-If all was setup correctly, you can access the server with perl
+If all was setup correctly, you can access the server with Perl
sockets, tools like netcat, or in a quick interactive test by using
\&'telnet localhost rrdsrv'.
.PP
diff --git a/doc/rrdtool.html b/doc/rrdtool.html
index 56689e7d22e619ab2b57b23d49c6c846a32721d8..6ce597d6957ae0d0aced1937ff7f41c67c849585 100644 (file)
--- a/doc/rrdtool.html
+++ b/doc/rrdtool.html
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 <em>Remote_Control</em>
further down. There is also a number of language bindings
-for RRDtool which allow you to use it directly from perl, python, tcl,
-php, etc.</p>
+for RRDtool which allow you to use it directly from Perl, python, Tcl,
+PHP, etc.</p>
<dl>
<dt><strong><a name="item_create"><strong>create</strong></a></strong></dt>
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
want. It will automatically interpolate the value of the data-source
-(<strong>DS</strong>) at the latest official time-slot (intervall) and write this
+(<strong>DS</strong>) at the latest official time-slot (interval) and write this
interpolated value to the log. The original value you have supplied is
stored as well and is also taken into account when interpolating the
next log entry.</p>
<strong>s:</strong><em>systemtime</em>. Both values are the 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 instead. <strong>RRDtool</strong> will not abort,
-unless something realy serious happens. If
+unless something really serious happens. If
a <strong>workdir</strong> is specified and the UID is 0, RRDtool will do a chroot to that
workdir. If the UID is not 0, RRDtool only changes the current directory to
<strong>workdir</strong>.</p>
rrdsrv stream tcp nowait root /opt/rrd/bin/rrdtool rrdtool - /var/rrd</pre>
<p>Don't forget to create the database directory /var/rrd and
reinitialize your inetd.</p>
-<p>If all was setup correctly, you can access the server with perl
+<p>If all was setup correctly, you can access the server with Perl
sockets, tools like netcat, or in a quick interactive test by using
'telnet localhost rrdsrv'.</p>
<p><strong>NOTE:</strong> that there is no authentication with this feature! Do not setup
diff --git a/doc/rrdtool.pod b/doc/rrdtool.pod
index 154afe7a356501a7fb10d41aa2e0b75a03dbc626..e3523fe9eee733697f20155cb96f8944fadc52cf 100644 (file)
--- a/doc/rrdtool.pod
+++ b/doc/rrdtool.pod
saves a considerable amount of startup time when you plan to make
B<RRDtool> do a lot of things quickly. Check the section on L<Remote_Control>
further down. There is also a number of language bindings
-for RRDtool which allow you to use it directly from perl, python, tcl,
-php, etc.
+for RRDtool which allow you to use it directly from Perl, python, Tcl,
+PHP, etc.
=over 8
always be able to fetch data at exactly the time you want
to. Therefore B<RRDtool> lets you update the logfile at any time you
want. It will automatically interpolate the value of the data-source
-(B<DS>) at the latest official time-slot (intervall) and write this
+(B<DS>) at the latest official time-slot (interval) and write this
interpolated value to the log. The original value you have supplied is
stored as well and is also taken into account when interpolating the
next log entry.
B<s:>I<systemtime>. Both values are the running totals of seconds since
RRDtool was started. If an error occurs, a line of the form 'C<ERROR:>
I<Description of error>' will be printed instead. B<RRDtool> will not abort,
-unless something realy serious happens. If
+unless something really serious happens. If
a B<workdir> is specified and the UID is 0, RRDtool will do a chroot to that
workdir. If the UID is not 0, RRDtool only changes the current directory to
B<workdir>.
Don't forget to create the database directory /var/rrd and
reinitialize your inetd.
-If all was setup correctly, you can access the server with perl
+If all was setup correctly, you can access the server with Perl
sockets, tools like netcat, or in a quick interactive test by using
'telnet localhost rrdsrv'.
diff --git a/doc/rrdtool.txt b/doc/rrdtool.txt
index 92d4099fc5cc212ac16829c286bbc752b0df0f6c..19528bdf3b694e3975cb1f5178e0dd52e7c3e0e3 100644 (file)
--- a/doc/rrdtool.txt
+++ b/doc/rrdtool.txt
amount of startup time when you plan to make R\bRR\bRD\bDt\bto\boo\bol\bl do a lot of things
quickly. Check the section on Remote_Control further down. There is
also a number of language bindings for RRDtool which allow you to use
- it directly from perl, python, tcl, php, etc.
+ it directly from Perl, python, Tcl, PHP, etc.
c\bcr\bre\bea\bat\bte\be Set up a new Round Robin Database (RRD). Check rrdcreate.
you want to. Therefore R\bRR\bRD\bDt\bto\boo\bol\bl lets you update the logfile at
any time you want. It will automatically interpolate the value
of the data-source (D\bDS\bS) at the latest official time-slot
- (intervall) and write this interpolated value to the log. The
+ (interval) and write this interpolated value to the log. The
original value you have supplied is stored as well and is also
taken into account when interpolating the next log entry.
Both values are the running totals of seconds since RRDtool was
started. If an error occurs, a line of the form '"ERROR:" _\bD_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn
_\bo_\bf _\be_\br_\br_\bo_\br' will be printed instead. R\bRR\bRD\bDt\bto\boo\bol\bl will not abort, unless some-
- thing realy serious happens. If a w\bwo\bor\brk\bkd\bdi\bir\br is specified and the UID is
+ thing really serious happens. If a w\bwo\bor\brk\bkd\bdi\bir\br is specified and the UID is
0, RRDtool will do a chroot to that workdir. If the UID is not 0, RRD-
tool only changes the current directory to w\bwo\bor\brk\bkd\bdi\bir\br.
Don't forget to create the database directory /var/rrd and reinitialize
your inetd.
- If all was setup correctly, you can access the server with perl sock-
+ If all was setup correctly, you can access the server with Perl sock-
ets, tools like netcat, or in a quick interactive test by using 'telnet
localhost rrdsrv'.
-1.3.5 2008-09-06 RRDTOOL(1)
+1.3.7 2008-12-22 RRDTOOL(1)
diff --git a/doc/rrdtune.1 b/doc/rrdtune.1
index c4553c95a9e5f03dbb0d93d93b3cceddd8eb794f..ef1b0f04da016821fb2a166d14631af952fb40f1 100644 (file)
--- a/doc/rrdtune.1
+++ b/doc/rrdtune.1
.\" ========================================================================
.\"
.IX Title "RRDTUNE 1"
-.TH RRDTUNE 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDTUNE 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdtune \- Modify some basic properties of a Round Robin Database
.SH "SYNOPSIS"
diff --git a/doc/rrdtune.txt b/doc/rrdtune.txt
index 1ebe9d3ae9af5ee1c86c4a92ae4d32d7059b4dd9..b300baaa4bde8db1b0a6121969ec0a9cff651617 100644 (file)
--- a/doc/rrdtune.txt
+++ b/doc/rrdtune.txt
-1.3.5 2008-03-15 RRDTUNE(1)
+1.3.7 2008-03-15 RRDTUNE(1)
diff --git a/doc/rrdtutorial.1 b/doc/rrdtutorial.1
index 7388d18693eb77c1d7d3a0d7aa8fd575219137db..00998d8e6739c4d091cca9fbba716c4c79a012d4 100644 (file)
--- a/doc/rrdtutorial.1
+++ b/doc/rrdtutorial.1
.\" ========================================================================
.\"
.IX Title "RRDTUTORIAL 1"
-.TH RRDTUTORIAL 1 "2008-03-15" "1.3.5" "rrdtool"
-.SH "NAME"
+.TH RRDTUTORIAL 1 "2009-02-21" "1.3.7" "rrdtool"
rrdtutorial \- Alex van den Bogaerdt's RRDtool tutorial
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
RRDtool is written by Tobias Oetiker <tobi@oetiker.ch> with
contributions from many people all around the world. This document is
-written by Alex van den Bogaerdt <alex@ergens.op.het.net> to help you
+written by Alex van den Bogaerdt <alex@vandenbogaerdt.nl> to help you
understand what RRDtool is and what it can do for you.
.PP
The documentation provided with RRDtool can be too technical for some
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.
+.PP
+Sometimes things change. This example used to provide numbers like
+\&\*(L"0.04\*(R" in stead of \*(L"4.00000e\-02\*(R". Those are really the same numbers,
+just written down differently. Don't be alarmed if a future version
+of rrdtool displays a slightly different form of output. The examples
+in this document are correct for version 1.2.0 of RRDtool.
+.PP
+Also, sometimes bugs do occur. They may also influence the outcome of
+the examples. Example speed4.png was suffering from this (the handling
+of unknown data in an if-statement was wrong). Normal data will be
+just fine (a bug in rrdtool wouldn't last long) but special cases like
+NaN, \s-1INF\s0 and so on may last a bit longer. Try another version if you
+can, or just live with it.
+.PP
+I fixed the speed4.png example (and added a note). There may be other
+examples which suffer from the same or a similar bug. Try to fix it
+yourself, which is a great excercise. But please do not submit your
+result as a fix to the source of this document. Discuss it on the
+user's list, or write to me.
.Sh "What is RRDtool?"
.IX Subsection "What is RRDtool?"
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
-arrow from the center of the circle to one of the dots \*(-- this is the pointer.
+on the edge. These dots are the places where data can be stored. Draw an
+arrow from the center of the circle to one of the dots; this is the pointer.
When the current data is read or written, the pointer moves to the next
element. As we are on a circle there is neither a beginning nor an end, you can
go on and on and on. After a while, all the available places will be used and
data from them.
.Sh "What data can be put into an \s-1RRD\s0?"
.IX Subsection "What data can be put into an RRD?"
-You name it, it will probably fit as long as it is some sort of time-series
-data. This means you have to 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 must be numerical but don't have to be
-integers, as is the case with \s-1MRTG\s0 (the next section will give more details
-on this more specialized application).
+You name it, it will probably fit as long as it is some sort of
+time-series data. This means you have to 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 must be
+numerical but don't have to be integers, as is the case with \s-1MRTG\s0 (the
+next section will give more details on this more specialized application).
.PP
Many examples below talk about \s-1SNMP\s0 which is an acronym for Simple Network
-Management Protocol. \*(L"Simple\*(R" refers to the protocol \*(-- it does not
+Management Protocol. \*(L"Simple\*(R" 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
get used to that right away. Assume a byte is eight bits and start to
think in bits not bytes. The counter, however, still counts bytes!
In the \s-1SNMP\s0 world most of the counters are 32 bits. That means they are
-counting from 0 to 4'294'967'295. We will use these values in the examples.
+counting from 0 to 4294967295. We will use these values in the examples.
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
I will use the following abbreviations:
.PP
.Vb 6
-\& M: meter
-\& KM: kilometer (= 1\(aq000 meters).
-\& H: hour
-\& S: second
-\& KM/H: kilometers per hour
-\& M/S: meters per second
+\& m: meter
+\& km: kilometer (= 1000 meters).
+\& h: hour
+\& s: second
+\& km/h: kilometers per hour
+\& m/s: meters per second
.Ve
.PP
You are driving a car. At 12:05 you read the counter in the dashboard
-and it tells you that the car has moved 12'345 \s-1KM\s0 until that moment.
-At 12:10 you look again, it reads 12'357 \s-1KM\s0. This means you have
-traveled 12 \s-1KM\s0 in five minutes. A scientist would translate that
+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 toward the
problem of (bytes per five minutes) versus (bits per second).
.PP
-We traveled 12 kilometers which is 12'000 meters. We did that in five
-minutes or 300 seconds. Our speed is 12'000M / 300S or 40 M/S.
+We traveled 12 kilometers which is 12000 meters. We did that in five
+minutes or 300 seconds. Our speed is 12000m / 300s or 40 m/s.
.PP
-We could also calculate the speed in \s-1KM/H:\s0 12 times 5 minutes
-is an hour, so we have to multiply 12 \s-1KM\s0 by 12 to get 144 \s-1KM/H\s0.
-For our native English speaking friends: that's 90 \s-1MPH\s0 so don't
+We could also calculate the speed in km/h: 12 times 5 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 :)
.PP
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.
.PP
-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 1'000.
+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.
.PP
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
.IX Subsection "What has been created?"
We created the round robin database called test (test.rrd) which starts at
noon the day I started writing this document, 7th of March, 1999 (this date
-translates to 920'804'400 seconds as explained below). Our database holds
+translates to 920804400 seconds as explained below). Our database holds
one data source (\s-1DS\s0) named \*(L"speed\*(R" that represents a counter. This counter
is read every five minutes (this is the default therefore you don't have to
put \f(CW\*(C`\-\-step=300\*(C'\fR). In the same database two round robin archives (RRAs)
have read the following numbers:
.PP
.Vb 15
-\& 12:05 12345 KM
-\& 12:10 12357 KM
-\& 12:15 12363 KM
-\& 12:20 12363 KM
-\& 12:25 12363 KM
-\& 12:30 12373 KM
-\& 12:35 12383 KM
-\& 12:40 12393 KM
-\& 12:45 12399 KM
-\& 12:50 12405 KM
-\& 12:55 12411 KM
-\& 13:00 12415 KM
-\& 13:05 12420 KM
-\& 13:10 12422 KM
-\& 13:15 12423 KM
+\& 12:05 12345 km
+\& 12:10 12357 km
+\& 12:15 12363 km
+\& 12:20 12363 km
+\& 12:25 12363 km
+\& 12:30 12373 km
+\& 12:35 12383 km
+\& 12:40 12393 km
+\& 12:45 12399 km
+\& 12:50 12405 km
+\& 12:55 12411 km
+\& 13:00 12415 km
+\& 13:05 12420 km
+\& 13:10 12422 km
+\& 13:15 12423 km
.Ve
.PP
We fill the database as follows:
writes \*(L"U\*(R" or \*(L"\s-1UNKN\s0\*(R" 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. Sometimes things change. This example used
-to provide numbers like \*(L"0.04\*(R" in stead of \*(L"4.00000e\-02\*(R". Those are
-really the same numbers, just written down differently. Don't be
-alarmed if a future version of rrdtool displays a slightly different
-form of output. The examples in this document are correct for version
-1.2.0 of RRDtool.
+database and try again.
.PP
The meaning of the above output will become clear below.
.Sh "Time to create some graphics"
\& gray #555555 (one third of all components)
.Ve
.PP
-Additionally you can add an alpha channel (transparency). The default
-will be \*(L"\s-1FF\s0\*(R" which means non\-transparent.
+Additionally you can (with a recent RRDtool) add an alpha channel
+(transparency). The default will be \*(L"\s-1FF\s0\*(R" which means non\-transparent.
.PP
The \s-1PNG\s0 you just created can be displayed using your favorite image
viewer. Web browsers will display the \s-1PNG\s0 via the \s-1URL\s0
.IX Subsection "Graphics with some math"
When looking at the image, you notice that the horizontal axis is labeled
12:10, 12:20, 12:30, 12:40 and 12:50. Sometimes a label doesn't fit (12:00
-and 13:00 would be candidates) so they are skipped.
+and 13:00 would be likely candidates) so they are skipped.
.PP
The vertical axis displays the range we entered. We provided
kilometers and when divided by 300 seconds, we get very small
-numbers. To be exact, the first value was 12 (12'357\-12'345) and divided
+numbers. To be exact, the first value was 12 (12357\-12345) and divided
by 300 this makes 0.04, which is displayed by RRDtool as \*(L"40 m\*(R"
-meaning \*(L"40/1'000\*(R". The \*(L"m\*(R" (milli) has nothing to do with meters,
+meaning \*(L"40/1000\*(R". The \*(L"m\*(R" (milli) has nothing to do with meters (also m),
kilometers or millimeters! RRDtool doesn't know about the physical
units of our data, it just works with dimensionless numbers.
.PP
If we had measured our distances in meters, this would have been
-(12'357'000\-12'345'000)/300 = 12'000/300 = 40.
+(12357000\-12345000)/300 = 12000/300 = 40.
.PP
As most people have a better feel for numbers in this range, we'll
correct that. We could recreate our database and store the correct
\& LINE2:realspeed#FF0000
.Ve
.PP
-Note: Make sure not to forget the backslash \e in front of the
-multiplication operator * above. The backslash is needed to \*(L"escape\*(R"
-the * as some operating systems might interpret and expand * instead
-of passing it to the rrdtool command.
+Note: I need to escape the multiplication operator * with a backslash.
+If I don't, the operating system may interpret it and use it for file
+name expansion. You could also place the line within quotation marks
+like so:
+.PP
+.Vb 1
+\& "CDEF:realspeed=myspeed,1000,*" \e
+.Ve
+.PP
+It boils down to: it is RRDtool which should see *, not your shell.
+And it is your shell interpreting \e, not RRDtool. You may need to
+adjust examples accordingly if you happen to use an operating
+system or shell which behaves differently.
.PP
After viewing this \s-1PNG\s0, you notice the \*(L"m\*(R" (milli) has
disappeared. This it what the correct result would be. Also, a label
@@ -538,22 +560,22 @@ those\*(R". Don't bother with \s-1RPN\s0 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 \s-1RPN\s0. But first finish this tutorial.
.PP
-Hang on! If we can multiply values with 1'000, it should also be possible
+Hang on! If we can multiply values with 1000, it should also be possible
to display kilometers per hour from the same data!
.PP
To change a value that is measured in meters per second:
.PP
.Vb 3
-\& Calculate meters per hour: value * 3\(aq600
-\& Calculate kilometers per hour: value / 1\(aq000
-\& Together this makes: value * (3\(aq600/1\(aq000) or value * 3.6
+\& Calculate meters per hour: value * 3600
+\& Calculate kilometers per hour: value / 1000
+\& Together this makes: value * (3600/1000) or value * 3.6
.Ve
.PP
In our example database we made a mistake and we need to compensate for
-this by multiplying with 1'000. Applying that correction:
+this by multiplying with 1000. Applying that correction:
.PP
.Vb 1
-\& value * 3.6 * 1\(aq000 == value * 3\(aq600
+\& value * 3.6 * 1000 == value * 3600
.Ve
.PP
Now let's create this \s-1PNG\s0, and add some more magic ...
Note: here we use another means to escape the * operator by enclosing
the whole string in double quotes.
.PP
-This graph looks much better. Speed is shown in \s-1KM/H\s0 and there is even
+This graph looks much better. Speed is shown in km/h and there is even
an extra line with the maximum allowed speed (on the road I travel
on). I also changed the colors used to display speed and changed it
from a line into an area.
can manipulate data. I will not explain how it works, but look at the
following \s-1PNG:\s0
.PP
-.Vb 12
+.Vb 13
\& rrdtool graph speed4.png \e
\& \-\-start 920804400 \-\-end 920808000 \e
\& \-\-vertical\-label km/h \e
\& DEF:myspeed=test.rrd:speed:AVERAGE \e
-\& "CDEF:kmh=myspeed,3600,*" \e
+\& CDEF:nonans=myspeed,UN,0,myspeed,IF \e
+\& CDEF:kmh=nonans,3600,* \e
\& CDEF:fast=kmh,100,GT,100,0,IF \e
\& CDEF:over=kmh,100,GT,kmh,100,\-,0,IF \e
\& CDEF:good=kmh,100,GT,0,kmh,IF \e
\& STACK:over#FF0000:"Over speed"
.Ve
.PP
+Remember the note in the beginning? I had to remove unknown data from
+this example. The 'nonans' \s-1CDEF\s0 is new, and the 6th line (which used to
+be the 5th line) used to read 'CDEF:kmh=myspeed,3600,*'
+.PP
Let's create a quick and dirty \s-1HTML\s0 page to view the three PNGs:
.PP
.Vb 7
the stuff you learned so far. Later on we will also be able to monitor
other types of values like temperature.
.PP
-Most (?) people interested in RRDtool will use the counter that keeps track
+Many people interested in RRDtool will use the counter that keeps track
of octets (bytes) transfered by a network device. So let's do just
that next. We will start with a description of how to collect data.
.PP
.Ve
.PP
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=86'400, we
-start at now minus 86'400 seconds. We define (with DEFs) inoctets and
+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 \*(L"in\*(R" traffic and a line for the \*(L"out\*(R" traffic.
.PP
into this a bit more.
.PP
Recall all the stuff about the speed of the car. Suppose we drove at 144
-\&\s-1KM/H\s0 during 5 minutes and then were stopped by the police for 25 minutes.
+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 and view the
image taken from the database. If we look at the second \s-1RRA\s0 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 \s-1KM/H\s0, with a result of 24 \s-1KM/H\s0.
+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 :)
.PP
Obviously, in this case we shouldn't look at the averages. In some
-cases they are handy. If you want to know how many \s-1KM\s0 you had traveled,
+cases they are handy. If you want to know how many km you had traveled,
the averaged picture would be the right one to look at. On the other hand, for
the speed that we traveled at, the maximum numbers seen is much more
interesting. Later we will see more types.
archive that keeps averages will show low numbers, the archive that
shows maxima will have higher numbers.
.PP
-For my car this would translate in averages per day of 96/24=4 \s-1KM/H\s0
+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 working days, and
-maxima of 120 \s-1KM/H\s0 (my top speed that I reach every day).
+maxima of 120 km/h (my top speed that I reach every day).
.PP
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
as they are in five minutes, but not if you average.
.PP
On some days, I go for a long ride. If I go across Europe and travel
-for 12 hours, the first graph will rise to about 60 \s-1KM/H\s0. The second
-one will show 180 \s-1KM/H\s0. This means that I traveled a distance of 60
-\&\s-1KM/H\s0 times 24 H = 1440 \s-1KM\s0. I did this with a higher speed and a
-maximum around 180 \s-1KM/H\s0. However, it probably doesn't mean that I
-traveled for 8 hours at a constant speed of 180 \s-1KM/H\s0!
+for 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 a
+maximum around 180 km/h. However, it probably doesn't mean that I
+traveled for 8 hours at a constant speed of 180 km/h!
.PP
This is a real example: go with the flow through Germany (fast!) and stop
a few times for gas and coffee. Drive slowly through Austria and the
.PP
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 ana appropriate way. This is true for all data.
+interpret the data in an appropriate way. This is true for all data.
.PP
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
.IX Subsection "Let's review what you now should know"
You know how to create a database and can put data in it. You can get
the numbers out again by creating an image, do math on the data from
-the database and view the resulte instead of the raw data. You know
-about the difference between averages and maxima, and when to use
+the database and view the result instead of the raw data. You know
+about the difference between averages and maximum, and when to use
which (or at least you should have an idea).
.PP
RRDtool can do more than what we have learned up to now. Before you
@@ -1026,7 +1053,7 @@ The two additional types are \s-1DERIVE\s0 and \s-1ABSOLUTE\s0. Absolute can be
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.
-Example: our first example (12'345, 12'357, 12'363, 12'363) would read:
+Example: our first example (12345, 12357, 12363, 12363) would read:
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
@@ -1070,7 +1097,7 @@ Line B is of type \s-1GAUGE\s0. These are \*(L"real\*(R" values so they should m
what we put in: a sort of a wave.
.IP "\(bu" 2
Line C is of type \s-1DERIVE\s0. It should be a counter that can decrease. It does
-so between 2'400 and 0, with 1'800 in\-between.
+so between 2400 and 0, with 1800 in\-between.
.IP "\(bu" 2
Line D is of type \s-1ABSOLUTE\s0. This is like counter but it works on
values without calculating the difference. The numbers are the same
.IX Subsection "Counter Wraps"
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 the counter shows 999'987. We travel 20 \s-1KM\s0 and
-the counter should go to 1'000'007. Unfortunately, there are only six digits
-on our counter so it really shows 000'007. If we would plot that on a type
-\&\s-1DERIVE\s0, it would mean that the counter was set back 999'980 \s-1KM\s0. It wasn't,
+In our car we notice that the counter shows 999987. We travel 20 km and
+the counter should go to 1000007. Unfortunately, there are only six digits
+on our counter so it really shows 000007. If we would plot that on a type
+\&\s-1DERIVE\s0, it would mean that the counter was set back 999980 km. It wasn't,
and there has to be some protection for this. This protection is only
available for type \s-1COUNTER\s0 which should be used for this kind of counter
anyways. How does it work? Type counter should never decrease and
maximum value of the counter + 1. For our car this would be:
.PP
.Vb 1
-\& Delta = 7 \- 999\(aq987 = \-999\(aq980 (instead of 1\(aq000\(aq007\-999\(aq987=20)
+\& Delta = 7 \- 999987 = \-999980 (instead of 1000007\-999987=20)
.Ve
.PP
.Vb 1
-\& Real delta = \-999\(aq980 + 999\(aq999 + 1 = 20
+\& Real delta = \-999980 + 999999 + 1 = 20
.Ve
.PP
At the time of writing this document, RRDtool knows of counters that
following different values:
.PP
.Vb 2
-\& \- 32 bits: 0 .. 4\(aq294\(aq967\(aq295
-\& \- 64 bits: 0 .. 18\(aq446\(aq744\(aq073\(aq709\(aq551\(aq615
+\& \- 32 bits: 0 .. 4294967295
+\& \- 64 bits: 0 .. 18446744073709551615
.Ve
.PP
If these numbers look strange to you, you can view them in
Correction numbers:
.PP
.Vb 3
-\& \- 32 bits: (4\(aq294\(aq967\(aq295 + 1) = 4\(aq294\(aq967\(aq296
-\& \- 64 bits: (18\(aq446\(aq744\(aq073\(aq709\(aq551\(aq615 + 1)
-\& \- correction1 = 18\(aq446\(aq744\(aq069\(aq414\(aq584\(aq320
+\& \- 32 bits: (4294967295 + 1) = 4294967296
+\& \- 64 bits: (18446744073709551615 + 1)
+\& \- correction1 = 18446744069414584320
.Ve
.PP
.Vb 6
-\& Before: 4\(aq294\(aq967\(aq200
+\& Before: 4294967200
\& Increase: 100
-\& Should become: 4\(aq294\(aq967\(aq300
+\& Should become: 4294967300
\& But really is: 4
-\& Delta: \-4\(aq294\(aq967\(aq196
-\& Correction1: \-4\(aq294\(aq967\(aq196 + 4\(aq294\(aq967\(aq296 = 100
+\& Delta: \-4294967196
+\& Correction1: \-4294967196 + 4294967296 = 100
.Ve
.PP
.Vb 9
-\& Before: 18\(aq446\(aq744\(aq073\(aq709\(aq551\(aq000
+\& Before: 18446744073709551000
\& Increase: 800
-\& Should become: 18\(aq446\(aq744\(aq073\(aq709\(aq551\(aq800
+\& Should become: 18446744073709551800
\& But really is: 184
-\& Delta: \-18\(aq446\(aq744\(aq073\(aq709\(aq550\(aq816
-\& Correction1: \-18\(aq446\(aq744\(aq073\(aq709\(aq550\(aq816
-\& + 4\(aq294\(aq967\(aq296 = \-18\(aq446\(aq744\(aq069\(aq414\(aq583\(aq520
-\& Correction2: \-18\(aq446\(aq744\(aq069\(aq414\(aq583\(aq520
-\& + 18\(aq446\(aq744\(aq069\(aq414\(aq584\(aq320 = 800
+\& Delta: \-18446744073709550816
+\& Correction1: \-18446744073709550816
+\& + 4294967296 = \-18446744069414583520
+\& Correction2: \-18446744069414583520
+\& + 18446744069414584320 = 800
.Ve
.PP
.Vb 7
-\& Before: 18\(aq446\(aq744\(aq073\(aq709\(aq551\(aq615 ( maximum value )
-\& Increase: 18\(aq446\(aq744\(aq069\(aq414\(aq584\(aq320 ( absurd increase, minimum for
-\& Should become: 36\(aq893\(aq488\(aq143\(aq124\(aq135\(aq935 this example to work )
-\& But really is: 18\(aq446\(aq744\(aq069\(aq414\(aq584\(aq319
-\& Delta: \-4\(aq294\(aq967\(aq296
-\& Correction1: \-4\(aq294\(aq967\(aq296 + 4\(aq294\(aq967\(aq296 = 0
+\& 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)
.Ve
.PP
.Vb 7
-\& Before: 18\(aq446\(aq744\(aq073\(aq709\(aq551\(aq615 ( maximum value )
-\& Increase: 18\(aq446\(aq744\(aq069\(aq414\(aq584\(aq319 ( one less increase )
-\& Should become: 36\(aq893\(aq488\(aq143\(aq124\(aq135\(aq934
-\& But really is: 18\(aq446\(aq744\(aq069\(aq414\(aq584\(aq318
-\& Delta: \-4\(aq294\(aq967\(aq297
-\& Correction1: \-4\(aq294\(aq967\(aq297 + 4\(aq294\(aq967\(aq296 = \-1
-\& Correction2: \-1 + 18\(aq446\(aq744\(aq069\(aq414\(aq584\(aq320 = 18\(aq446\(aq744\(aq069\(aq414\(aq584\(aq319
+\& 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
.Ve
.PP
As you can see from the last two examples, you need strange numbers
\& time+900: 900 delta=300 time+900: 900 delta=297
.Ve
.PP
-Let's create two identical databases. I've chosen the time range 920'805'000
-to 920'805'900 as this goes very well with the example numbers.
+Let's create two identical databases. I've chosen the time range 920805000
+to 920805900 as this goes very well with the example numbers.
.PP
.Vb 4
\& rrdtool create seconds1.rrd \e
you to be able to work with RRDtool and to read the additional
documentation available. There is plenty more to discover about
RRDtool and you will find more and more uses for this package. You can
-easly create graphs using just the examples provided and using only
+easily create graphs using just the examples provided and using only
RRDtool. You can also use one of the front ends to RRDtool that are
available.
.SH "MAILINGLIST"
time learn a whole lot more.
.PP
Alex van den Bogaerdt
-<alex@ergens.op.het.net>
+<alex@vandenbogaerdt.nl>
diff --git a/doc/rrdtutorial.html b/doc/rrdtutorial.html
index 86eb7dba1d59f948910c56a1cfae6786993e2a51..fc73b900e5fb7d17686c978ccd28018bea406ce9 100644 (file)
--- a/doc/rrdtutorial.html
+++ b/doc/rrdtutorial.html
<ul>
- <li><a href="#name">NAME</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#tutorial">TUTORIAL</a></li>
<ul>
-->
<!-- INDEX END -->
-<p>
-</p>
-<h1><a name="name">NAME</a></h1>
<p>rrdtutorial - Alex van den Bogaerdt's RRDtool tutorial</p>
<p>
</p>
<h1><a name="description">DESCRIPTION</a></h1>
<p>RRDtool is written by Tobias Oetiker <<a href="mailto:tobi@oetiker.ch">tobi@oetiker.ch</a>> with
contributions from many people all around the world. This document is
-written by Alex van den Bogaerdt <<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>> to help you
+written by Alex van den Bogaerdt <<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</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
<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>Sometimes things change. This example used to provide numbers like
+``0.04'' in stead of ``4.00000e-02''. Those are really the same numbers,
+just written down differently. Don't be alarmed if a future version
+of rrdtool displays a slightly different form of output. The examples
+in this document are correct for version 1.2.0 of RRDtool.</p>
+<p>Also, sometimes bugs do occur. They may also influence the outcome of
+the examples. Example speed4.png was suffering from this (the handling
+of unknown data in an if-statement was wrong). Normal data will be
+just fine (a bug in rrdtool wouldn't last long) but special cases like
+NaN, INF and so on may last a bit longer. Try another version if you
+can, or just live with it.</p>
+<p>I fixed the speed4.png example (and added a note). There may be other
+examples which suffer from the same or a similar bug. Try to fix it
+yourself, which is a great excercise. But please do not submit your
+result as a fix to the source of this document. Discuss it on the
+user's list, or write to me.</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
-arrow from the center of the circle to one of the dots -- this is the pointer.
+on the edge. These dots are the places where data can be stored. Draw an
+arrow from the center of the circle to one of the dots; this is the pointer.
When the current data is read or written, the pointer moves to the next
element. As we are on a circle there is neither a beginning nor an end, you can
go on and on and on. After a while, all the available places will be used and
<p>
</p>
<h2><a name="what_data_can_be_put_into_an_rrd">What data can be put into an RRD?</a></h2>
-<p>You name it, it will probably fit as long as it is some sort of time-series
-data. This means you have to 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 must be numerical but don't have to be
-integers, as is the case with MRTG (the next section will give more details
-on this more specialized application).</p>
+<p>You name it, it will probably fit as long as it is some sort of
+time-series data. This means you have to 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 must be
+numerical but don't have to be integers, as is the case with MRTG (the
+next section will give more details on this more specialized application).</p>
<p>Many examples below talk about SNMP which is an acronym for Simple Network
-Management Protocol. ``Simple'' refers to the protocol -- it does not
+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
get used to that right away. Assume a byte is eight bits and start to
think in bits not bytes. The counter, however, still counts bytes!
In the SNMP world most of the counters are 32 bits. That means they are
-counting from 0 to 4'294'967'295. We will use these values in the examples.
+counting from 0 to 4294967295. We will use these values in the examples.
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
most into miles per hour by dividing km by 1.6 (close enough).
I will use the following abbreviations:</p>
<pre>
- M: meter
- KM: kilometer (= 1'000 meters).
- H: hour
- S: second
- KM/H: kilometers per hour
- M/S: meters per second</pre>
+ m: meter
+ km: kilometer (= 1000 meters).
+ h: hour
+ s: second
+ km/h: kilometers per hour
+ m/s: meters per second</pre>
<p>You are driving a car. At 12:05 you read the counter in the dashboard
-and it tells you that the car has moved 12'345 KM until that moment.
-At 12:10 you look again, it reads 12'357 KM. This means you have
-traveled 12 KM in five minutes. A scientist would translate that
+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 toward the
problem of (bytes per five minutes) versus (bits per second).</p>
-<p>We traveled 12 kilometers which is 12'000 meters. We did that in five
-minutes or 300 seconds. Our speed is 12'000M / 300S or 40 M/S.</p>
-<p>We could also calculate the speed in KM/H: 12 times 5 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
+<p>We traveled 12 kilometers which is 12000 meters. We did that in five
+minutes or 300 seconds. Our speed is 12000m / 300s or 40 m/s.</p>
+<p>We could also calculate the speed in km/h: 12 times 5 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
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
-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 1'000.</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
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
<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 writing this document, 7th of March, 1999 (this date
-translates to 920'804'400 seconds as explained below). Our database holds
+translates to 920804400 seconds as explained below). Our database holds
one data source (DS) named ``speed'' that represents a counter. This counter
is read every five minutes (this is the default therefore you don't have to
put <code>--step=300</code>). In the same database two round robin archives (RRAs)
@@ -270,21 +282,21 @@ 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
- 12:20 12363 KM
- 12:25 12363 KM
- 12:30 12373 KM
- 12:35 12383 KM
- 12:40 12393 KM
- 12:45 12399 KM
- 12:50 12405 KM
- 12:55 12411 KM
- 13:00 12415 KM
- 13:05 12420 KM
- 13:10 12422 KM
- 13:15 12423 KM</pre>
+ 12:05 12345 km
+ 12:10 12357 km
+ 12:15 12363 km
+ 12:20 12363 km
+ 12:25 12363 km
+ 12:30 12373 km
+ 12:35 12383 km
+ 12:40 12393 km
+ 12:45 12399 km
+ 12:50 12405 km
+ 12:55 12411 km
+ 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>
rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
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. Sometimes things change. This example used
-to provide numbers like ``0.04'' in stead of ``4.00000e-02''. Those are
-really the same numbers, just written down differently. Don't be
-alarmed if a future version of rrdtool displays a slightly different
-form of output. The examples in this document are correct for version
-1.2.0 of RRDtool.</p>
+database and try again.</p>
<p>The meaning of the above output will become clear below.</p>
<p>
</p>
blue #0000FF
magenta #FF00FF (mixed red with blue)
gray #555555 (one third of all components)</pre>
-<p>Additionally you can add an alpha channel (transparency). The default
-will be ``FF'' which means non-transparent.</p>
+<p>Additionally you can (with a recent RRDtool) add an alpha channel
+(transparency). The default will be ``FF'' which means non-transparent.</p>
<p>The PNG you just created can be displayed using your favorite image
viewer. Web browsers will display the PNG via the URL
``file:///the/path/to/speed.png''</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. Sometimes a label doesn't fit (12:00
-and 13:00 would be candidates) so they are skipped.</p>
+and 13:00 would be likely candidates) so they are skipped.</p>
<p>The vertical axis displays the range we entered. We provided
kilometers and when divided by 300 seconds, we get very small
-numbers. To be exact, the first value was 12 (12'357-12'345) and divided
+numbers. To be exact, 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/1'000''. The ``m'' (milli) has nothing to do with meters,
+meaning ``40/1000''. The ``m'' (milli) has nothing to do with meters (also m),
kilometers or millimeters! RRDtool doesn't know about the physical
units of our data, it just works with dimensionless numbers.</p>
<p>If we had measured our distances in meters, this would have been
-(12'357'000-12'345'000)/300 = 12'000/300 = 40.</p>
+(12357000-12345000)/300 = 12000/300 = 40.</p>
<p>As most people have a better feel for numbers in this range, we'll
correct that. We could recreate our database and store the correct
data, but there is a better way: we do some calculations while creating
DEF:myspeed=test.rrd:speed:AVERAGE \
CDEF:realspeed=myspeed,1000,\* \
LINE2:realspeed#FF0000</pre>
-<p>Note: Make sure not to forget the backslash \ in front of the
-multiplication operator * above. The backslash is needed to ``escape''
-the * as some operating systems might interpret and expand * instead
-of passing it to the rrdtool command.</p>
+<p>Note: I need to escape the multiplication operator * with a backslash.
+If I don't, the operating system may interpret it and use it for file
+name expansion. You could also place the line within quotation marks
+like so:</p>
+<pre>
+ "CDEF:realspeed=myspeed,1000,*" \</pre>
+<p>It boils down to: it is RRDtool which should see *, not your shell.
+And it is your shell interpreting \, not RRDtool. You may need to
+adjust examples accordingly if you happen to use an operating
+system or shell which behaves differently.</p>
<p>After viewing this PNG, you notice the ``m'' (milli) 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,
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 1'000, it should also be possible
+<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:</p>
<pre>
- Calculate meters per hour: value * 3'600
- Calculate kilometers per hour: value / 1'000
- Together this makes: value * (3'600/1'000) or value * 3.6</pre>
+ Calculate meters per hour: value * 3600
+ Calculate kilometers per hour: value / 1000
+ Together this makes: value * (3600/1000) or value * 3.6</pre>
<p>In our example database we made a mistake and we need to compensate for
-this by multiplying with 1'000. Applying that correction:</p>
+this by multiplying with 1000. Applying that correction:</p>
<pre>
- value * 3.6 * 1'000 == value * 3'600</pre>
+ value * 3.6 * 1000 == value * 3600</pre>
<p>Now let's create this PNG, and add some more magic ...</p>
<pre>
rrdtool graph speed3.png \
AREA:fast#FF0000:"Too fast"</pre>
<p>Note: here we use another means to escape the * operator by enclosing
the whole string in double quotes.</p>
-<p>This graph looks much better. Speed is shown in KM/H and there is even
+<p>This graph looks much better. Speed is shown in km/h and there is even
an extra line with the maximum allowed speed (on the road I travel
on). I also changed the colors used to display speed and changed it
from a line into an area.</p>
--start 920804400 --end 920808000 \
--vertical-label km/h \
DEF:myspeed=test.rrd:speed:AVERAGE \
- "CDEF:kmh=myspeed,3600,*" \
+ CDEF:nonans=myspeed,UN,0,myspeed,IF \
+ CDEF:kmh=nonans,3600,* \
CDEF:fast=kmh,100,GT,100,0,IF \
CDEF:over=kmh,100,GT,kmh,100,-,0,IF \
CDEF:good=kmh,100,GT,0,kmh,IF \
AREA:good#00FF00:"Good speed" \
AREA:fast#550000:"Too fast" \
STACK:over#FF0000:"Over speed"</pre>
+<p>Remember the note in the beginning? I had to remove unknown data from
+this example. The 'nonans' CDEF is new, and the 6th line (which used to
+be the 5th line) used to read 'CDEF:kmh=myspeed,3600,*'</p>
<p>Let's create a quick and dirty HTML page to view the three PNGs:</p>
<pre>
<HTML><HEAD><TITLE>Speed</TITLE></HEAD><BODY>
whatever. Any incrementing counter can be monitored and graphed using
the stuff you learned so far. Later on we will also be able to monitor
other types of values like temperature.</p>
-<p>Most (?) people interested in RRDtool will use the counter that keeps track
+<p>Many people interested in RRDtool will use the counter that keeps track
of octets (bytes) transfered by a network device. So let's do just
that next. We will start with a description of how to collect data.</p>
<p>Some people will make a remark that there are tools which can do this data
AREA:inoctets#00FF00:"In 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=86'400, we
-start at now minus 86'400 seconds. We define (with DEFs) inoctets and
+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.
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
-KM/H during 5 minutes and then were stopped by the police for 25 minutes.
+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 and 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.
+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
-cases they are handy. If you want to know how many KM you had traveled,
+cases they are handy. If you want to know how many km you had traveled,
the averaged picture would be the right one to look at. On the other hand, for
the speed that we traveled at, the maximum numbers seen is much more
interesting. Later we will see more types.</p>
we have created, there are two archives that keep data per day. The
archive that keeps averages will show low numbers, the archive that
shows maxima will have higher numbers.</p>
-<p>For my car this would translate in averages per day of 96/24=4 KM/H
+<p>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 working days, and
-maxima of 120 KM/H (my top speed that I reach every day).</p>
+maxima of 120 km/h (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
-for 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 a
-maximum around 180 KM/H. However, it probably doesn't mean that I
-traveled for 8 hours at a constant speed of 180 KM/H!</p>
+for 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 a
+maximum around 180 km/h. However, it probably doesn't mean that I
+traveled for 8 hours at a constant speed of 180 km/h!</p>
<p>This is a real example: go with the flow through Germany (fast!) and stop
a few times for gas and coffee. Drive slowly through Austria and the
Netherlands. Be careful in the mountains and villages. If you would
day. From this one value, we cannot see much detail, of course.</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 ana appropriate way. This is true for all data.</p>
+interpret the data in an appropriate 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 didn't have the graph at all.</p>
<h2><a name="let_s_review_what_you_now_should_know">Let's review what you now should know</a></h2>
<p>You know how to create a database and can put data in it. You can get
the numbers out again by creating an image, do math on the data from
-the database and view the resulte instead of the raw data. You know
-about the difference between averages and maxima, and when to use
+the database and view the result instead of the raw data. You know
+about the difference between averages and maximum, and when to use
which (or at least you should 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
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.
-Example: our first example (12'345, 12'357, 12'363, 12'363) would read:
+Example: our first example (12345, 12357, 12363, 12363) would read:
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
</li>
<li>
<p>Line C is of type DERIVE. It should be a counter that can decrease. It does
-so between 2'400 and 0, with 1'800 in-between.</p>
+so between 2400 and 0, with 1800 in-between.</p>
</li>
<li>
<p>Line D is of type ABSOLUTE. This is like counter but it works on
<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 the counter shows 999'987. We travel 20 KM and
-the counter should go to 1'000'007. Unfortunately, there are only six digits
-on our counter so it really shows 000'007. If we would plot that on a type
-DERIVE, it would mean that the counter was set back 999'980 KM. It wasn't,
+In our car we notice that the counter shows 999987. We travel 20 km and
+the counter should go to 1000007. Unfortunately, there are only six digits
+on our counter so it really shows 000007. If we would plot that on a type
+DERIVE, it would mean that the counter was set back 999980 km. It wasn't,
and there has to be some protection for this. This protection is only
available for type COUNTER which should be used for this kind of counter
anyways. How does it work? Type counter should never decrease and
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 - 999'987 = -999'980 (instead of 1'000'007-999'987=20)</pre>
+ Delta = 7 - 999987 = -999980 (instead of 1000007-999987=20)</pre>
<pre>
- Real delta = -999'980 + 999'999 + 1 = 20</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>
- - 32 bits: 0 .. 4'294'967'295
- - 64 bits: 0 .. 18'446'744'073'709'551'615</pre>
+ - 32 bits: 0 .. 4294967295
+ - 64 bits: 0 .. 18446744073709551615</pre>
<p>If these numbers look strange to you, you can view them in
their hexadecimal form:</p>
<pre>
can't handle the numbers :)</p>
<p>Correction numbers:</p>
<pre>
- - 32 bits: (4'294'967'295 + 1) = 4'294'967'296
- - 64 bits: (18'446'744'073'709'551'615 + 1)
- - correction1 = 18'446'744'069'414'584'320</pre>
+ - 32 bits: (4294967295 + 1) = 4294967296
+ - 64 bits: (18446744073709551615 + 1)
+ - correction1 = 18446744069414584320</pre>
<pre>
- Before: 4'294'967'200
+ Before: 4294967200
Increase: 100
- Should become: 4'294'967'300
+ Should become: 4294967300
But really is: 4
- Delta: -4'294'967'196
- Correction1: -4'294'967'196 + 4'294'967'296 = 100</pre>
+ Delta: -4294967196
+ Correction1: -4294967196 + 4294967296 = 100</pre>
<pre>
- Before: 18'446'744'073'709'551'000
+ Before: 18446744073709551000
Increase: 800
- Should become: 18'446'744'073'709'551'800
+ Should become: 18446744073709551800
But really is: 184
- Delta: -18'446'744'073'709'550'816
- Correction1: -18'446'744'073'709'550'816
- + 4'294'967'296 = -18'446'744'069'414'583'520
- Correction2: -18'446'744'069'414'583'520
- + 18'446'744'069'414'584'320 = 800</pre>
+ Delta: -18446744073709550816
+ Correction1: -18446744073709550816
+ + 4294967296 = -18446744069414583520
+ Correction2: -18446744069414583520
+ + 18446744069414584320 = 800</pre>
<pre>
- Before: 18'446'744'073'709'551'615 ( maximum value )
- Increase: 18'446'744'069'414'584'320 ( absurd increase, minimum for
- Should become: 36'893'488'143'124'135'935 this example to work )
- But really is: 18'446'744'069'414'584'319
- Delta: -4'294'967'296
- Correction1: -4'294'967'296 + 4'294'967'296 = 0
+ 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>
- Before: 18'446'744'073'709'551'615 ( maximum value )
- Increase: 18'446'744'069'414'584'319 ( one less increase )
- Should become: 36'893'488'143'124'135'934
- But really is: 18'446'744'069'414'584'318
- Delta: -4'294'967'297
- Correction1: -4'294'967'297 + 4'294'967'296 = -1
- Correction2: -1 + 18'446'744'069'414'584'320 = 18'446'744'069'414'584'319</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
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
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 920'805'000
-to 920'805'900 as this goes very well with the example numbers.</p>
+<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 \
you to be able to work with RRDtool and to read the additional
documentation available. There is plenty more to discover about
RRDtool and you will find more and more uses for this package. You can
-easly create graphs using just the examples provided and using only
+easily create graphs using just the examples provided and using only
RRDtool. You can also use one of the front ends to RRDtool that are
available.</p>
<p>
basic questions. They will not only get their answers, but at the same
time learn a whole lot more.</p>
<p>Alex van den Bogaerdt
-<<a href="mailto:alex@ergens.op.het.net">alex@ergens.op.het.net</a>></p>
+<<a href="mailto:alex@vandenbogaerdt.nl">alex@vandenbogaerdt.nl</a>></p>
</body>
diff --git a/doc/rrdtutorial.pod b/doc/rrdtutorial.pod
index 30a4868d30c7b175cff702e884f076106ed2ce1e..6651a809304d8b38463473197480c1ac15154753 100644 (file)
--- a/doc/rrdtutorial.pod
+++ b/doc/rrdtutorial.pod
+=for changes please consult me first. Thanks, Alex
=head1 NAME
rrdtutorial - Alex van den Bogaerdt's RRDtool tutorial
RRDtool is written by Tobias Oetiker E<lt>tobi@oetiker.chE<gt> with
contributions from many people all around the world. This document is
-written by Alex van den Bogaerdt E<lt>alex@ergens.op.het.netE<gt> to help you
+written by Alex van den Bogaerdt E<lt>alex@vandenbogaerdt.nlE<gt> to help you
understand what RRDtool is and what it can do for you.
The documentation provided with RRDtool can be too technical for some
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.
+Sometimes things change. This example used to provide numbers like
+"0.04" in stead of "4.00000e-02". Those are really the same numbers,
+just written down differently. Don't be alarmed if a future version
+of rrdtool displays a slightly different form of output. The examples
+in this document are correct for version 1.2.0 of RRDtool.
+
+Also, sometimes bugs do occur. They may also influence the outcome of
+the examples. Example speed4.png was suffering from this (the handling
+of unknown data in an if-statement was wrong). Normal data will be
+just fine (a bug in rrdtool wouldn't last long) but special cases like
+NaN, INF and so on may last a bit longer. Try another version if you
+can, or just live with it.
+
+I fixed the speed4.png example (and added a note). There may be other
+examples which suffer from the same or a similar bug. Try to fix it
+yourself, which is a great excercise. But please do not submit your
+result as a fix to the source of this document. Discuss it on the
+user's list, or write to me.
+
=head2 What is RRDtool?
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
-arrow from the center of the circle to one of the dots -- this is the pointer.
+on the edge. These dots are the places where data can be stored. Draw an
+arrow from the center of the circle to one of the dots; this is the pointer.
When the current data is read or written, the pointer moves to the next
element. As we are on a circle there is neither a beginning nor an end, you can
go on and on and on. After a while, all the available places will be used and
=head2 What data can be put into an RRD?
-You name it, it will probably fit as long as it is some sort of time-series
-data. This means you have to 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 must be numerical but don't have to be
-integers, as is the case with MRTG (the next section will give more details
-on this more specialized application).
+You name it, it will probably fit as long as it is some sort of
+time-series data. This means you have to 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 must be
+numerical but don't have to be integers, as is the case with MRTG (the
+next section will give more details on this more specialized application).
Many examples below talk about SNMP which is an acronym for Simple Network
-Management Protocol. "Simple" refers to the protocol -- it does not
+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
get used to that right away. Assume a byte is eight bits and start to
think in bits not bytes. The counter, however, still counts bytes!
In the SNMP world most of the counters are 32 bits. That means they are
-counting from 0 to 4'294'967'295. We will use these values in the examples.
+counting from 0 to 4294967295. We will use these values in the examples.
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
most into miles per hour by dividing km by 1.6 (close enough).
I will use the following abbreviations:
- M: meter
- KM: kilometer (= 1'000 meters).
- H: hour
- S: second
- KM/H: kilometers per hour
- M/S: meters per second
+ m: meter
+ km: kilometer (= 1000 meters).
+ h: hour
+ s: second
+ km/h: kilometers per hour
+ m/s: meters per second
You are driving a car. At 12:05 you read the counter in the dashboard
-and it tells you that the car has moved 12'345 KM until that moment.
-At 12:10 you look again, it reads 12'357 KM. This means you have
-traveled 12 KM in five minutes. A scientist would translate that
+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 toward the
problem of (bytes per five minutes) versus (bits per second).
-We traveled 12 kilometers which is 12'000 meters. We did that in five
-minutes or 300 seconds. Our speed is 12'000M / 300S or 40 M/S.
+We traveled 12 kilometers which is 12000 meters. We did that in five
+minutes or 300 seconds. Our speed is 12000m / 300s or 40 m/s.
-We could also calculate the speed in KM/H: 12 times 5 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
+We could also calculate the speed in km/h: 12 times 5 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 :)
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.
-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 1'000.
+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.
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
We created the round robin database called test (test.rrd) which starts at
noon the day I started writing this document, 7th of March, 1999 (this date
-translates to 920'804'400 seconds as explained below). Our database holds
+translates to 920804400 seconds as explained below). Our database holds
one data source (DS) named "speed" that represents a counter. This counter
is read every five minutes (this is the default therefore you don't have to
put C<--step=300>). In the same database two round robin archives (RRAs)
We now have to fill our database with some numbers. We'll pretend to
have read the following numbers:
- 12:05 12345 KM
- 12:10 12357 KM
- 12:15 12363 KM
- 12:20 12363 KM
- 12:25 12363 KM
- 12:30 12373 KM
- 12:35 12383 KM
- 12:40 12393 KM
- 12:45 12399 KM
- 12:50 12405 KM
- 12:55 12411 KM
- 13:00 12415 KM
- 13:05 12420 KM
- 13:10 12422 KM
- 13:15 12423 KM
+ 12:05 12345 km
+ 12:10 12357 km
+ 12:15 12363 km
+ 12:20 12363 km
+ 12:25 12363 km
+ 12:30 12373 km
+ 12:35 12383 km
+ 12:40 12393 km
+ 12:45 12399 km
+ 12:50 12405 km
+ 12:55 12411 km
+ 13:00 12415 km
+ 13:05 12420 km
+ 13:10 12422 km
+ 13:15 12423 km
We fill the database as follows:
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. Sometimes things change. This example used
-to provide numbers like "0.04" in stead of "4.00000e-02". Those are
-really the same numbers, just written down differently. Don't be
-alarmed if a future version of rrdtool displays a slightly different
-form of output. The examples in this document are correct for version
-1.2.0 of RRDtool.
+database and try again.
+
The meaning of the above output will become clear below.
magenta #FF00FF (mixed red with blue)
gray #555555 (one third of all components)
-Additionally you can add an alpha channel (transparency). The default
-will be "FF" which means non-transparent.
+Additionally you can (with a recent RRDtool) add an alpha channel
+(transparency). The default will be "FF" which means non-transparent.
The PNG you just created can be displayed using your favorite image
viewer. Web browsers will display the PNG via the URL
When looking at the image, you notice that the horizontal axis is labeled
12:10, 12:20, 12:30, 12:40 and 12:50. Sometimes a label doesn't fit (12:00
-and 13:00 would be candidates) so they are skipped.
+and 13:00 would be likely candidates) so they are skipped.
The vertical axis displays the range we entered. We provided
kilometers and when divided by 300 seconds, we get very small
-numbers. To be exact, the first value was 12 (12'357-12'345) and divided
+numbers. To be exact, 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/1'000". The "m" (milli) has nothing to do with meters,
+meaning "40/1000". The "m" (milli) has nothing to do with meters (also m),
kilometers or millimeters! RRDtool doesn't know about the physical
units of our data, it just works with dimensionless numbers.
If we had measured our distances in meters, this would have been
-(12'357'000-12'345'000)/300 = 12'000/300 = 40.
+(12357000-12345000)/300 = 12000/300 = 40.
As most people have a better feel for numbers in this range, we'll
correct that. We could recreate our database and store the correct
CDEF:realspeed=myspeed,1000,\* \
LINE2:realspeed#FF0000
-Note: Make sure not to forget the backslash \ in front of the
-multiplication operator * above. The backslash is needed to "escape"
-the * as some operating systems might interpret and expand * instead
-of passing it to the rrdtool command.
+Note: I need to escape the multiplication operator * with a backslash.
+If I don't, the operating system may interpret it and use it for file
+name expansion. You could also place the line within quotation marks
+like so:
+
+ "CDEF:realspeed=myspeed,1000,*" \
+
+It boils down to: it is RRDtool which should see *, not your shell.
+And it is your shell interpreting \, not RRDtool. You may need to
+adjust examples accordingly if you happen to use an operating
+system or shell which behaves differently.
After viewing this PNG, you notice the "m" (milli) has
disappeared. This it what the correct result would be. Also, a label
more detail. Also, you may want to read my tutorial on CDEFs and Steve
Rader's tutorial on RPN. But first finish this tutorial.
-Hang on! If we can multiply values with 1'000, it should also be possible
+Hang on! If we can multiply values with 1000, it should also be possible
to display kilometers per hour from the same data!
To change a value that is measured in meters per second:
- Calculate meters per hour: value * 3'600
- Calculate kilometers per hour: value / 1'000
- Together this makes: value * (3'600/1'000) or value * 3.6
+ Calculate meters per hour: value * 3600
+ Calculate kilometers per hour: value / 1000
+ Together this makes: value * (3600/1000) or value * 3.6
In our example database we made a mistake and we need to compensate for
-this by multiplying with 1'000. Applying that correction:
+this by multiplying with 1000. Applying that correction:
- value * 3.6 * 1'000 == value * 3'600
+ value * 3.6 * 1000 == value * 3600
Now let's create this PNG, and add some more magic ...
Note: here we use another means to escape the * operator by enclosing
the whole string in double quotes.
-This graph looks much better. Speed is shown in KM/H and there is even
+This graph looks much better. Speed is shown in km/h and there is even
an extra line with the maximum allowed speed (on the road I travel
on). I also changed the colors used to display speed and changed it
from a line into an area.
--start 920804400 --end 920808000 \
--vertical-label km/h \
DEF:myspeed=test.rrd:speed:AVERAGE \
- "CDEF:kmh=myspeed,3600,*" \
+ CDEF:nonans=myspeed,UN,0,myspeed,IF \
+ CDEF:kmh=nonans,3600,* \
CDEF:fast=kmh,100,GT,100,0,IF \
CDEF:over=kmh,100,GT,kmh,100,-,0,IF \
CDEF:good=kmh,100,GT,0,kmh,IF \
AREA:fast#550000:"Too fast" \
STACK:over#FF0000:"Over speed"
+Remember the note in the beginning? I had to remove unknown data from
+this example. The 'nonans' CDEF is new, and the 6th line (which used to
+be the 5th line) used to read 'CDEF:kmh=myspeed,3600,*'
+
Let's create a quick and dirty HTML page to view the three PNGs:
<HTML><HEAD><TITLE>Speed</TITLE></HEAD><BODY>
the stuff you learned so far. Later on we will also be able to monitor
other types of values like temperature.
-Most (?) people interested in RRDtool will use the counter that keeps track
+Many people interested in RRDtool will use the counter that keeps track
of octets (bytes) transfered by a network device. So let's do just
that next. We will start with a description of how to collect data.
LINE1:outoctets#0000FF:"Out traffic"
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=86'400, we
-start at now minus 86'400 seconds. We define (with DEFs) inoctets and
+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.
into this a bit more.
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.
+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 and 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.
+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 :)
Obviously, in this case we shouldn't look at the averages. In some
-cases they are handy. If you want to know how many KM you had traveled,
+cases they are handy. If you want to know how many km you had traveled,
the averaged picture would be the right one to look at. On the other hand, for
the speed that we traveled at, the maximum numbers seen is much more
interesting. Later we will see more types.
archive that keeps averages will show low numbers, the archive that
shows maxima will have higher numbers.
-For my car this would translate in averages per day of 96/24=4 KM/H
+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 working days, and
-maxima of 120 KM/H (my top speed that I reach every day).
+maxima of 120 km/h (my top speed that I reach every day).
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
as they are in five minutes, but not if you average.
On some days, I go for a long ride. If I go across Europe and travel
-for 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 a
-maximum around 180 KM/H. However, it probably doesn't mean that I
-traveled for 8 hours at a constant speed of 180 KM/H!
+for 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 a
+maximum around 180 km/h. However, it probably doesn't mean that I
+traveled for 8 hours at a constant speed of 180 km/h!
This is a real example: go with the flow through Germany (fast!) and stop
a few times for gas and coffee. Drive slowly through Austria and the
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 ana appropriate way. This is true for all data.
+interpret the data in an appropriate way. This is true for all data.
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 know how to create a database and can put data in it. You can get
the numbers out again by creating an image, do math on the data from
-the database and view the resulte instead of the raw data. You know
-about the difference between averages and maxima, and when to use
+the database and view the result instead of the raw data. You know
+about the difference between averages and maximum, and when to use
which (or at least you should have an idea).
RRDtool can do more than what we have learned up to now. Before you
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.
-Example: our first example (12'345, 12'357, 12'363, 12'363) would read:
+Example: our first example (12345, 12357, 12363, 12363) would read:
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
=item *
Line C is of type DERIVE. It should be a counter that can decrease. It does
-so between 2'400 and 0, with 1'800 in-between.
+so between 2400 and 0, with 1800 in-between.
=item *
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 the counter shows 999'987. We travel 20 KM and
-the counter should go to 1'000'007. Unfortunately, there are only six digits
-on our counter so it really shows 000'007. If we would plot that on a type
-DERIVE, it would mean that the counter was set back 999'980 KM. It wasn't,
+In our car we notice that the counter shows 999987. We travel 20 km and
+the counter should go to 1000007. Unfortunately, there are only six digits
+on our counter so it really shows 000007. If we would plot that on a type
+DERIVE, it would mean that the counter was set back 999980 km. It wasn't,
and there has to be some protection for this. This protection is only
available for type COUNTER which should be used for this kind of counter
anyways. How does it work? Type counter should never decrease and
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:
- Delta = 7 - 999'987 = -999'980 (instead of 1'000'007-999'987=20)
+ Delta = 7 - 999987 = -999980 (instead of 1000007-999987=20)
- Real delta = -999'980 + 999'999 + 1 = 20
+ Real delta = -999980 + 999999 + 1 = 20
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:
- - 32 bits: 0 .. 4'294'967'295
- - 64 bits: 0 .. 18'446'744'073'709'551'615
+ - 32 bits: 0 .. 4294967295
+ - 64 bits: 0 .. 18446744073709551615
If these numbers look strange to you, you can view them in
their hexadecimal form:
Correction numbers:
- - 32 bits: (4'294'967'295 + 1) = 4'294'967'296
- - 64 bits: (18'446'744'073'709'551'615 + 1)
- - correction1 = 18'446'744'069'414'584'320
+ - 32 bits: (4294967295 + 1) = 4294967296
+ - 64 bits: (18446744073709551615 + 1)
+ - correction1 = 18446744069414584320
- Before: 4'294'967'200
+ Before: 4294967200
Increase: 100
- Should become: 4'294'967'300
+ Should become: 4294967300
But really is: 4
- Delta: -4'294'967'196
- Correction1: -4'294'967'196 + 4'294'967'296 = 100
+ Delta: -4294967196
+ Correction1: -4294967196 + 4294967296 = 100
- Before: 18'446'744'073'709'551'000
+ Before: 18446744073709551000
Increase: 800
- Should become: 18'446'744'073'709'551'800
+ Should become: 18446744073709551800
But really is: 184
- Delta: -18'446'744'073'709'550'816
- Correction1: -18'446'744'073'709'550'816
- + 4'294'967'296 = -18'446'744'069'414'583'520
- Correction2: -18'446'744'069'414'583'520
- + 18'446'744'069'414'584'320 = 800
-
- Before: 18'446'744'073'709'551'615 ( maximum value )
- Increase: 18'446'744'069'414'584'320 ( absurd increase, minimum for
- Should become: 36'893'488'143'124'135'935 this example to work )
- But really is: 18'446'744'069'414'584'319
- Delta: -4'294'967'296
- Correction1: -4'294'967'296 + 4'294'967'296 = 0
+ Delta: -18446744073709550816
+ Correction1: -18446744073709550816
+ + 4294967296 = -18446744069414583520
+ Correction2: -18446744069414583520
+ + 18446744069414584320 = 800
+
+ 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)
- Before: 18'446'744'073'709'551'615 ( maximum value )
- Increase: 18'446'744'069'414'584'319 ( one less increase )
- Should become: 36'893'488'143'124'135'934
- But really is: 18'446'744'069'414'584'318
- Delta: -4'294'967'297
- Correction1: -4'294'967'297 + 4'294'967'296 = -1
- Correction2: -1 + 18'446'744'069'414'584'320 = 18'446'744'069'414'584'319
+ 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
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
time+600: 600 delta=300 time+603: 603 delta=303
time+900: 900 delta=300 time+900: 900 delta=297
-Let's create two identical databases. I've chosen the time range 920'805'000
-to 920'805'900 as this goes very well with the example numbers.
+Let's create two identical databases. I've chosen the time range 920805000
+to 920805900 as this goes very well with the example numbers.
rrdtool create seconds1.rrd \
--start 920804700 \
you to be able to work with RRDtool and to read the additional
documentation available. There is plenty more to discover about
RRDtool and you will find more and more uses for this package. You can
-easly create graphs using just the examples provided and using only
+easily create graphs using just the examples provided and using only
RRDtool. You can also use one of the front ends to RRDtool that are
available.
time learn a whole lot more.
Alex van den Bogaerdt
-E<lt>alex@ergens.op.het.netE<gt>
+E<lt>alex@vandenbogaerdt.nlE<gt>
diff --git a/doc/rrdtutorial.txt b/doc/rrdtutorial.txt
index 50e358355d86706fa44b7112c81ef1ea257820be..b6bb973b4dde5cf20a995f2681fc89c1a55b357a 100644 (file)
--- a/doc/rrdtutorial.txt
+++ b/doc/rrdtutorial.txt
-N\bNA\bAM\bME\bE
- rrdtutorial - Alex van den Bogaerdt's RRDtool tutorial
+rrdtutorial - Alex van den Bogaerdt's RRDtool tutorial
D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
RRDtool is written by Tobias Oetiker <tobi@oetiker.ch> with contribu-
tions from many people all around the world. This document is written
- by Alex van den Bogaerdt <alex@ergens.op.het.net> to help you under-
+ by Alex van den Bogaerdt <alex@vandenbogaerdt.nl> to help you under-
stand what RRDtool is and what it can do for you.
The documentation provided with RRDtool can be too technical for some
ment explains the basics and may be boring. But if you don't under-
stand the basics, the examples will not be as meaningful to you.
+ Sometimes things change. This example used to provide numbers like
+ "0.04" in stead of "4.00000e-02". Those are really the same numbers,
+ just written down differently. Don't be alarmed if a future version of
+ rrdtool displays a slightly different form of output. The examples in
+ this document are correct for version 1.2.0 of RRDtool.
+
+ Also, sometimes bugs do occur. They may also influence the outcome of
+ the examples. Example speed4.png was suffering from this (the handling
+ of unknown data in an if-statement was wrong). Normal data will be just
+ fine (a bug in rrdtool wouldn't last long) but special cases like NaN,
+ INF and so on may last a bit longer. Try another version if you can,
+ or just live with it.
+
+ I fixed the speed4.png example (and added a note). There may be other
+ examples which suffer from the same or a similar bug. Try to fix it
+ yourself, which is a great excercise. But please do not submit your
+ result as a fix to the source of this document. Discuss it on the
+ user's list, or write to me.
+
W\bWh\bha\bat\bt i\bis\bs R\bRR\bRD\bDt\bto\boo\bol\bl?\b?
RRDtool refers to Round Robin Database tool. Round robin is a tech-
nique that works with a fixed amount of data, and a pointer to the cur-
- rent element. Think of a circle with some dots plotted on the edge --
- these dots are the places where data can be stored. Draw an arrow from
- the center of the circle to one of the dots -- this is the pointer.
- When the current data is read or written, the pointer moves to the next
- element. As we are on a circle there is neither a beginning nor an end,
+ rent element. Think of a circle with some dots plotted on the edge.
+ These dots are the places where data can be stored. Draw an arrow from
+ the center of the circle to one of the dots; this is the pointer. When
+ the current data is read or written, the pointer moves to the next ele-
+ ment. As we are on a circle there is neither a beginning nor an end,
you can go on and on and on. After a while, all the available places
will be used and the process automatically reuses old locations. This
way, the dataset will not grow in size and therefore requires no main-
tion).
Many examples below talk about SNMP which is an acronym for Simple Net-
- work 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 can be used to query devices for the values of counters they keep.
- It is the value from those counters that we want to store in the RRD.
+ work 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 under-
+ stand what people are talking about. For now, just realize that SNMP
+ can be used to query devices for the values of counters they keep. It
+ is the value from those counters that we want to store in the RRD.
W\bWh\bha\bat\bt c\bca\ban\bn I\bI d\bdo\bo w\bwi\bit\bth\bh t\bth\bhi\bis\bs t\bto\boo\bol\bl?\b?
get used to that right away. Assume a byte is eight bits and start to
think in bits not bytes. The counter, however, still counts bytes! In
the SNMP world most of the counters are 32 bits. That means they are
- counting from 0 to 4'294'967'295. We will use these values in the exam-
+ counting from 0 to 4294967295. We will use these values in the exam-
ples. 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.
most into miles per hour by dividing km by 1.6 (close enough). I will
use the following abbreviations:
- M: meter
- KM: kilometer (= 1'000 meters).
- H: hour
- S: second
- KM/H: kilometers per hour
- M/S: meters per second
+ m: meter
+ km: kilometer (= 1000 meters).
+ h: hour
+ s: second
+ km/h: kilometers per hour
+ m/s: meters per second
You are driving a car. At 12:05 you read the counter in the dashboard
- and it tells you that the car has moved 12'345 KM until that moment.
- At 12:10 you look again, it reads 12'357 KM. This means you have trav-
- eled 12 KM in five minutes. A scientist would translate that into
- meters per second and this makes a nice comparison toward the problem
- of (bytes per five minutes) versus (bits per second).
-
- We traveled 12 kilometers which is 12'000 meters. We did that in five
- minutes or 300 seconds. Our speed is 12'000M / 300S or 40 M/S.
-
- We could also calculate the speed in KM/H: 12 times 5 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 exam-
+ 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 toward the problem of (bytes
+ per five minutes) versus (bits per second).
+
+ We traveled 12 kilometers which is 12000 meters. We did that in five
+ minutes or 300 seconds. Our speed is 12000m / 300s or 40 m/s.
+
+ We could also calculate the speed in km/h: 12 times 5 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 exam-
ple at home or where I live :)
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.
- 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 1'000.
+ 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.
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
We created the round robin database called test (test.rrd) which starts
at noon the day I started writing this document, 7th of March, 1999
- (this date translates to 920'804'400 seconds as explained below). Our
+ (this date translates to 920804400 seconds as explained below). Our
database holds one data source (DS) named "speed" that represents a
counter. This counter is read every five minutes (this is the default
therefore you don't have to put "--step=300"). In the same database
We now have to fill our database with some numbers. We'll pretend to
have read the following numbers:
- 12:05 12345 KM
- 12:10 12357 KM
- 12:15 12363 KM
- 12:20 12363 KM
- 12:25 12363 KM
- 12:30 12373 KM
- 12:35 12383 KM
- 12:40 12393 KM
- 12:45 12399 KM
- 12:50 12405 KM
- 12:55 12411 KM
- 13:00 12415 KM
- 13:05 12420 KM
- 13:10 12422 KM
- 13:15 12423 KM
+ 12:05 12345 km
+ 12:10 12357 km
+ 12:15 12363 km
+ 12:20 12363 km
+ 12:25 12363 km
+ 12:30 12373 km
+ 12:35 12383 km
+ 12:40 12393 km
+ 12:45 12399 km
+ 12:50 12405 km
+ 12:55 12411 km
+ 13:00 12415 km
+ 13:05 12420 km
+ 13:10 12422 km
+ 13:15 12423 km
We fill the database as follows:
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. Sometimes things change. This example used to
- provide numbers like "0.04" in stead of "4.00000e-02". Those are
- really the same numbers, just written down differently. Don't be
- alarmed if a future version of rrdtool displays a slightly different
- form of output. The examples in this document are correct for version
- 1.2.0 of RRDtool.
+ database and try again.
The meaning of the above output will become clear below.
magenta #FF00FF (mixed red with blue)
gray #555555 (one third of all components)
- Additionally you can add an alpha channel (transparency). The default
- will be "FF" which means non-transparent.
+ Additionally you can (with a recent RRDtool) add an alpha channel
+ (transparency). The default will be "FF" which means non-transparent.
The PNG you just created can be displayed using your favorite image
viewer. Web browsers will display the PNG via the URL
When looking at the image, you notice that the horizontal axis is
labeled 12:10, 12:20, 12:30, 12:40 and 12:50. Sometimes a label doesn't
- fit (12:00 and 13:00 would be candidates) so they are skipped.
+ fit (12:00 and 13:00 would be likely candidates) so they are skipped.
The vertical axis displays the range we entered. We provided kilometers
and when divided by 300 seconds, we get very small numbers. To be
- exact, the first value was 12 (12'357-12'345) and divided by 300 this
- makes 0.04, which is displayed by RRDtool as "40 m" meaning "40/1'000".
- The "m" (milli) has nothing to do with meters, kilometers or millime-
- ters! RRDtool doesn't know about the physical units of our data, it
- just works with dimensionless numbers.
+ exact, 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" (milli) has nothing to do with meters (also m), kilometers or
+ millimeters! RRDtool doesn't know about the physical units of our data,
+ it just works with dimensionless numbers.
If we had measured our distances in meters, this would have been
- (12'357'000-12'345'000)/300 = 12'000/300 = 40.
+ (12357000-12345000)/300 = 12000/300 = 40.
As most people have a better feel for numbers in this range, we'll cor-
rect that. We could recreate our database and store the correct data,
CDEF:realspeed=myspeed,1000,\* \
LINE2:realspeed#FF0000
- Note: Make sure not to forget the backslash \ in front of the multipli-
- cation operator * above. The backslash is needed to "escape" the * as
- some operating systems might interpret and expand * instead of passing
- it to the rrdtool command.
+ Note: I need to escape the multiplication operator * with a backslash.
+ If I don't, the operating system may interpret it and use it for file
+ name expansion. You could also place the line within quotation marks
+ like so:
+
+ "CDEF:realspeed=myspeed,1000,*" \
+
+ It boils down to: it is RRDtool which should see *, not your shell.
+ And it is your shell interpreting \, not RRDtool. You may need to
+ adjust examples accordingly if you happen to use an operating system or
+ shell which behaves differently.
After viewing this PNG, you notice the "m" (milli) has disappeared.
This it what the correct result would be. Also, a label has been added
detail. Also, you may want to read my tutorial on CDEFs and Steve
Rader's tutorial on RPN. But first finish this tutorial.
- Hang on! If we can multiply values with 1'000, it should also be possi-
+ Hang on! If we can multiply values with 1000, it should also be possi-
ble to display kilometers per hour from the same data!
To change a value that is measured in meters per second:
- Calculate meters per hour: value * 3'600
- Calculate kilometers per hour: value / 1'000
- Together this makes: value * (3'600/1'000) or value * 3.6
+ Calculate meters per hour: value * 3600
+ Calculate kilometers per hour: value / 1000
+ Together this makes: value * (3600/1000) or value * 3.6
In our example database we made a mistake and we need to compensate for
- this by multiplying with 1'000. Applying that correction:
+ this by multiplying with 1000. Applying that correction:
- value * 3.6 * 1'000 == value * 3'600
+ value * 3.6 * 1000 == value * 3600
Now let's create this PNG, and add some more magic ...
Note: here we use another means to escape the * operator by enclosing
the whole string in double quotes.
- This graph looks much better. Speed is shown in KM/H and there is even
+ This graph looks much better. Speed is shown in km/h and there is even
an extra line with the maximum allowed speed (on the road I travel on).
I also changed the colors used to display speed and changed it from a
line into an area.
--start 920804400 --end 920808000 \
--vertical-label km/h \
DEF:myspeed=test.rrd:speed:AVERAGE \
- "CDEF:kmh=myspeed,3600,*" \
+ CDEF:nonans=myspeed,UN,0,myspeed,IF \
+ CDEF:kmh=nonans,3600,* \
CDEF:fast=kmh,100,GT,100,0,IF \
CDEF:over=kmh,100,GT,kmh,100,-,0,IF \
CDEF:good=kmh,100,GT,0,kmh,IF \
AREA:fast#550000:"Too fast" \
STACK:over#FF0000:"Over speed"
+ Remember the note in the beginning? I had to remove unknown data from
+ this example. The 'nonans' CDEF is new, and the 6th line (which used to
+ be the 5th line) used to read 'CDEF:kmh=myspeed,3600,*'
+
Let's create a quick and dirty HTML page to view the three PNGs:
<HTML><HEAD><TITLE>Speed</TITLE></HEAD><BODY>
learned so far. Later on we will also be able to monitor other types of
values like temperature.
- Most (?) people interested in RRDtool will use the counter that keeps
- track of octets (bytes) transfered by a network device. So let's do
- just that next. We will start with a description of how to collect
- data.
+ Many people interested in RRDtool will use the counter that keeps track
+ of octets (bytes) transfered by a network device. So let's do just that
+ next. We will start with a description of how to collect data.
Some people will make a remark that there are tools which can do this
data collection for you. They are right! However, I feel it is impor-
The device should answer with a description of itself, perhaps an empty
one. Until you got a valid answer from a device, perhaps using a dif-
- ferent "password", or a different device, there is no point in
- continuing.
+ ferent "password", or a different device, there is no point in continu-
+ ing.
snmpget -v2c -c public myrouter interfaces.ifNumber.0
LINE1:outoctets#0000FF:"Out traffic"
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=86'400, we start at
- now minus 86'400 seconds. We define (with DEFs) inoctets and outoctets
+ 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.
more.
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
+ 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
and 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 sam-
ples measured would be 144+0+0+0+0+0=144, divided by 30 minutes, cor-
- rected 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 :)
+ rected 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 :)
Obviously, in this case we shouldn't look at the averages. In some
- cases they are handy. If you want to know how many KM you had traveled,
+ cases they are handy. If you want to know how many km you had traveled,
the averaged picture would be the right one to look at. On the other
hand, for the speed that we traveled at, the maximum numbers seen is
much more interesting. Later we will see more types.
that keeps averages will show low numbers, the archive that shows max-
ima will have higher numbers.
- For my car this would translate in averages per day of 96/24=4 KM/H (as
+ 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 working days, and maxima
- of 120 KM/H (my top speed that I reach every day).
+ of 120 km/h (my top speed that I reach every day).
Big difference. Do not look at the second graph to estimate the dis-
tances that I travel and do not look at the first graph to estimate my
five minutes, but not if you average.
On some days, I go for a long ride. If I go across Europe and travel
- for 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 a maximum
- around 180 KM/H. However, it probably doesn't mean that I traveled for
- 8 hours at a constant speed of 180 KM/H!
+ for 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 a maximum
+ around 180 km/h. However, it probably doesn't mean that I traveled for
+ 8 hours at a constant speed of 180 km/h!
This is a real example: go with the flow through Germany (fast!) and
stop a few times for gas and coffee. Drive slowly through Austria and
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 inter-
- pret the data in ana appropriate way. This is true for all data.
+ pret the data in an appropriate way. This is true for all data.
The biggest mistake you can make is to use the collected data for some-
thing that it is not suitable for. You would be better off if you
You know how to create a database and can put data in it. You can get
the numbers out again by creating an image, do math on the data from
- the database and view the resulte instead of the raw data. You know
- about the difference between averages and maxima, and when to use which
- (or at least you should have an idea).
+ the database and view the result instead of the raw data. You know
+ about the difference between averages and maximum, and when to use
+ which (or at least you should have an idea).
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
like counter with one difference: RRDtool assumes the counter is reset
when it's read. That is: its delta is known without calculation by RRD-
tool whereas RRDtool needs to calculate it for the counter type. Exam-
- ple: our first example (12'345, 12'357, 12'363, 12'363) would read:
+ ple: our first example (12345, 12357, 12363, 12363) would read:
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 calcu-
what we put in: a sort of a wave.
· Line C is of type DERIVE. It should be a counter that can decrease.
- It does so between 2'400 and 0, with 1'800 in-between.
+ It does so between 2400 and 0, with 1800 in-between.
· Line D is of type ABSOLUTE. This is like counter but it works on val-
ues without calculating the difference. The numbers are the same and
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 the counter shows 999'987. We
- travel 20 KM and the counter should go to 1'000'007. Unfortunately,
- there are only six digits on our counter so it really shows 000'007. If
- we would plot that on a type DERIVE, it would mean that the counter was
- set back 999'980 KM. It wasn't, and there has to be some protection for
+ counter wrap: In our car we notice that the counter shows 999987. We
+ travel 20 km and the counter should go to 1000007. Unfortunately, there
+ are only six digits on our counter so it really shows 000007. If we
+ would plot that on a type DERIVE, it would mean that the counter was
+ set back 999980 km. It wasn't, and there has to be some protection for
this. This protection is only available for type COUNTER which should
be used for this kind of counter anyways. How does it work? Type
counter should never decrease and therefore RRDtool must assume it
compensated for by adding the maximum value of the counter + 1. For our
car this would be:
- Delta = 7 - 999'987 = -999'980 (instead of 1'000'007-999'987=20)
+ Delta = 7 - 999987 = -999980 (instead of 1000007-999987=20)
- Real delta = -999'980 + 999'999 + 1 = 20
+ Real delta = -999980 + 999999 + 1 = 20
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:
- - 32 bits: 0 .. 4'294'967'295
- - 64 bits: 0 .. 18'446'744'073'709'551'615
+ - 32 bits: 0 .. 4294967295
+ - 64 bits: 0 .. 18446744073709551615
If these numbers look strange to you, you can view them in their hex-
adecimal form:
Correction numbers:
- - 32 bits: (4'294'967'295 + 1) = 4'294'967'296
- - 64 bits: (18'446'744'073'709'551'615 + 1)
- - correction1 = 18'446'744'069'414'584'320
+ - 32 bits: (4294967295 + 1) = 4294967296
+ - 64 bits: (18446744073709551615 + 1)
+ - correction1 = 18446744069414584320
- Before: 4'294'967'200
+ Before: 4294967200
Increase: 100
- Should become: 4'294'967'300
+ Should become: 4294967300
But really is: 4
- Delta: -4'294'967'196
- Correction1: -4'294'967'196 + 4'294'967'296 = 100
+ Delta: -4294967196
+ Correction1: -4294967196 + 4294967296 = 100
- Before: 18'446'744'073'709'551'000
+ Before: 18446744073709551000
Increase: 800
- Should become: 18'446'744'073'709'551'800
+ Should become: 18446744073709551800
But really is: 184
- Delta: -18'446'744'073'709'550'816
- Correction1: -18'446'744'073'709'550'816
- + 4'294'967'296 = -18'446'744'069'414'583'520
- Correction2: -18'446'744'069'414'583'520
- + 18'446'744'069'414'584'320 = 800
-
- Before: 18'446'744'073'709'551'615 ( maximum value )
- Increase: 18'446'744'069'414'584'320 ( absurd increase, minimum for
- Should become: 36'893'488'143'124'135'935 this example to work )
- But really is: 18'446'744'069'414'584'319
- Delta: -4'294'967'296
- Correction1: -4'294'967'296 + 4'294'967'296 = 0
+ Delta: -18446744073709550816
+ Correction1: -18446744073709550816
+ + 4294967296 = -18446744069414583520
+ Correction2: -18446744069414583520
+ + 18446744069414584320 = 800
+
+ 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)
- Before: 18'446'744'073'709'551'615 ( maximum value )
- Increase: 18'446'744'069'414'584'319 ( one less increase )
- Should become: 36'893'488'143'124'135'934
- But really is: 18'446'744'069'414'584'318
- Delta: -4'294'967'297
- Correction1: -4'294'967'297 + 4'294'967'296 = -1
- Correction2: -1 + 18'446'744'069'414'584'320 = 18'446'744'069'414'584'319
+ 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
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
time+900: 900 delta=300 time+900: 900 delta=297
Let's create two identical databases. I've chosen the time range
- 920'805'000 to 920'805'900 as this goes very well with the example num-
- bers.
+ 920805000 to 920805900 as this goes very well with the example numbers.
rrdtool create seconds1.rrd \
--start 920804700 \
W\bWR\bRA\bAP\bPU\bUP\bP
It's time now to wrap up this tutorial. We covered all the basics for
- you to be able to work with RRDtool and to read the additional
- documentation available. There is plenty more to discover about RRDtool
- and you will find more and more uses for this package. You can easly
- create graphs using just the examples provided and using only RRDtool.
- You can also use one of the front ends to RRDtool that are available.
+ you to be able to work with RRDtool and to read the additional documen-
+ tation available. There is plenty more to discover about RRDtool and
+ you will find more and more uses for this package. You can easily cre-
+ ate graphs using just the examples provided and using only RRDtool. You
+ can also use one of the front ends to RRDtool that are available.
M\bMA\bAI\bIL\bLI\bIN\bNG\bGL\bLI\bIS\bST\bT
Remember to subscribe to the RRDtool mailing list. Even if you are not
basic questions. They will not only get their answers, but at the same
time learn a whole lot more.
- Alex van den Bogaerdt <alex@ergens.op.het.net>
+ Alex van den Bogaerdt <alex@vandenbogaerdt.nl>
-1.3.5 2008-03-15 RRDTUTORIAL(1)
+1.3.7 2009-02-21 RRDTUTORIAL(1)
diff --git a/doc/rrdupdate.1 b/doc/rrdupdate.1
index 177c5ecc2847200b86eb093f9dd07a2ea4dc3898..6c466024f61bb8df1ea912432a39a792686a378c 100644 (file)
--- a/doc/rrdupdate.1
+++ b/doc/rrdupdate.1
.\" ========================================================================
.\"
.IX Title "RRDUPDATE 1"
-.TH RRDUPDATE 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDUPDATE 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdupdate \- Store a new set of values into the RRD
.SH "SYNOPSIS"
diff --git a/doc/rrdupdate.txt b/doc/rrdupdate.txt
index ef03d591799f4710b64797b064dff49c752d80b7..a60d97c7fc76935ee146655aabed057584df439b 100644 (file)
--- a/doc/rrdupdate.txt
+++ b/doc/rrdupdate.txt
-1.3.5 2008-03-15 RRDUPDATE(1)
+1.3.7 2008-03-15 RRDUPDATE(1)
diff --git a/doc/rrdxport.1 b/doc/rrdxport.1
index d675d5f48832b14ee3d30de9d52beeffb8439580..186dc1fa7347a748feac213f95154fe035ac50b2 100644 (file)
--- a/doc/rrdxport.1
+++ b/doc/rrdxport.1
.\" ========================================================================
.\"
.IX Title "RRDXPORT 1"
-.TH RRDXPORT 1 "2008-03-15" "1.3.5" "rrdtool"
+.TH RRDXPORT 1 "2008-03-15" "1.3.7" "rrdtool"
.SH "NAME"
rrdxport \- Export data in XML format based on data from one or several RRD
.SH "SYNOPSIS"
diff --git a/doc/rrdxport.txt b/doc/rrdxport.txt
index 37c416d4a64fdd1f9856437f74652002f57f2589..1374bce9973198dad3c1555db9de88ae8283d4d9 100644 (file)
--- a/doc/rrdxport.txt
+++ b/doc/rrdxport.txt
-1.3.5 2008-03-15 RRDXPORT(1)
+1.3.7 2008-03-15 RRDXPORT(1)
diff --git a/rrd_config.h.in b/rrd_config.h.in
index 2b756a11c9c02c5a3e70fc5d589423973a0d10cf..7a4bff5b95a5e1044b704d93871c7ffff26000a3 100644 (file)
--- a/rrd_config.h.in
+++ b/rrd_config.h.in
don't. */
#undef HAVE_DECL_POSIX_FADVISE
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRERROR_R
+
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
*/
#undef HAVE_DIRENT_H
/* Define if your <locale.h> file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
+/* Define to 1 if you have the <libgen.h> header file. */
+#undef HAVE_LIBGEN_H
+
/* Define to 1 if you have the <libintl.h> header file. */
#undef HAVE_LIBINTL_H
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
+/* Define to 1 if strerror_r returns char *. */
+#undef STRERROR_R_CHAR_P
+
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
diff --git a/rrdtool.spec b/rrdtool.spec
index 838fe72c583af74213dd0754db3daaff52657b8d..221e17140c6b3b0ea7e6db62cf02426cc3716432 100644 (file)
--- a/rrdtool.spec
+++ b/rrdtool.spec
Summary: Round Robin Database Tool to store and display time-series data
Name: rrdtool
-Version: 1.3.5
+Version: 1.3.7
Release: 1
License: GPLv2+ with exceptions
Group: Applications/Databases
diff --git a/src/Makefile.am b/src/Makefile.am
index f91ae6cdc01b3f907f77d315e59abb662470adb6..74d382f3962e7fd8555f982f471f711423d25a29 100644 (file)
--- a/src/Makefile.am
+++ b/src/Makefile.am
# strftime is here because we do not usually need it. unices have propper
# iso date support
EXTRA_DIST= librrd.pc.in strftime.c strftime.h rrd_getopt.c rrd_getopt1.c rrd_getopt.h \
- win32comp.c rrd_thread_safe_nt.c get_ver.awk librrd.sym.in.in
+ win32comp.c rrd_thread_safe_nt.c get_ver.awk librrd.sym.in.in plbasename.c plbasename.h
librrd.sym: librrd.sym.in
grep -v LIBC_HAS_GETOPT_LONG librrd.sym.in >$@
diff --git a/src/Makefile.in b/src/Makefile.in
index ef9ec66e3147f321e0a9051fb923707f03a644c4..f4eb128fbb358d31d921dd740eee3c9ee1de2a19 100644 (file)
--- a/src/Makefile.in
+++ b/src/Makefile.in
# strftime is here because we do not usually need it. unices have propper
# iso date support
EXTRA_DIST = librrd.pc.in strftime.c strftime.h rrd_getopt.c rrd_getopt1.c rrd_getopt.h \
- win32comp.c rrd_thread_safe_nt.c get_ver.awk librrd.sym.in.in
+ win32comp.c rrd_thread_safe_nt.c get_ver.awk librrd.sym.in.in plbasename.c plbasename.h
all: all-am
diff --git a/src/plbasename.c b/src/plbasename.c
--- /dev/null
+++ b/src/plbasename.c
@@ -0,0 +1,211 @@
+#ifdef WIN32
+/*
+ *
+ * Cross-platform basename/dirname
+ *
+ * Copyright 2005 Syd Logan, All Rights Reserved
+ *
+ * This code is distributed without warranty. You are free to use this
+ * code for any purpose, however, if this code is republished or
+ * redistributed in its original form, as hardcopy or electronically,
+ * then you must include this copyright notice along with the code.
+ *
+ */
+
+// minor changes 2008 by Stefan Ludewig stefan.ludewig@exitgames.com for WIN32 version RRDtool
+
+#include <memory.h>
+#include <stdlib.h>
+#include "plbasename.h"
+#include <string.h>
+#if defined(TEST)
+#include <stdio.h>
+#endif
+
+#if defined(__cplusplus)
+
+extern "C" {
+
+#endif
+
+const char *
+PL_basename(const char *name)
+{
+ const char *base;
+ char *p;
+ static char *tmp = NULL;
+ int len;
+
+ if (tmp) {
+ free(tmp);
+ tmp = NULL;
+ }
+
+ if (!name || !strcmp(name, ""))
+ return "";
+
+ if (!strcmp(name, "/"))
+ return "/";
+
+ len = strlen(name);
+ if (name[len - 1] == '/') {
+ // ditch the trailing '/'
+ p = tmp = (char*)malloc(len);
+ strncpy(p, name, len - 1);
+ } else {
+ p = (char *) name;
+ }
+
+ for (base = p; *p; p++)
+ if (*p == '/')
+ base = p + 1;
+
+ return base;
+}
+
+const char *
+PL_dirname(const char *name)
+{
+ static char *ret = NULL;
+ int len;
+ int size = 0;
+ const char *p;
+
+ if (ret) {
+ free(ret);
+ ret = NULL;
+ }
+
+ if (!name || !strcmp(name, "") || !strstr(name, "/"))
+ return(".");
+
+ if (!strcmp(name, "/"))
+ return(name);
+
+ // find the last slash in the string
+
+ len = strlen(name);
+ p = &name[len - 1];
+
+ if (*p == '/') p--; // skip the trailing /
+
+ while (p != name && *p != '/') p--;
+
+ size = p - name;
+ if (size) {
+ ret = (char*)malloc(size + 1);
+ memcpy(ret, name, size);
+ ret[size] = '\0';
+ } else if (*p == '/')
+ return "/";
+ else
+ return "";
+
+ return (const char *) ret;
+}
+
+#if defined(__cplusplus)
+
+}
+
+#endif
+
+#if defined(TEST)
+
+int
+main(int argc, char *argv[])
+{
+/* run the following tests:
+
+ path dirname basename
+ "/usr/lib" "/usr" "lib"
+ "/usr/" "/" "usr"
+ "usr" "." "usr"
+ "/" "/" "/"
+ "." "." "."
+ ".." "." ".."
+ NULL "." ""
+ "" "." ""
+ "./.." "." ".."
+
+ These results can be verified by running the unix commands
+ basename(1) and dirname(1). One tweek to the test strategy
+ used here would be, on darwin and linux, to shell out to
+ get the expected results vs hardcoding.
+*/
+ if (!strcmp(PL_basename("/usr/lib"), "lib"))
+ printf("PL_basename /usr/lib passed\n");
+ else
+ printf("PL_basename /usr/lib failed expected lib\n");
+ if (!strcmp(PL_dirname("/usr/lib"), "/usr"))
+ printf("PL_dirname /usr/lib passed\n");
+ else
+ printf("PL_dirname /usr/lib failed expected /usr\n");
+ if (!strcmp(PL_basename("/usr/"), "usr"))
+ printf("PL_basename /usr/ passed\n");
+ else
+ printf("PL_basename /usr/ failed expected usr\n");
+ if (!strcmp(PL_dirname("/usr/"), "/"))
+ printf("PL_dirname /usr/ passed\n");
+ else
+ printf("PL_dirname /usr/ failed expected /\n");
+ if (!strcmp(PL_basename("usr"), "usr"))
+ printf("PL_basename usr passed\n");
+ else
+ printf("PL_basename usr failed expected usr\n");
+ if (!strcmp(PL_dirname("usr"), "."))
+ printf("PL_dirname usr passed\n");
+ else
+ printf("PL_dirname usr failed expected .\n");
+ if (!strcmp(PL_basename("/"), "/"))
+ printf("PL_basename / passed\n");
+ else
+ printf("PL_basename / failed expected /\n");
+ if (!strcmp(PL_dirname("/"), "/"))
+ printf("PL_dirname / passed\n");
+ else
+ printf("PL_dirname / failed expected /\n");
+ if (!strcmp(PL_basename("."), "."))
+ printf("PL_basename . passed\n");
+ else
+ printf("PL_basename . failed\n");
+ if (!strcmp(PL_dirname("."), "."))
+ printf("PL_dirname . passed\n");
+ else
+ printf("PL_dirname . failed expected .\n");
+ if (!strcmp(PL_basename(".."), ".."))
+ printf("PL_basename .. passed\n");
+ else
+ printf("PL_basename .. failed expected ..\n");
+ if (!strcmp(PL_dirname(".."), "."))
+ printf("PL_dirname .. passed\n");
+ else
+ printf("PL_dirname .. failed expected .\n");
+ if (!strcmp(PL_basename(NULL), ""))
+ printf("PL_basename NULL passed\n");
+ else
+ printf("PL_basename NULL failed expected \"\"\n");
+ if (!strcmp(PL_dirname(NULL), "."))
+ printf("PL_dirname NULL passed\n");
+ else
+ printf("PL_dirname NULL failed expected .\n");
+ if (!strcmp(PL_basename(""), ""))
+ printf("PL_basename \"\" passed\n");
+ else
+ printf("PL_basename \"\" failed expected \"\"\n");
+ if (!strcmp(PL_dirname(""), "."))
+ printf("PL_dirname \"\" passed\n");
+ else
+ printf("PL_dirname \"\" failed expected .\n");
+
+ if (!strcmp(PL_basename("./.."), ".."))
+ printf("PL_basename ./.. passed\n");
+ else
+ printf("PL_basename ./.. failed expected ..\n");
+ if (!strcmp(PL_dirname("./.."), "."))
+ printf("PL_dirname ./.. passed\n");
+ else
+ printf("PL_dirname ./.. failed expected .\n");
+}
+#endif
+#endif // WIN32
diff --git a/src/plbasename.h b/src/plbasename.h
--- /dev/null
+++ b/src/plbasename.h
@@ -0,0 +1,45 @@
+#ifdef WIN32
+/*
+ *
+ * Cross-platform basename/dirname
+ *
+ * Copyright 2005 Syd Logan, All Rights Reserved
+ *
+ * This code is distributed without warranty. You are free to use this
+ * code for any purpose, however, if this code is republished or
+ * redistributed in its original form, as hardcopy or electronically,
+ * then you must include this copyright notice along with the code.
+ *
+ */
+
+// minor changes 2008 by Stefan Ludewig stefan.ludewig@exitgames.com for WIN32 version RRDtool
+
+#if !defined(__PL_BASENAME_H__)
+#define __PL_BASENAME_H__
+
+/*
+ path dirname basename
+ "/usr/lib" "/usr" "lib"
+ "/usr/" "/" "usr"
+ "usr" "." "usr"
+ "/" "/" "/"
+ "." "." "."
+ ".." "." ".."
+*/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+const char *PL_basename(const char *name);
+const char *PL_dirname(const char *name);
+
+#define basename(name) ((char*)PL_basename(name))
+#define dirname(name) ((char*)PL_dirname(name))
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+#endif // WIN32
diff --git a/src/pngsize.c b/src/pngsize.c
index 7369549b003c386df789bf2d339c4113d01ca10b..9cd29e536058fd7f2e0676fbbc3608f67d8574bc 100644 (file)
--- a/src/pngsize.c
+++ b/src/pngsize.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* pngsize.c determine the size of a PNG image
*****************************************************************************/
diff --git a/src/rrd.h b/src/rrd.h
index 7e04636d6e7b7769220f403f06c80eb4388447fb..cf9a303494932070f429e7379830466401f82d1d 100644 (file)
--- a/src/rrd.h
+++ b/src/rrd.h
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrdlib.h Public header file for librrd
*****************************************************************************
- * $Id: rrd.h 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd.h 1781 2009-04-07 07:31:53Z oetiker $
* $Log$
* Revision 1.9 2005/02/13 16:13:33 oetiker
* let rrd_graph return the actual value range it picked ...
diff --git a/src/rrd_cgi.c b/src/rrd_cgi.c
index cb9ab722f61926627490690f3a6e28751741fbcc..ce619af1022b3c0a3e5e41bb57c26d14b51f69fc 100644 (file)
--- a/src/rrd_cgi.c
+++ b/src/rrd_cgi.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_cgi.c RRD Web Page Generator
*****************************************************************************/
if (calcpr) {
free(calcpr);
}
+ calcpr=NULL;
}
}
diff --git a/src/rrd_create.c b/src/rrd_create.c
index bffad73c75123ef1721f7e1403e968755b5fc16a..a31f23e33cb8ffcc414d2e9c2733b245f18de218 100644 (file)
--- a/src/rrd_create.c
+++ b/src/rrd_create.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_create.c creates new rrds
*****************************************************************************/
diff --git a/src/rrd_diff.c b/src/rrd_diff.c
index fc93f5e0dec2c08019f1e81be6ae7020270258e4..ad671adabebd5e914e005ab90b39acf1b277cfc1 100644 (file)
--- a/src/rrd_diff.c
+++ b/src/rrd_diff.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
* This code is stolen from rateup (mrtg-2.x) by Dave Rand
*****************************************************************************
* diff calculate the difference between two very long integers available as
* strings
*****************************************************************************
- * $Id: rrd_diff.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_diff.c 1781 2009-04-07 07:31:53Z oetiker $
* $Log$
* Revision 1.4 2003/03/10 00:30:34 oetiker
* handle cases with two negative numbers
diff --git a/src/rrd_dump.c b/src/rrd_dump.c
index 032748a38797ed6c5c1a1b90717ae820815a21fc..c2e3e5e07707d6a326596f66f8a9d68cfc3c5fa1 100644 (file)
--- a/src/rrd_dump.c
+++ b/src/rrd_dump.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_dump Display a RRD
*****************************************************************************
- * $Id: rrd_dump.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_dump.c 1781 2009-04-07 07:31:53Z oetiker $
* $Log$
* Revision 1.7 2004/05/25 20:53:21 oetiker
* prevent small leak when resources are exhausted -- Mike Slifcak
#include <stdlib.h>
#endif
+
#include "rrd_tool.h"
#include "rrd_rpncalc.h"
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
#if !(defined(NETWARE) || defined(WIN32))
extern char *tzname[2];
#endif
rrd_t rrd;
rrd_value_t value;
struct tm tm;
-
+ char *old_locale = "";
rrd_file = rrd_open(filename, &rrd, RRD_READONLY | RRD_READAHEAD);
if (rrd_file == NULL) {
rrd_free(&rrd);
} else {
out_file = stdout;
}
-
+#ifdef HAVE_SETLOCALE
+ old_locale = setlocale(LC_NUMERIC, "C");
+#endif
if (!opt_noheader) {
fputs("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n", out_file);
fputs
}
fprintf(out_file, "\t<step> %lu </step> <!-- Seconds -->\n",
rrd.stat_head->pdp_step);
-#if HAVE_STRFTIME
+#ifdef HAVE_STRFTIME
localtime_r(&rrd.live_head->last_up, &tm);
strftime(somestring, 200, "%Y-%m-%d %H:%M:%S %Z", &tm);
#else
rrd_seek(rrd_file, (rra_start + (rrd.rra_ptr[i].cur_row + 1)
* rrd.stat_head->ds_cnt
* sizeof(rrd_value_t)), SEEK_SET);
- timer = -(rrd.rra_def[i].row_cnt - 1);
+ timer = - (long)(rrd.rra_def[i].row_cnt - 1);
ii = rrd.rra_ptr[i].cur_row;
for (ix = 0; ix < rrd.rra_def[i].row_cnt; ix++) {
ii++;
if (out_file != stdout) {
fclose(out_file);
}
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_NUMERIC, old_locale);
+#endif
return rrd_close(rrd_file);
}
diff --git a/src/rrd_error.c b/src/rrd_error.c
index abe12c56decbdb1398acc699ea8e4579dc8a8cd8..ef99e8a22abacb393aefb4d872ef0c4baa9616b7 100644 (file)
--- a/src/rrd_error.c
+++ b/src/rrd_error.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_error.c Common Header File
*****************************************************************************
- * $Id: rrd_error.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_error.c 1781 2009-04-07 07:31:53Z oetiker $
* $Log$
* Revision 1.4 2003/02/22 21:57:03 oetiker
* a patch to avoid a memory leak and a Makefile.am patch to
diff --git a/src/rrd_fetch.c b/src/rrd_fetch.c
index d02acf6126f2338d4a19b1803e8157bf4ab588c5..7c2708e73e3f33df8677c816ebf91ed23c6b8346 100644 (file)
--- a/src/rrd_fetch.c
+++ b/src/rrd_fetch.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_fetch.c read date from an rrd to use for further processing
*****************************************************************************
- * $Id: rrd_fetch.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_fetch.c 1781 2009-04-07 07:31:53Z oetiker $
* $Log$
* Revision 1.8 2004/05/18 18:53:03 oetiker
* big spell checking patch -- slif@bellsouth.net
}
rrd_close(rrd_file);
+ rrd_free(&rrd);
+
return (0);
err_free_data:
free(*data);
diff --git a/src/rrd_first.c b/src/rrd_first.c
index cd01af4b3515cd95f53415af4712be8361969bd4..6a951a29a8daee362566a23c1fc3d0de32422d1a 100644 (file)
--- a/src/rrd_first.c
+++ b/src/rrd_first.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_first Return
*****************************************************************************
(rra_start +
(rrd.rra_ptr[rraindex].cur_row + 1) *
rrd.stat_head->ds_cnt * sizeof(rrd_value_t)), SEEK_SET);
- timer = -(rrd.rra_def[rraindex].row_cnt - 1);
+ timer = -(long)(rrd.rra_def[rraindex].row_cnt - 1);
if (rrd.rra_ptr[rraindex].cur_row + 1 > rrd.rra_def[rraindex].row_cnt) {
rrd_seek(rrd_file, rra_start, SEEK_SET);
}
diff --git a/src/rrd_format.c b/src/rrd_format.c
index fbf7c6964a811b44aecebf9337f9c4fc26d3057d..19bf105b5a1cea1b72686637064a674493c1021f 100644 (file)
--- a/src/rrd_format.c
+++ b/src/rrd_format.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_format.c RRD Database Format helper functions
*****************************************************************************
- * $Id: rrd_format.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_format.c 1781 2009-04-07 07:31:53Z oetiker $
* $Log$
* Revision 1.5 2004/05/18 18:53:03 oetiker
* big spell checking patch -- slif@bellsouth.net
diff --git a/src/rrd_format.h b/src/rrd_format.h
index 06adcc4e69139af293cd8fc17aef0c39b71f0a0e..524b91e2e21e2e4d5551bf2e840067458798b62f 100644 (file)
--- a/src/rrd_format.h
+++ b/src/rrd_format.h
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_format.h RRD Database Format header
*****************************************************************************/
diff --git a/src/rrd_gfx.c b/src/rrd_gfx.c
index 941cfd1be22239db8534b62354928b13d2aa4e9d..4f0cd4224fde1fad1ec47ee81d60e945bdb569a4 100644 (file)
--- a/src/rrd_gfx.c
+++ b/src/rrd_gfx.c
/****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
****************************************************************************
* rrd_gfx.c graphics wrapper for rrdtool
**************************************************************************/
diff --git a/src/rrd_graph.c b/src/rrd_graph.c
index 03230776dc8cd82046d3fbb4b0f4bc53a3d6646d..0d25f99b01f601193288eb7f3acc9fff94f329d0 100644 (file)
--- a/src/rrd_graph.c
+++ b/src/rrd_graph.c
/****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
****************************************************************************
* rrd__graph.c produce graphs from data in rrdfiles
****************************************************************************/
#ifdef WIN32
#include "strftime.h"
+#include "plbasename.h"
#endif
+
#include "rrd_tool.h"
#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
graph_desc_t *lastgdes = NULL;
rrd_infoval_t info;
-// PangoFontMap *font_map = pango_cairo_font_map_get_default();
- /* if we want and can be lazy ... quit now */
- if (lazy) {
- info.u_cnt = im->ximg;
- grinfo_push(im, sprintf_alloc("image_width"), RD_I_CNT, info);
- info.u_cnt = im->yimg;
- grinfo_push(im, sprintf_alloc("image_height"), RD_I_CNT, info);
- return 0;
- }
/* pull the data from the rrd files ... */
if (data_fetch(im) == -1)
return -1;
if (i < 0)
return -1;
- if ((i == 0) || lazy)
+ if (i == 0)
return 0;
/**************************************************************
grinfo_push(im, sprintf_alloc("image_width"), RD_I_CNT, info);
info.u_cnt = im->yimg;
grinfo_push(im, sprintf_alloc("image_height"), RD_I_CNT, info);
+ info.u_cnt = im->start;
+ grinfo_push(im, sprintf_alloc("graph_start"), RD_I_CNT, info);
+ info.u_cnt = im->end;
+ grinfo_push(im, sprintf_alloc("graph_end"), RD_I_CNT, info);
+
+ /* if we want and can be lazy ... quit now */
+ if (lazy)
+ return 0;
/* get actual drawing data and find min and max values */
if (data_proc(im) == -1)
if (im->gdes[i].yrule > 0) {
gfx_line(im,
im->xorigin + ii,
- im->yorigin,
+ im->yorigin + 1.0,
im->xorigin + ii,
im->yorigin -
im->gdes[i].yrule *
} else if (im->gdes[i].yrule < 0) {
gfx_line(im,
im->xorigin + ii,
- im->yorigin - im->ysize,
+ im->yorigin - im->ysize - 1.0,
im->xorigin + ii,
- im->yorigin - (1 -
+ im->yorigin - im->ysize -
im->gdes[i].
- yrule) *
+ yrule *
im->ysize, 1.0, im->gdes[i].col);
}
}
*ymax = 0;
while (walker) {
if (strcmp(walker->key, "image_width") == 0) {
- *xsize = walker->value.u_int;
+ *xsize = walker->value.u_cnt;
} else if (strcmp(walker->key, "image_height") == 0) {
- *ysize = walker->value.u_int;
+ *ysize = walker->value.u_cnt;
} else if (strcmp(walker->key, "value_min") == 0) {
*ymin = walker->value.u_val;
} else if (strcmp(walker->key, "value_max") == 0) {
diff --git a/src/rrd_graph.h b/src/rrd_graph.h
index a42b20b60dee845b2a118fd5b46c4a6dd3027c58..1cab51e2242d1d6b04ad59e9efab63ff91966f7e 100644 (file)
--- a/src/rrd_graph.h
+++ b/src/rrd_graph.h
#include <cairo-ps.h>
#include <pango/pangocairo.h>
+#ifdef HAVE_LIBGEN_H
+/* for basename */
+# include <libgen.h>
+#endif
+
#include "rrd_tool.h"
#include "rrd_rpncalc.h"
diff --git a/src/rrd_graph_helper.c b/src/rrd_graph_helper.c
index 2add7ad934fbd0157f15d668f50546c8f2182097..31ea023518e2aa2a5d2cd1515dc8e5fcd7b81caf 100644 (file)
--- a/src/rrd_graph_helper.c
+++ b/src/rrd_graph_helper.c
/****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
****************************************************************************
* rrd_graph_helper.c commandline parser functions
* this code initially written by Alex van den Bogaerdt
diff --git a/src/rrd_hw.c b/src/rrd_hw.c
index e95fa082ae99243f15298eceaf1c599ecb64a55b..e20aea67d20beb62af64a16b05446d116b7520f8 100644 (file)
--- a/src/rrd_hw.c
+++ b/src/rrd_hw.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_hw.c : Support for Holt-Winters Smoothing/ Aberrant Behavior Detection
*****************************************************************************
free(rrd_values);
return -1;
}
- rrd_flush(rrd_file);
+
/* could read all data in a single block, but we need to
* check for NA values */
for (i = 0; i < row_count; ++i) {
baseline[j];
}
/* flush cdp to disk */
- rrd_flush(rrd_file);
if (rrd_seek(rrd_file, sizeof(stat_head_t) +
rrd->stat_head->ds_cnt * sizeof(ds_def_t) +
rrd->stat_head->rra_cnt * sizeof(rra_def_t) +
/* endif CF_SEASONAL */
/* flush updated values to disk */
- rrd_flush(rrd_file);
if (rrd_seek(rrd_file, rra_start, SEEK_SET)) {
rrd_set_error("apply_smoother: seek to pos %d failed", rra_start);
free(rrd_values);
return -1;
}
- rrd_flush(rrd_file);
free(rrd_values);
free(baseline);
return 0;
diff --git a/src/rrd_hw.h b/src/rrd_hw.h
index fbb55b519e1674032c6460dbffb57114e5c9ae6d..8ae7346c0463a10eb1ccd93de7aec2233de09cf1 100644 (file)
--- a/src/rrd_hw.h
+++ b/src/rrd_hw.h
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_hw.h : Support for Holt-Winters Smoothing/ Aberrant Behavior Detection
*****************************************************************************/
diff --git a/src/rrd_i18n.h b/src/rrd_i18n.h
index bb777ee45cdd22e29d75a207f2d567dc477ae606..1099041d2c3110bb216cef7ce572f9148a9e3ae1 100644 (file)
--- a/src/rrd_i18n.h
+++ b/src/rrd_i18n.h
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Takao Fujiwara, 2008
+ * RRDtool 1.3.7 Copyright by Takao Fujiwara, 2008
*****************************************************************************
* rrd_i18n.h Common Header File
*****************************************************************************/
diff --git a/src/rrd_info.c b/src/rrd_info.c
index bf1c2c2e298e19d56f2113f957284420ca03a11f..d4e6219040debe3a350b20a891e7ef20ff7b64ed 100644 (file)
--- a/src/rrd_info.c
+++ b/src/rrd_info.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_info Get Information about the configuration of an RRD
*****************************************************************************/
index 01707c764f10d7dc64bb8938077a725ffea96131..105ec718dcdca6c9c457ec11ef6bb92b151911e9 100644 (file)
--- a/src/rrd_is_thread_safe.h
+++ b/src/rrd_is_thread_safe.h
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
*****************************************************************************
* rrd_is_thread_safe.c Poisons some nasty function calls using GNU cpp
*****************************************************************************
- * $Id: rrd_is_thread_safe.h 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_is_thread_safe.h 1781 2009-04-07 07:31:53Z oetiker $
*************************************************************************** */
#ifndef _RRD_IS_THREAD_SAFE_H
diff --git a/src/rrd_last.c b/src/rrd_last.c
index 83603c9e60ca8b98c171e3df07ed5f06b5362c6f..cceeb4c4fac135b4c6997fd54d8ce8220ec80af6 100644 (file)
--- a/src/rrd_last.c
+++ b/src/rrd_last.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_last.c
*****************************************************************************
diff --git a/src/rrd_lastupdate.c b/src/rrd_lastupdate.c
index 1c769dd3fda5f8ad0e014e02a5a9189928702531..7e843f4e095ff9da26ae87245a4c29706b1fdcba 100644 (file)
--- a/src/rrd_lastupdate.c
+++ b/src/rrd_lastupdate.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_lastupdate Get the last datum entered for each DS
*****************************************************************************/
index 5c1bee8f465ba5d2c85726bea7c899e8a4f3e9b4..65c025c62786d18ddb6c5bdc3ff37d73b9ced4c6 100644 (file)
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
* rrd_not_thread_safe.c Contains routines used when thread safety is not
* an issue
*****************************************************************************
- * $Id: rrd_not_thread_safe.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_not_thread_safe.c 1781 2009-04-07 07:31:53Z oetiker $
*************************************************************************** */
#include "rrd.h"
#include "rrd_tool.h"
diff --git a/src/rrd_open.c b/src/rrd_open.c
index f825ad7a4ead5b887e4c80f3c08dd7ee371e7544..a19d5e0d7c8406057a372c647ee4b1bbd1660ab0 100644 (file)
--- a/src/rrd_open.c
+++ b/src/rrd_open.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_open.c Open an RRD File
*****************************************************************************
- * $Id: rrd_open.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_open.c 1781 2009-04-07 07:31:53Z oetiker $
*****************************************************************************/
#include "rrd_tool.h"
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
+#include <utime.h>
#endif
#define MEMBLK 8192
diff --git a/src/rrd_resize.c b/src/rrd_resize.c
index 322de046f043ef5f6d132062d0d7eb6b86c2bfaa..f53d3c58eebff00006e1a344374dc039f1f961ee 100644 (file)
--- a/src/rrd_resize.c
+++ b/src/rrd_resize.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_resize.c Alters size of an RRA
*****************************************************************************
rrd_set_error("Can't create '%s': %s", outfilename,
rrd_strerror(errno));
rrd_free(&rrdnew);
+ rrd_free(&rrdold);
+ rrd_close(rrd_file);
+ rrd_close(rrd_out_file);
return (-1);
}
if (rrd_lock(rrd_out_file) != 0) {
rrd_set_error("could not lock new RRD");
+ rrd_free(&rrdnew);
rrd_free(&rrdold);
rrd_close(rrd_file);
rrd_close(rrd_out_file);
case 3:
break;
case 1:
- rrdold.stat_head->version[3] = '3';
+ rrdnew.stat_head->version[3] = '3';
break;
default:
rrd_set_error("Do not know how to handle RRD version %s",
rrd_write(rrd_out_file, &buffer, sizeof(rrd_value_t) * 1);
l--;
}
-#ifndef HAVE_MMAP
buffer = DNAN;
l = rrdnew.stat_head->ds_cnt * modify;
while (l > 0) {
rrd_write(rrd_out_file, &buffer, sizeof(rrd_value_t) * 1);
l--;
}
-#else
- /* for the mmap case, we did already fill the whole new file with DNAN
- * before we copied the old values, so nothing to do here. */
-#endif
} else {
/* Removing rows. Normally this would be just after the cursor
** however this may also mean that we wrap to the beginning of
diff --git a/src/rrd_restore.c b/src/rrd_restore.c
index e7fa6d6884e8473c153a7b853dd8b91d9efa38bc..6e5d276146fe87c70fcc2fdc64ba2eefedde925d 100644 (file)
--- a/src/rrd_restore.c
+++ b/src/rrd_restore.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
* This file: Copyright 2008 Florian octo Forster
* Distributed under the GPL
*****************************************************************************
* rrd_restore.c Contains logic to parse XML input and create an RRD file
*****************************************************************************
- * $Id: rrd_restore.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_restore.c 1781 2009-04-07 07:31:53Z oetiker $
*************************************************************************** */
/*
diff --git a/src/rrd_rpncalc.c b/src/rrd_rpncalc.c
index 06b91bd72eba92b46ebdb2b445d721fc563f671c..fd56ffbfd92b5117f47f9ca4674b05f6bee1211b 100644 (file)
--- a/src/rrd_rpncalc.c
+++ b/src/rrd_rpncalc.c
/****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
****************************************************************************
* rrd_rpncalc.c RPN calculator functions
****************************************************************************/
diff --git a/src/rrd_rpncalc.h b/src/rrd_rpncalc.h
index 9dea443055383d0c236d1cea30750f8dc3a1ccb6..f15aa25b5c62cb3752fe6de53f596dd631056184 100644 (file)
--- a/src/rrd_rpncalc.h
+++ b/src/rrd_rpncalc.h
/****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
****************************************************************************
* rrd_rpncalc.h RPN calculator functions
****************************************************************************/
diff --git a/src/rrd_thread_safe.c b/src/rrd_thread_safe.c
index 16399260fe17da2c226e1b0b4c0ed309df63a87e..32355e4e468c42070b05931daed054b550eb7329 100644 (file)
--- a/src/rrd_thread_safe.c
+++ b/src/rrd_thread_safe.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
*****************************************************************************
* rrd_thread_safe.c Contains routines used when thread safety is required
*****************************************************************************
- * $Id: rrd_thread_safe.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_thread_safe.c 1781 2009-04-07 07:31:53Z oetiker $
*************************************************************************** */
#include <pthread.h>
int err)
{
rrd_context_t *ctx = rrd_get_context();
+ char *ret = "unknown error";
- if (strerror_r(err, ctx->lib_errstr, sizeof(ctx->lib_errstr)))
- return "strerror_r failed. sorry!";
- else
- return ctx->lib_errstr;
+ *ctx->lib_errstr = '\0';
+
+ /* Even though POSIX/XSI requires "strerror_r" to return an "int", some
+ * systems (e.g. the GNU libc) return a "char *" _and_ ignore the second
+ * argument ... -tokkee */
+#if STRERROR_R_CHAR_P
+ ret = strerror_r(err, ctx->lib_errstr, sizeof(ctx->lib_errstr));
+ if ((! ret) || (*ret == '\0')) {
+ if (*ctx->lib_errstr != '\0')
+ ret = ctx->lib_errstr;
+ else {
+ /* according to the manpage this should not happen -
+ let's handle it somehow sanely anyway */
+ snprintf(ctx->lib_errstr, sizeof(ctx->lib_errstr),
+ "unknown error %i - strerror_r did not return anything",
+ err);
+ ctx->lib_errstr[sizeof(ctx->lib_errstr) - 1] = '\0';
+ ret = ctx->lib_errstr;
+ }
+ }
+#else /* ! STRERROR_R_CHAR_P */
+ if (strerror_r(err, ctx->lib_errstr, sizeof(ctx->lib_errstr))) {
+ snprintf(ctx->lib_errstr, sizeof(ctx->lib_errstr),
+ "unknown error %i - strerror_r returned with errno = %i",
+ err, errno);
+ ctx->lib_errstr[sizeof(ctx->lib_errstr) - 1] = '\0';
+ }
+ ret = ctx->lib_errstr;
+#endif
+ return ret;
}
#else
#undef strerror
index a0ce2409b8125d75562a6b2eee0dd8b03700b041..ed33e897948c24a9452a61f0900f42231b6b1336 100644 (file)
--- a/src/rrd_thread_safe_nt.c
+++ b/src/rrd_thread_safe_nt.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
* rrd_thread_safe.c Contains routines used when thread safety is required
* for win32
*****************************************************************************
- * $Id: rrd_thread_safe_nt.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_thread_safe_nt.c 1781 2009-04-07 07:31:53Z oetiker $
*************************************************************************** */
#include <windows.h>
diff --git a/src/rrd_tool.c b/src/rrd_tool.c
index 09bdbbea48f76890ab1fb62260bc050e9b31d4dd..3df092b3d4378ed33620838c8a39024ab6a040bc 100644 (file)
--- a/src/rrd_tool.c
+++ b/src/rrd_tool.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_tool.c Startup wrapper
*****************************************************************************/
const char *help_main =
N_("RRDtool %s"
- " Copyright 1997-2008 by Tobias Oetiker <tobi@oetiker.ch>\n"
+ " Copyright 1997-2009 by Tobias Oetiker <tobi@oetiker.ch>\n"
" Compiled %s %s\n\n"
"Usage: rrdtool [options] command command_options\n\n");
diff --git a/src/rrd_tool.h b/src/rrd_tool.h
index 94f255e0255a7e316e03681699f7ac24d8cf4f78..86787777e0bbff4ff0bbe419901320b56e8cfe3b 100644 (file)
--- a/src/rrd_tool.h
+++ b/src/rrd_tool.h
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_tool.h Common Header File
*****************************************************************************/
diff --git a/src/rrd_tune.c b/src/rrd_tune.c
index 1f4a62ea62be9a3a10d6067fbae04178c77c5f8d..2b7298eeccb7a625ca647b4c44e9d8bf7e185480 100644 (file)
--- a/src/rrd_tune.c
+++ b/src/rrd_tune.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* change header parameters of an rrd
*****************************************************************************
- * $Id: rrd_tune.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_tune.c 1781 2009-04-07 07:31:53Z oetiker $
* $Log$
* Revision 1.6 2004/05/26 22:11:12 oetiker
* reduce compiler warnings. Many small fixes. -- Mike Slifcak <slif@bellsouth.net>
diff --git a/src/rrd_update.c b/src/rrd_update.c
index 4db346ebb29a56411c949c35fbe51bd87a02c2fb..ebc0f2ce8ebb6b67fc21e4748234cb7cd8151d10 100644 (file)
--- a/src/rrd_update.c
+++ b/src/rrd_update.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_update.c RRD Update Function
*****************************************************************************
- * $Id: rrd_update.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrd_update.c 1781 2009-04-07 07:31:53Z oetiker $
*****************************************************************************/
#include "rrd_tool.h"
/* append info to the return hash */
*pcdp_summary = rrd_info_push(*pcdp_summary,
sprintf_alloc
- ("[%d]RRA[%s][%lu]DS[%s]", rra_time,
+ ("[%lli]RRA[%s][%lu]DS[%s]", (long long)rra_time,
rrd->rra_def[rra_idx].cf_nam,
rrd->rra_def[rra_idx].pdp_cnt,
rrd->ds_def[ds_idx].ds_nam),
diff --git a/src/rrd_version.c b/src/rrd_version.c
index 7eb9d4207983d1d48b23aca2a347b011583b381c..5c59dec30a48f2a36388b7d8d874f75455a883db 100644 (file)
--- a/src/rrd_version.c
+++ b/src/rrd_version.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrd_version Return
*****************************************************************************
diff --git a/src/rrd_xport.c b/src/rrd_xport.c
index 66cb5a1b717006ed65fd1c9de4c69ff94074f4af..efb1cee6b9112cb31ea0f140e2865b290c746c33 100644 (file)
--- a/src/rrd_xport.c
+++ b/src/rrd_xport.c
/****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
****************************************************************************
* rrd_xport.c export RRD data
****************************************************************************/
case GF_XPORT:
ref_list[xport_counter++] = i;
*step_list_ptr = im->gdes[im->gdes[i].vidx].step;
- printf("%s:%lu\n",im->gdes[i].legend,*step_list_ptr);
+ /* printf("%s:%lu\n",im->gdes[i].legend,*step_list_ptr); */
*step_list_ptr++;
/* reserve room for one legend entry */
/* is FMT_LEG_LEN + 5 the correct size? */
*step_list_ptr=0;
/* find a common step */
*step = lcd(step_list);
- printf("step: %lu\n",*step);
+ /* printf("step: %lu\n",*step); */
free(step_list);
*start = im->start - im->start % (*step);
diff --git a/src/rrd_xport.h b/src/rrd_xport.h
index 72b31040d7e8dd4b4475a2af813ce9b438ed8fae..85dd072c4eb0f1218199b136fd9eff3946581319 100644 (file)
--- a/src/rrd_xport.h
+++ b/src/rrd_xport.h
/****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
****************************************************************************
* rrd_xport.h contains XML related constants
****************************************************************************/
diff --git a/src/rrdupdate.c b/src/rrdupdate.c
index d872bf837678f4c27efdeee41002419ce278f211..8f32d5e95758f84dbea80d5b02c27b7f74a765c3 100644 (file)
--- a/src/rrdupdate.c
+++ b/src/rrdupdate.c
/*****************************************************************************
- * RRDtool 1.3.5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.7 Copyright by Tobi Oetiker, 1997-2009
*****************************************************************************
* rrdupdate.c Main program for the (standalone) rrdupdate utility
*****************************************************************************
- * $Id: rrdupdate.c 1710 2008-12-15 22:06:22Z oetiker $
+ * $Id: rrdupdate.c 1781 2009-04-07 07:31:53Z oetiker $
*****************************************************************************/
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) && !defined(HAVE_CONFIG_H)
diff --git a/win32/rrd.sln b/win32/rrd.sln
--- /dev/null
+++ b/win32/rrd.sln
@@ -0,0 +1,29 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 10.00\r
+# Visual Studio 2008\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rrdlib", "rrdlib.vcproj", "{CC158E1D-1364-43CA-9B2D-4AF54225C7CA}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rrdtool", "rrdtool.vcproj", "{11CD05F8-E5E1-476E-A75F-A112655D4E94}"\r
+ ProjectSection(ProjectDependencies) = postProject\r
+ {CC158E1D-1364-43CA-9B2D-4AF54225C7CA} = {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}\r
+ EndProjectSection\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|Win32 = Debug|Win32\r
+ Release|Win32 = Release|Win32\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Debug|Win32.Build.0 = Debug|Win32\r
+ {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Release|Win32.ActiveCfg = Release|Win32\r
+ {CC158E1D-1364-43CA-9B2D-4AF54225C7CA}.Release|Win32.Build.0 = Release|Win32\r
+ {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Debug|Win32.Build.0 = Debug|Win32\r
+ {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Release|Win32.ActiveCfg = Release|Win32\r
+ {11CD05F8-E5E1-476E-A75F-A112655D4E94}.Release|Win32.Build.0 = Release|Win32\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+EndGlobal\r
diff --git a/win32/rrdlib.vcproj b/win32/rrdlib.vcproj
index 00a8b01265dc539c7431b404f3d39c3aa3c7caa6..dd5947e67c77fc329c291f5520d6fa3337a03d04 100644 (file)
--- a/win32/rrdlib.vcproj
+++ b/win32/rrdlib.vcproj
RelativePath="..\src\hash_32.c"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\src\plbasename.c"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\src\pngsize.c"\r
>\r
RelativePath="..\src\fnv.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\src\plbasename.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\src\rrd.h"\r
>\r