Tobias Oetiker <tobi@oetiker.ch>
=cut
+
#' this is to make cperl.el happy
use strict;
sub end ();
sub read ();
-$VERSION=1.3001;
+$VERSION=1.3002;
sub start ($){
croak "rrdtool is already running"
require DynaLoader;
-$VERSION=1.3001;
+$VERSION=1.3002;
bootstrap RRDs $VERSION;
dnl the official version number is
dnl a.b.c
-AC_INIT([rrdtool],[1.3.1])
+AC_INIT([rrdtool],[1.3.2])
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.3001
+NUMVERS=1.3002
AC_SUBST(NUMVERS)
-dnl for the linker to understand which version the library is compatible with
-dnl we must keep a separate library version cout of the format c:r:a if any
-dnl if only implementation changed but all interfaces are kept, do r++
-dnl when only functionality was added do c++,r=0,a++
-dnl if any functionality was removed do c++,r=0,a=0.
+dnl for the linker to understand which versions the library are compatible with
+dnl each other we must keep a separate library version cout of the format c:r:a.
+dnl - if only implementation changed but all interfaces are kept, do r++
+dnl - if only functionality was added do c++,r=0,a++
+dnl - if any functionality was removed do c++,r=0,a=0.
dnl
dnl see http://sourceware.org/autobook/autobook/autobook_91.html
dnl
-LIBVERS=4:0:0
+LIBVERS=4:1:0
AC_SUBST(LIBVERS)
AC_CANONICAL_TARGET
AC_CHECK_FUNC(acos, , AC_CHECK_LIB(m, acos))
-
dnl add pic flag in any case this makes sure all our code is relocatable
eval `./libtool --config | grep pic_flag`
CFLAGS="$CFLAGS $pic_flag"
have_broken_isfinite=no],have_broken_isfinite=yes,[
case "${target}" in
hppa*-*-hpux*) have_broken_isfinite=yes ;;
- sparc-sun-solaris2.8) have_broken_isfinite=yes ;;
+ *-sun-solaris2.8) have_broken_isfinite=yes ;;
*) have_broken_isfinite=no ;;
esac])
])
CONFIGURE_PART(Resolve Portability Issues)
+dnl Do we need getopt_long
+
+build_getopt=no
+RRD_GETOPT_LONG="#"
+AC_CHECK_FUNC(getopt_long,[],[
+RRD_GETOPT_LONG="getopt_long"
+build_getopt=yes
+])
+AC_SUBST(RRD_GETOPT_LONG)
+AM_CONDITIONAL(BUILD_GETOPT,[test $build_getopt = yes])
+
dnl what does realloc do if it gets called with a NULL pointer
AC_CACHE_CHECK([if realloc can deal with NULL], rd_cv_null_realloc,
AC_CONFIG_FILES([doc/Makefile])
AC_CONFIG_FILES([po/Makefile.in])
AC_CONFIG_FILES([src/Makefile])
+AC_CONFIG_FILES([src/librrd.sym])
AC_CONFIG_FILES([bindings/Makefile])
AC_CONFIG_FILES([bindings/tcl/Makefile])
AC_CONFIG_FILES([bindings/tcl/ifOctets.tcl])
echo "Config is DONE!"
echo
echo " With MMAP IO: $enable_mmap"
+echo " Build rrd_getopt: $build_getopt"
echo " Static programs: $staticprogs"
echo " Perl Modules: $COMP_PERL"
echo " Perl Binary: $PERL"
5. push 32
6. push function "plus" and process it
the stack contains now the temperature in Fahrenheit
-
+
=head2 Changing unknown into zero
rrdtool graph demo.png --title="Demo Graph" \
Once you have decided. Save the two locations into environment variables.
BUILD_DIR=/tmp/rrdbuild
- INSTALL_DIR=/usr/local/rrdtool-1.3.1
+ INSTALL_DIR=/usr/local/rrdtool-1.3.2
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.1.tar.gz
- gunzip -c rrdtool-1.3.1.tar.gz | tar xf -
- cd rrdtool-1.3.1
+ wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.2.tar.gz
+ gunzip -c rrdtool-1.3.2.tar.gz | tar xf -
+ cd rrdtool-1.3.2
./configure --prefix=$INSTALL_DIR && make && make install
Ok, this was very optimistic. This try will probably have ended with
perl -i~ -p -e 's/(Requires.*?)\s*xrender.*/$1/' /usr/lib/pkgconfig/cairo.pc
+Make sure rrdtool finds your new compiler
+
+ export PATH=/opt/SunStudioExpress/bin
+
+Since there does not seem to ba a viable msgfmt tool on opensolaris (short
+of installing it yourself). You have to call configure with the
+
+ --disable-libintl
+
+option.
+
=head2 Debian / Ubuntu
Use apt-get to make sure you have all that is required. A number
tcl setups that would prevent rrdtool from building if they are included in
their current state.
- cd $BUILD_DIR/rrdtool-1.3.1
+ cd $BUILD_DIR/rrdtool-1.3.2
./configure --prefix=$INSTALL_DIR --disable-tcl --disable-python
$MAKE clean
$MAKE
want to display B<bits> per second. This is what the B<L<data
calculation|rrdgraph_data/CDEF>> command is designed for. After
B<consolidating> the data, a copy is made and this copy is modified
-using a rather powerful B<L<RPN|rrdgraph_rpn/>> command set.
+using a rather powerful B<L<RPN|rrdgraph_rpn>> command set.
When you are done fetching and processing the data, it is time to
graph it (or print it). This ends the B<rrdtool graph> sequence.
B<RRA> the data should come from. Defaults are: 1 day ago until
now, with the best possible resolution. B<Start> and B<end> can
be specified in several formats, see
-L<AT-STYLE TIME SPECIFICATION|rrdfetch/> and L<rrdgraph_examples>.
+L<AT-STYLE TIME SPECIFICATION|rrdfetch> and L<rrdgraph_examples>.
By default, B<rrdtool graph> calculates the width of one pixel in
the time domain and tries to get data from an B<RRA> with that
resolution. With the B<step> option you can alter this behaviour.
All text in rrdtool is rendered using Pango. With the B<--pango-markup> option, all
text will be processed by pango markup. This allows to embed some simple html
like markup tags using
-
+
<span key="value">text</span>
Apart from the verbose syntax, there are also the following short tags available.
small Makes font relatively smaller, equivalent to <span size="smaller">
tt Monospace font
u Underline
-
+
More details on L<http://developer.gnome.org/doc/API/2.0/pango/PangoMarkupFormat.html>.
[B<-G>|B<--graph-render-mode> {B<normal>,B<mono>}]
other statements are useful but optional.
See L<rrdgraph_data> and L<rrdgraph_rpn> for the exact format.
-=head2 Graph and print elements
+NOTE: B<Graph and print elements>
You need at least one graph element to generate an image and/or
at least one print statement to generate a report.
See L<rrdgraph_graph> for the exact format.
-
=head2 graphv
Calling rrdtool with the graphv option will return information in the
=head3 B<STACK>B<:>I<vname>B<#>I<color>[B<:>I<legend>]
-I<Deprecated. Use the B<STACK> modifiers on the other commands.>
-
-=back
+I<Deprecated. Use the B<STACK> modifiers on the other commands instead!>
B<Some notes on stacking>
order to make B<RRDtool> work it is important to note that
B<RRDtool> can be remotely controlled through a set of pipes. This
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
+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.
Summary: Round Robin Database Tool to store and display time-series data
Name: rrdtool
-Version: 1.3.1
+Version: 1.3.2
Release: 0.20%{?pre:.%{pre}}%{?dist}
License: GPLv2+ with exceptions
Group: Applications/Databases
AM_CPPFLAGS = -DRRD_DEFAULT_FONT=\"$(RRD_DEFAULT_FONT)\" -DNUMVERS=@NUMVERS@
UPD_C_FILES = \
- rrd_getopt.c \
- rrd_getopt1.c \
rrd_parsetime.c \
rrd_hw.c \
rrd_hw_math.c \
fnv.h rrd_graph.h \
rrd_is_thread_safe.h
+if BUILD_GETOPT
+noinst_HEADERS += rrd_getopt.h
+UPD_C_FILES += rrd_getopt.c rrd_getopt1.c
+endif
+
noinst_LTLIBRARIES = librrdupd.la
lib_LTLIBRARIES = librrd.la
# strftime is here because we do not usually need it. unices have propper
# iso date support
-EXTRA_DIST= strftime.c strftime.h \
+EXTRA_DIST= 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
+++ /dev/null
-rrd_clear_error
-rrd_close
-rrd_cmd_flush
-rrd_create
-rrd_create_r
-rrd_dontneed
-rrd_dump
-rrd_dump_r
-rrd_fetch
-rrd_fetch_r
-rrd_first
-rrd_first_r
-rrd_flush
-rrd_free
-rrd_free_context
-rrd_freemem
-rrd_get_context
-rrd_get_error
-rrd_graph
-rrd_graph_v
-rrd_info
-rrd_info_free
-rrd_info_print
-rrd_info_push
-rrd_init
-rrd_last
-rrd_last_r
-rrd_lastupdate
-rrd_lastupdate_r
-rrd_lock
-rrd_new_context
-rrd_open
-rrd_parsetime
-rrd_proc_start_end
-rrd_read
-rrd_resize
-rrd_restore
-rrd_seek
-rrd_set_error
-rrd_set_to_DINF
-rrd_set_to_DNAN
-rrd_strerror
-rrd_strversion
-rrd_tell
-rrd_test_error
-rrd_tune
-rrd_update
-rrd_update_r
-rrd_update_v
-rrd_version
-rrd_write
-rrd_xport
-rrdc_connect
-rrdc_disconnect
-rrdc_flush
-rrdc_update
--- /dev/null
+rrd_clear_error
+rrd_close
+rrd_cmd_flush
+rrd_create
+rrd_create_r
+rrd_dontneed
+rrd_dump
+rrd_dump_r
+rrd_fetch
+rrd_fetch_r
+rrd_first
+rrd_first_r
+rrd_flush
+rrd_free
+rrd_free_context
+rrd_freemem
+rrd_get_context
+rrd_get_error
+rrd_graph
+rrd_graph_v
+rrd_info
+rrd_info_free
+rrd_info_print
+rrd_info_push
+rrd_init
+rrd_last
+rrd_last_r
+rrd_lastupdate
+rrd_lastupdate_r
+rrd_lock
+rrd_new_context
+rrd_open
+rrd_parsetime
+rrd_proc_start_end
+rrd_read
+rrd_resize
+rrd_restore
+rrd_seek
+rrd_set_error
+rrd_set_to_DINF
+rrd_set_to_DNAN
+rrd_strerror
+rrd_strversion
+rrd_tell
+rrd_test_error
+rrd_tune
+rrd_update
+rrd_update_r
+rrd_update_v
+rrd_version
+rrd_write
+rrd_xport
+rrdc_connect
+rrdc_disconnect
+rrdc_flush
+rrdc_update
+@RRD_GETOPT_LONG@
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* pngsize.c determine the size of a PNG image
*****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrdlib.h Public header file for librrd
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_cgi.c RRD Web Page Generator
*****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_create.c creates new rrds
*****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_datalang A system for passing named and typed parameters between
* the different parts of rrdtool
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
* This code is stolen from rateup (mrtg-2.x) by Dave Rand
*****************************************************************************
* diff calculate the difference between two very long integers available as
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_dump Display a RRD
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_error.c Common Header File
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_fetch.c read date from an rrd to use for further processing
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_first Return
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_format.c RRD Database Format helper functions
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_format.h RRD Database Format header
*****************************************************************************/
/****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd_gfx.c graphics wrapper for rrdtool
**************************************************************************/
/****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd__graph.c produce graphs from data in rrdfiles
****************************************************************************/
static void
rrd_set_font_desc (
image_desc_t *im,int prop,char *font, double size ){
- static text_prop_t tp_cache[] = { {-1,"",NULL}, {-1,"",NULL}, {-1,"",NULL}, {-1,"",NULL}, {-1,"",NULL}, {-1,"",NULL}};
-
- if (tp_cache[prop].font_desc == NULL){
- if (prop > 0 && tp_cache[0].font_desc != NULL){
- tp_cache[prop].font_desc = pango_font_description_copy (tp_cache[0].font_desc);
- strcpy(tp_cache[prop].font,tp_cache[0].font);
- tp_cache[prop].size = tp_cache[0].size;
- }
- else {
- tp_cache[prop].font_desc = pango_font_description_new();
- }
- im->text_prop[prop].font_desc = pango_font_description_copy (tp_cache[prop].font_desc);
- }
-
- if (font != NULL && strcmp(tp_cache[prop].font,font) != 0){
- pango_font_description_free(tp_cache[prop].font_desc);
- pango_font_description_free(im->text_prop[prop].font_desc);
- tp_cache[prop].font_desc = pango_font_description_from_string( font );
- im->text_prop[prop].font_desc = pango_font_description_copy( tp_cache[prop].font_desc );
- strncpy(tp_cache[prop].font, font, sizeof(text_prop[prop].font) - 1);
- tp_cache[prop].font[sizeof(text_prop[prop].font) - 1] = '\0';
- strcpy(im->text_prop[prop].font,tp_cache[prop].font);
- }
- if (size != 0 && size != (tp_cache[prop].size)){
- pango_font_description_set_size(tp_cache[prop].font_desc, size * PANGO_SCALE);
- pango_font_description_set_size(im->text_prop[prop].font_desc, size * PANGO_SCALE);
- im->text_prop[prop].size = size;
- tp_cache[prop].size = size;
- }
- if (im->text_prop[prop].size < 0){
- im->text_prop[prop].size = tp_cache[prop].size;
- im->text_prop[prop].font_desc = pango_font_description_copy( tp_cache[prop].font_desc );
- strcpy(im->text_prop[prop].font,tp_cache[prop].font);
- }
- // fprintf(stderr,"%d %s\n",prop,pango_font_description_to_string(im->text_prop[prop].font_desc));
+ strncpy(im->text_prop[prop].font, font, sizeof(text_prop[prop].font) - 1);
+ im->text_prop[prop].font[sizeof(text_prop[prop].font) - 1] = '\0';
+ im->text_prop[prop].size = size;
+ im->text_prop[prop].font_desc = pango_font_description_from_string( font );
+ pango_font_description_set_size(im->text_prop[prop].font_desc, size * PANGO_SCALE);
}
void rrd_graph_init(
{
unsigned int i;
char *deffont = getenv("RRD_DEFAULT_FONT");
+ static PangoFontMap *fontmap = NULL;
+ PangoContext *context;
#ifdef HAVE_TZSET
tzset();
rrd_set_font_desc(im,i, deffont ? deffont : text_prop[i].font,text_prop[i].size);
}
- im->layout = pango_cairo_create_layout(im->cr);
- pango_cairo_context_set_resolution(pango_layout_get_context(im->layout), 100);
+ if (fontmap == NULL){
+ fontmap = pango_cairo_font_map_get_default();
+ }
+
+ context = pango_cairo_font_map_create_context((PangoCairoFontMap*)fontmap);
+
+ pango_cairo_context_set_resolution(context, 100);
+
+ pango_cairo_update_context(im->cr,context);
+
+ im->layout = pango_layout_new(context);
+
+// im->layout = pango_cairo_create_layout(im->cr);
+
cairo_font_options_set_hint_style
(im->font_options, CAIRO_HINT_STYLE_FULL);
/****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd_graph_helper.c commandline parser functions
* this code initially written by Alex van den Bogaerdt
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_hw.c : Support for Holt-Winters Smoothing/ Aberrant Behavior Detection
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_hw.h : Support for Holt-Winters Smoothing/ Aberrant Behavior Detection
*****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Takao Fujiwara, 2008
+ * RRDtool 1.3.2 Copyright by Takao Fujiwara, 2008
*****************************************************************************
* rrd_i18n.h Common Header File
*****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_info Get Information about the configuration of an RRD
*****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_last.c
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
* Copyright by Florian Forster, 2008
*****************************************************************************
* rrd_lastupdate Get the last datum entered for each DS
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_open.c Open an RRD File
*****************************************************************************
/* Get current position in rrd_file. */
-inline off_t rrd_tell(
+off_t rrd_tell(
rrd_file_t *rrd_file)
{
return rrd_file->pos;
/* Read count bytes into buffer buf, starting at rrd_file->pos.
* Returns the number of bytes read or <0 on error. */
-inline ssize_t rrd_read(
+ssize_t rrd_read(
rrd_file_t *rrd_file,
void *buf,
size_t count)
* rrd_file->pos of rrd_file->fd.
* Returns the number of bytes written or <0 on error. */
-inline ssize_t rrd_write(
+ssize_t rrd_write(
rrd_file_t *rrd_file,
const void *buf,
size_t count)
/* flush all data pending to be written to FD. */
-inline void rrd_flush(
+void rrd_flush(
rrd_file_t *rrd_file)
{
if (fdatasync(rrd_file->fd) != 0) {
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_resize.c Alters size of an RRA
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
* This file: Copyright 2008 Florian octo Forster
* Distributed under the GPL
*****************************************************************************
/****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd_rpncalc.c RPN calculator functions
****************************************************************************/
/****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd_rpncalc.h RPN calculator functions
****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
* This file: Copyright 2003 Peter Stamfest <peter@stamfest.at>
* & Tobias Oetiker
* Distributed under the GPL
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_tool.c Startup wrapper
*****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_tool.h Common Header File
*****************************************************************************/
#endif
/* local include files -- need to be after the system ones */
+#ifdef HAVE_GETOPT_LONG
+#define _GNU_SOURCE
+#include <getopt.h>
+#else
#include "rrd_getopt.h"
+#endif
+
#include "rrd_format.h"
#ifndef max
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* change header parameters of an rrd
*****************************************************************************
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
* Copyright by Florian Forster, 2008
*****************************************************************************
* rrd_update.c RRD Update Function
rrd_t *rrd,
rrd_file_t *rrd_file,
unsigned long rra_begin,
- unsigned long *rra_current,
time_t *current_time,
unsigned long *current_time_usec,
rrd_value_t *pdp_temp,
rrd_value_t **last_seasonal_coef,
rrd_value_t **seasonal_coef,
rrd_value_t *pdp_temp,
- unsigned long *rra_current,
unsigned long *skip_update,
int *schedule_smooth);
rrd_t *rrd,
rrd_file_t *rrd_file,
unsigned long rra_begin,
- unsigned long *rra_current,
unsigned long elapsed_pdp_st,
rrd_value_t *pdp_temp,
rrd_value_t **seasonal_coef);
rrd_file_t *rrd_file,
unsigned long *rra_step_cnt,
unsigned long rra_begin,
- unsigned long *rra_current,
time_t current_time,
unsigned long *skip_update,
rrd_info_t ** pcdp_summary);
rrd_file_t *rrd_file,
rrd_t *rrd,
unsigned long rra_idx,
- unsigned long *rra_current,
unsigned short CDP_scratch_idx,
rrd_info_t ** pcdp_summary,
time_t rra_time);
unsigned long rra_begin; /* byte pointer to the rra
* area in the rrd file. this
* pointer never changes value */
- unsigned long rra_current; /* byte pointer to the current write
- * spot in the rrd file. */
rrd_value_t *pdp_new; /* prepare the incoming data to be added
* to the existing entry */
rrd_value_t *pdp_temp; /* prepare the pdp values to be added
goto err_free;
}
/* We are now at the beginning of the rra's */
- rra_current = rra_begin = rrd_file->header_len;
+ rra_begin = rrd_file->header_len;
version = atoi(rrd.stat_head->version);
rrd_set_error("failed duplication argv entry");
break;
}
- if (process_arg(arg_copy, &rrd, rrd_file, rra_begin, &rra_current,
+ if (process_arg(arg_copy, &rrd, rrd_file, rra_begin,
¤t_time, ¤t_time_usec, pdp_temp, pdp_new,
rra_step_cnt, updvals, tmpl_idx, tmpl_cnt,
&pcdp_summary, version, skip_update,
rrd_t *rrd,
rrd_file_t *rrd_file,
unsigned long rra_begin,
- unsigned long *rra_current,
time_t *current_time,
unsigned long *current_time_usec,
rrd_value_t *pdp_temp,
double interval, pre_int, post_int; /* interval between this and
* the last run */
unsigned long proc_pdp_cnt;
- unsigned long rra_start;
if (parse_ds(rrd, updvals, tmpl_idx, step_start, tmpl_cnt,
current_time, current_time_usec, version) == -1) {
return -1;
}
- /* seek to the beginning of the rra's */
- if (*rra_current != rra_begin) {
-#ifndef HAVE_MMAP
- if (rrd_seek(rrd_file, rra_begin, SEEK_SET) != 0) {
- rrd_set_error("seek error in rrd");
- return -1;
- }
-#endif
- *rra_current = rra_begin;
- }
- rra_start = rra_begin;
interval = (double) (*current_time - rrd->live_head->last_up)
+ (double) ((long) *current_time_usec -
proc_pdp_cnt,
&last_seasonal_coef,
&seasonal_coef,
- pdp_temp, rra_current,
+ pdp_temp,
skip_update, schedule_smooth) == -1) {
goto err_free_coefficients;
}
- if (update_aberrant_cdps(rrd, rrd_file, rra_begin, rra_current,
+ if (update_aberrant_cdps(rrd, rrd_file, rra_begin,
elapsed_pdp_st, pdp_temp,
&seasonal_coef) == -1) {
goto err_free_coefficients;
}
if (write_to_rras(rrd, rrd_file, rra_step_cnt, rra_begin,
- rra_current, *current_time, skip_update,
+ *current_time, skip_update,
pcdp_summary) == -1) {
goto err_free_coefficients;
}
rrd_value_t **last_seasonal_coef,
rrd_value_t **seasonal_coef,
rrd_value_t *pdp_temp,
- unsigned long *rra_current,
unsigned long *skip_update,
int *schedule_smooth)
{
#endif
*schedule_smooth = 1;
}
- *rra_current = rrd_tell(rrd_file);
}
if (rrd_test_error())
return -1;
rrd_t *rrd,
rrd_file_t *rrd_file,
unsigned long rra_begin,
- unsigned long *rra_current,
unsigned long elapsed_pdp_st,
rrd_value_t *pdp_temp,
rrd_value_t **seasonal_coef)
lookup_seasonal(rrd, rra_idx, rra_start, rrd_file,
elapsed_pdp_st + 2, seasonal_coef);
}
- *rra_current = rrd_tell(rrd_file);
}
if (rrd_test_error())
return -1;
rrd_file_t *rrd_file,
unsigned long *rra_step_cnt,
unsigned long rra_begin,
- unsigned long *rra_current,
time_t current_time,
unsigned long *skip_update,
rrd_info_t ** pcdp_summary)
{
unsigned long rra_idx;
unsigned long rra_start;
- unsigned long rra_pos_tmp; /* temporary byte pointer. */
time_t rra_time = 0; /* time of update for a RRA */
+ unsigned long ds_cnt = rrd->stat_head->ds_cnt;
+
/* Ready to write to disk */
rra_start = rra_begin;
+
for (rra_idx = 0; rra_idx < rrd->stat_head->rra_cnt; rra_idx++) {
- /* skip unless there's something to write */
- if (rra_step_cnt[rra_idx]) {
- /* write the first row */
+ rra_def_t *rra_def = &rrd->rra_def[rra_idx];
+ rra_ptr_t *rra_ptr = &rrd->rra_ptr[rra_idx];
+
+ /* for cdp_prep */
+ unsigned short scratch_idx;
+ unsigned long step_subtract;
+
+ for (scratch_idx = CDP_primary_val,
+ step_subtract = 1;
+ rra_step_cnt[rra_idx] > 0;
+ rra_step_cnt[rra_idx]--,
+ scratch_idx = CDP_secondary_val,
+ step_subtract = 2) {
+
+ off_t rra_pos_new;
#ifdef DEBUG
fprintf(stderr, " -- RRA Preseek %ld\n", rrd_file->pos);
#endif
- rrd->rra_ptr[rra_idx].cur_row++;
- if (rrd->rra_ptr[rra_idx].cur_row >=
- rrd->rra_def[rra_idx].row_cnt)
- rrd->rra_ptr[rra_idx].cur_row = 0; /* wrap around */
- /* position on the first row */
- rra_pos_tmp = rra_start +
- (rrd->stat_head->ds_cnt) * (rrd->rra_ptr[rra_idx].cur_row) *
- sizeof(rrd_value_t);
- if (rra_pos_tmp != *rra_current) {
- if (rrd_seek(rrd_file, rra_pos_tmp, SEEK_SET) != 0) {
+ /* increment, with wrap-around */
+ if (++rra_ptr->cur_row >= rra_def->row_cnt)
+ rra_ptr->cur_row = 0;
+
+ /* we know what our position should be */
+ rra_pos_new = rra_start
+ + ds_cnt * rra_ptr->cur_row * sizeof(rrd_value_t);
+
+ /* re-seek if the position is wrong or we wrapped around */
+ if (rra_pos_new != rrd_file->pos) {
+ if (rrd_seek(rrd_file, rra_pos_new, SEEK_SET) != 0) {
rrd_set_error("seek error in rrd");
return -1;
}
- *rra_current = rra_pos_tmp;
}
#ifdef DEBUG
fprintf(stderr, " -- RRA Postseek %ld\n", rrd_file->pos);
#endif
- if (!skip_update[rra_idx]) {
- if (*pcdp_summary != NULL) {
- rra_time = (current_time - current_time
- % (rrd->rra_def[rra_idx].pdp_cnt *
- rrd->stat_head->pdp_step))
- -
- ((rra_step_cnt[rra_idx] -
- 1) * rrd->rra_def[rra_idx].pdp_cnt *
- rrd->stat_head->pdp_step);
- }
- if (write_RRA_row
- (rrd_file, rrd, rra_idx, rra_current, CDP_primary_val,
- pcdp_summary, rra_time) == -1)
- return -1;
- }
- /* write other rows of the bulk update, if any */
- for (; rra_step_cnt[rra_idx] > 1; rra_step_cnt[rra_idx]--) {
- if (++rrd->rra_ptr[rra_idx].cur_row ==
- rrd->rra_def[rra_idx].row_cnt) {
-#ifdef DEBUG
- fprintf(stderr,
- "Wraparound for RRA %s, %lu updates left\n",
- rrd->rra_def[rra_idx].cf_nam,
- rra_step_cnt[rra_idx] - 1);
-#endif
- /* wrap */
- rrd->rra_ptr[rra_idx].cur_row = 0;
- /* seek back to beginning of current rra */
- if (rrd_seek(rrd_file, rra_start, SEEK_SET) != 0) {
- rrd_set_error("seek error in rrd");
- return -1;
- }
-#ifdef DEBUG
- fprintf(stderr, " -- Wraparound Postseek %ld\n",
- rrd_file->pos);
-#endif
- *rra_current = rra_start;
- }
- if (!skip_update[rra_idx]) {
- if (*pcdp_summary != NULL) {
- rra_time = (current_time - current_time
- % (rrd->rra_def[rra_idx].pdp_cnt *
- rrd->stat_head->pdp_step))
- -
- ((rra_step_cnt[rra_idx] -
- 2) * rrd->rra_def[rra_idx].pdp_cnt *
- rrd->stat_head->pdp_step);
- }
- if (write_RRA_row(rrd_file, rrd, rra_idx, rra_current,
- CDP_secondary_val, pcdp_summary,
- rra_time) == -1)
- return -1;
- }
+ if (skip_update[rra_idx])
+ continue;
+
+ if (*pcdp_summary != NULL) {
+ unsigned long step_time = rra_def->pdp_cnt * rrd->stat_head->pdp_step;
+
+ rra_time = (current_time - current_time % step_time)
+ - ((rra_step_cnt[rra_idx] - step_subtract) * step_time);
}
+
+ if (write_RRA_row
+ (rrd_file, rrd, rra_idx, scratch_idx,
+ pcdp_summary, rra_time) == -1)
+ return -1;
}
- rra_start += rrd->rra_def[rra_idx].row_cnt * rrd->stat_head->ds_cnt *
- sizeof(rrd_value_t);
- } /* RRA LOOP */
+
+ rra_start += rra_def->row_cnt * ds_cnt * sizeof(rrd_value_t);
+ } /* RRA LOOP */
return 0;
}
rrd_file_t *rrd_file,
rrd_t *rrd,
unsigned long rra_idx,
- unsigned long *rra_current,
unsigned short CDP_scratch_idx,
rrd_info_t ** pcdp_summary,
time_t rra_time)
rrd_set_error("writing rrd: %s", rrd_strerror(errno));
return -1;
}
- *rra_current += sizeof(rrd_value_t);
}
return 0;
}
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrd_version Return
*****************************************************************************
/****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd_xport.c export RRD data
****************************************************************************/
/****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd_xport.h contains XML related constants
****************************************************************************/
/*****************************************************************************
- * RRDtool 1.3.1 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008
*****************************************************************************
* rrdupdate.c Main program for the (standalone) rrdupdate utility
*****************************************************************************