From d43e8fed26fc69b44aba75a48a3170da321711d2 Mon Sep 17 00:00:00 2001 From: oetiker Date: Mon, 31 Jul 2006 22:48:45 +0000 Subject: [PATCH] new options --enumds and --unknwonaszero for xport git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.2@862 a5681a0c-68f1-0310-ab6d-d61299d08faa --- program/doc/rrdxport.pod | 10 ++++++++++ program/src/rrd_tool.c | 31 +++++++++++++++++++++++++++---- program/src/rrd_xport.c | 7 ++++++- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/program/doc/rrdxport.pod b/program/doc/rrdxport.pod index 62a96259..f5738154 100644 --- a/program/doc/rrdxport.pod +++ b/program/doc/rrdxport.pod @@ -48,6 +48,16 @@ for details. See L documentation. +=item B<--enumds> + +The generated xml should contain the data values in enumerated tags. + + valval + +=item B<--unknwonaszero> + +Turn UNKNWON into '0' on output. + =item BIB<=>IB<:>IB<:>I See I documentation. diff --git a/program/src/rrd_tool.c b/program/src/rrd_tool.c index f56b90cc..a331df7c 100644 --- a/program/src/rrd_tool.c +++ b/program/src/rrd_tool.c @@ -159,6 +159,8 @@ void PrintUsage(char *cmd) "\trrdtool xport [-s|--start seconds] [-e|--end seconds]\n" "\t\t[-m|--maxrows rows]\n" "\t\t[--step seconds]\n" + "\t\t[--enumds]\n" + "\t\t[--unknownaszero]\n" "\t\t[DEF:vname=rrd:ds-name:CF]\n" "\t\t[CDEF:vname=rpn-expression]\n" "\t\t[XPORT:vname:legend]\n\n"; @@ -647,13 +649,25 @@ int HandleInputLine(int argc, char **argv, FILE* out) free (data); } } else if (strcmp("xport", argv[1]) == 0) { - int xxsize; + int xxsize; unsigned long int j = 0; time_t start,end, ti; unsigned long step, col_cnt,row_cnt; rrd_value_t *data,*ptr; char **legend_v; - if(rrd_xport(argc-1, &argv[1], &xxsize,&start,&end,&step,&col_cnt,&legend_v,&data) != -1) { + int enumds = 0; + int unknownaszero = 0; + int i; + char *vtag = NULL; + vtag = malloc( strlen(COL_DATA_TAG)+10); + for ( i = 2; i < argc; i++){ + if (strcmp("--enumds", argv[i]) == 0) + enumds = 1; + if (strcmp("--unknownaszero", argv[i]) == 0) + unknownaszero = 1; + } + + if(rrd_xport(argc-1, &argv[1], &xxsize,&start,&end,&step,&col_cnt,&legend_v,&data) != -1) { row_cnt = (end-start)/step; ptr = data; printf("\n\n", XML_ENCODING); @@ -679,12 +693,20 @@ int HandleInputLine(int argc, char **argv, FILE* out) printf (" <%s>", DATA_ROW_TAG); printf ("<%s>%lu", COL_TIME_TAG, ti, COL_TIME_TAG); for (j = 0; j < col_cnt; j++) { + if (enumds == 1) + snprintf(vtag,15,"%s%lu", COL_DATA_TAG, j); + else + snprintf(vtag,15,"%s",COL_DATA_TAG); + rrd_value_t newval = DNAN; newval = *ptr; if(isnan(newval)){ - printf("<%s>NaN", COL_DATA_TAG, COL_DATA_TAG); + if (unknownaszero == 1) + printf("<%s>0", vtag,vtag); + else + printf("<%s>NaN", vtag,vtag); } else { - printf("<%s>%0.10e", COL_DATA_TAG, newval, COL_DATA_TAG); + printf("<%s>%0.10e", vtag, newval, vtag); }; ptr++; } @@ -694,6 +716,7 @@ int HandleInputLine(int argc, char **argv, FILE* out) printf(" \n", DATA_TAG); printf("\n", ROOT_TAG); } + free(vtag); } else if (strcmp("graph", argv[1]) == 0) { char **calcpr; diff --git a/program/src/rrd_xport.c b/program/src/rrd_xport.c index fee2c368..f427762f 100644 --- a/program/src/rrd_xport.c +++ b/program/src/rrd_xport.c @@ -61,6 +61,8 @@ rrd_xport(int argc, char **argv, int UNUSED(*xsize), {"end", required_argument, 0, 'e'}, {"maxrows", required_argument, 0, 'm'}, {"step", required_argument, 0, 261}, + {"enumds", no_argument, 0, 262}, /* these are handled in the frontend ... */ + {"unknownaszero", no_argument, 0, 263}, /* just ignore them here */ {0,0,0,0} }; int option_index = 0; @@ -76,6 +78,9 @@ rrd_xport(int argc, char **argv, int UNUSED(*xsize), case 261: im.step = atoi(optarg); break; + case 262: + case 263: + break; case 's': if ((parsetime_error = parsetime(optarg, &start_tv))) { rrd_set_error( "start time: %s", parsetime_error ); @@ -96,7 +101,7 @@ rrd_xport(int argc, char **argv, int UNUSED(*xsize), } break; case '?': - rrd_set_error("unknown option '%c'", optopt); + rrd_set_error("unknown option '%s'",argv[optind-1]); return -1; } } -- 2.30.2