From 7ece23c6836d772648c460f9214d070a7b74ed4f Mon Sep 17 00:00:00 2001 From: oetiker Date: Sun, 4 Mar 2001 11:14:26 +0000 Subject: [PATCH] added at-style-time@value:value syntax to rrd_update -- Dave Bodenstab git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@20 a5681a0c-68f1-0310-ab6d-d61299d08faa --- doc/rrdupdate.pod | 4 ++++ src/rrd_tool.c | 3 ++- src/rrd_update.c | 50 +++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/doc/rrdupdate.pod b/doc/rrdupdate.pod index bc4e902..f150054 100644 --- a/doc/rrdupdate.pod +++ b/doc/rrdupdate.pod @@ -9,6 +9,7 @@ rrdtool update - Store a new set of values into the rrd B B I S<[B<--template>|B<-t> I[B<:>I]...]> S|IB<:>I[B<:>I...]> +SB<@>I[B<:>I...]> S<[IB<:>I[B<:>I...] ...]> =head1 DESCRIPTION @@ -40,6 +41,9 @@ The data used for updating the RRD was acquired at a certain time. This time can either be defined in seconds since 1970-01-01. Or by using the letter 'N' the update time is set to be the current time. Negative time values are subtracted from the current time. +An AT_STYLE TIME SPECIFICATION (see the I documentation) may +also be used by delimiting the end of the time specification with the '@' character +instead of a ':'. Getting the timing right to the second is especially important when you are working with data-sources of type B, B or B. diff --git a/src/rrd_tool.c b/src/rrd_tool.c index 4d6ffc9..a73a304 100644 --- a/src/rrd_tool.c +++ b/src/rrd_tool.c @@ -53,7 +53,8 @@ void PrintUsage(char *cmd) "\trrdtool update filename\n" "\t\t--template|-t ds-name:ds-name:...\n" "\t\ttime|N:value[:value...]\n\n" - "\t\t[ time:value[:value...] ..]\n\n"; + "\t\tat-time@value[:value...]\n\n" + "\t\t[ time:value[:value...] ..]\n\n"; char help_fetch[] = "* fetch - fetch data out of an RRD\n\n" diff --git a/src/rrd_update.c b/src/rrd_update.c index 94db63a..1e5a83e 100644 --- a/src/rrd_update.c +++ b/src/rrd_update.c @@ -5,8 +5,12 @@ ***************************************************************************** * $Id$ * $Log$ - * Revision 1.1 2001/02/25 22:25:06 oetiker - * Initial revision + * Revision 1.2 2001/03/04 11:14:25 oetiker + * added at-style-time@value:value syntax to rrd_update + * -- Dave Bodenstab + * + * Revision 1.1.1.1 2001/02/25 22:25:06 oetiker + * checkin * *****************************************************************************/ @@ -36,6 +40,7 @@ main(int argc, char **argv){ "Usage: rrdupdate filename\n" "\t\t\t[--template|-t ds-name:ds-name:...]\n" "\t\t\ttime|N:value[:value...]\n\n" + "\t\t\tat-time@value[:value...]\n\n" "\t\t\t[ time:value[:value...] ..]\n\n"); printf("ERROR: %s\n",rrd_get_error()); @@ -238,6 +243,10 @@ rrd_update(int argc, char **argv) for(arg_i=optind+1; arg_ids_cnt;ii++) updvals[ii] = "U"; - ii=0; strcpy(stepper,argv[arg_i]); updvals[0]=stepper; + /* separate all ds elements; first must be examined separately + due to alternate time syntax */ + if ((p=strchr(stepper,'@'))!=NULL) { + timesyntax = atstyle; + *p = '\0'; + stepper = p+1; + } else if ((p=strchr(stepper,':'))!=NULL) { + timesyntax = normal; + *p = '\0'; + stepper = p+1; + } else { + rrd_set_error("expected timestamp not found in data source from %s:...", + argv[arg_i]); + free(step_start); + break; + } + ii=1; + updvals[tmpl_idx[ii]] = stepper; while (*stepper) { if (*stepper == ':') { *stepper = '\0'; @@ -272,7 +298,23 @@ rrd_update(int argc, char **argv) } /* get the time from the reading ... handle N */ - if (strcmp(updvals[0],"N")==0){ + if (timesyntax == atstyle) { + if ((parsetime_error = parsetime(updvals[0], &ds_tv))) { + rrd_set_error("ds time: %s: %s", updvals[0], parsetime_error ); + free(step_start); + break; + } + if (ds_tv.type == RELATIVE_TO_END_TIME || + ds_tv.type == RELATIVE_TO_START_TIME) { + rrd_set_error("specifying time relative to the 'start' " + "or 'end' makes no sense here: %s", + updvals[0]); + free(step_start); + break; + } + + current_time = mktime(&ds_tv.tm) + ds_tv.offset; + } else if (strcmp(updvals[0],"N")==0){ current_time = time(NULL); } else { current_time = atol(updvals[0]); -- 2.30.2