[rrd-users] patch to add at-style timespec to rrdupdate

Dave Bodenstab imdave at mcs.net
Sat Feb 24 00:52:40 MET 2001


Here's a patch to add at-style timespec's to the rrdupdate
command.  The timespec is delimitted by a '@' rather than
a ':'.  I didn't add a UTC keyword to parsetime.c -- looked
too hairy for today.  Anyway, use this stuff any way you want.

Dave Bodenstab



--- src/rrd_update.c	2001/02/19 19:46:49	10.30
+++ src/rrd_update.c	2001/02/23 23:24:27	10.30.1.2
@@ -36,6 +39,7 @@
                         "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 at value[:value...]\n\n"
                         "\t\t\t[ time:value[:value...] ..]\n\n");
                                    
                 printf("ERROR: %s\n",rrd_get_error());
@@ -238,6 +242,10 @@
     for(arg_i=optind+1; arg_i<argc;arg_i++) {
 	char *stepper = malloc((strlen(argv[arg_i])+1)*sizeof(char));
         char *step_start = stepper;
+	char *p;
+	char *parsetime_error = NULL;
+	enum {atstyle, normal} timesyntax;
+	struct time_value ds_tv;
         if (stepper == NULL){
                 rrd_set_error("faild duplication argv entry");
                 free(updvals);
@@ -250,9 +258,26 @@
 	/* initialize all ds input to unknown except the first one
            which has always got to be set */
 	for(ii=1;ii<=rrd.stat_head->ds_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 +297,23 @@
 	}
 	
         /* 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]);
--- src/rrd_tool.c	2001/02/19 19:46:49	10.30
+++ src/rrd_tool.c	2001/02/23 23:24:15	10.30.1.1
@@ -53,6 +53,7 @@
 	   "\trrdtool update filename\n"
 	   "\t\t--template|-t ds-name:ds-name:...\n"
 	   "\t\ttime|N:value[:value...]\n\n"
+	   "\t\tat-time at value[:value...]\n\n"
 	   "\t\t[ time:value[:value...] ..]\n\n";
 
     char help_fetch[] =
--- doc/rrdupdate.pod	2001/02/11 15:53:23	10.30
+++ doc/rrdupdate.pod	2001/02/23 23:33:45	10.30.1.1
@@ -9,6 +9,7 @@
 B<rrdtool> B<update> I<filename> 
 S<[B<--template>|B<-t> I<ds-name>[B<:>I<ds-name>]...]> 
 S<B<N>|I<timestamp>B<:>I<value>[B<:>I<value>...]> 
+S<I<at-timestamp>B<@>I<value>[B<:>I<value>...]> 
 S<[I<timestamp>B<:>I<value>[B<:>I<value>...] ...]>
 
 =head1 DESCRIPTION
@@ -40,6 +41,9 @@
 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<rrdfetch> 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<COUNTER>,
 B<DERIVE> or B<ABSOLUTE>. 




--
Unsubscribe mailto:rrd-users-request at list.ee.ethz.ch?subject=unsubscribe
Help        mailto:rrd-users-request at list.ee.ethz.ch?subject=help
Archive     http://www.ee.ethz.ch/~slist/rrd-users
WebAdmin    http://www.ee.ethz.ch/~slist/lsg2.cgi



More information about the rrd-users mailing list