- int xxsize;
- int i = 0, j = 0;
- time_t start,end;
- 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) {
- row_cnt = (end-start)/step;
- ptr = data;
- printf("<?xml version=\"1.0\" encoding=\"%s\"?>\n\n", XML_ENCODING);
- printf("<%s>\n", ROOT_TAG);
- printf(" <%s>\n", META_TAG);
- printf(" <%s>%lu</%s>\n", META_START_TAG, start+step, META_START_TAG);
- printf(" <%s>%lu</%s>\n", META_STEP_TAG, step, META_STEP_TAG);
- printf(" <%s>%lu</%s>\n", META_END_TAG, end, META_END_TAG);
- printf(" <%s>%lu</%s>\n", META_ROWS_TAG, row_cnt, META_ROWS_TAG);
- printf(" <%s>%lu</%s>\n", META_COLS_TAG, col_cnt, META_COLS_TAG);
- printf(" <%s>\n", LEGEND_TAG);
- for (j = 0; j < col_cnt; j++) {
- char *entry = NULL;
- entry = legend_v[j];
- printf(" <%s>%s</%s>\n", LEGEND_ENTRY_TAG, entry, LEGEND_ENTRY_TAG);
- free(entry);
- }
- free(legend_v);
- printf(" </%s>\n", LEGEND_TAG);
- printf(" </%s>\n", META_TAG);
- printf(" <%s>\n", DATA_TAG);
- for (i = start+step; i <= end; i += step) {
- printf (" <%s>", DATA_ROW_TAG);
- printf ("<%s>%lu</%s>", COL_TIME_TAG, i, COL_TIME_TAG);
- for (j = 0; j < col_cnt; j++) {
- rrd_value_t newval = DNAN;
- newval = *ptr;
- if(isnan(newval)){
- printf("<%s>NaN</%s>", COL_DATA_TAG, COL_DATA_TAG);
- } else {
- printf("<%s>%0.10e</%s>", COL_DATA_TAG, newval, COL_DATA_TAG);
- };
- ptr++;
- }
- printf("</%s>\n", DATA_ROW_TAG);
- }
- free(data);
- printf(" </%s>\n", DATA_TAG);
- printf("</%s>\n", ROOT_TAG);
- }
- }
- else if (strcmp("graph", argv[1]) == 0) {
- char **calcpr;
- const char *imgfile = argv[2]; /* rrd_graph changes argv pointer */
- int xsize, ysize;
- int i;
- if( rrd_graph(argc-1, &argv[1], &calcpr, &xsize, &ysize) != -1 ) {
- if (strcmp(imgfile,"-") != 0)
- printf ("%dx%d\n",xsize,ysize);
- if (calcpr) {
- for(i=0;calcpr[i];i++){
- if (strcmp(imgfile,"-") != 0)
- printf("%s\n",calcpr[i]);
- free(calcpr[i]);
- }
- free(calcpr);
- }
- }
-
- } else if (strcmp("tune", argv[1]) == 0)
- rrd_tune(argc-1, &argv[1]);
+ 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;
+ int enumds = 0;
+ int i;
+ size_t vtag_s = strlen(COL_DATA_TAG) + 10;
+ char *vtag = malloc(vtag_s);
+
+ for (i = 2; i < argc; i++) {
+ if (strcmp("--enumds", argv[i]) == 0)
+ enumds = 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("<?xml version=\"1.0\" encoding=\"%s\"?>\n\n",
+ XML_ENCODING);
+ printf("<%s>\n", ROOT_TAG);
+ printf(" <%s>\n", META_TAG);
+ printf(" <%s>%lu</%s>\n", META_START_TAG,
+ (unsigned long) start + step, META_START_TAG);
+ printf(" <%s>%lu</%s>\n", META_STEP_TAG, step, META_STEP_TAG);
+ printf(" <%s>%lu</%s>\n", META_END_TAG, (unsigned long) end,
+ META_END_TAG);
+ printf(" <%s>%lu</%s>\n", META_ROWS_TAG, row_cnt,
+ META_ROWS_TAG);
+ printf(" <%s>%lu</%s>\n", META_COLS_TAG, col_cnt,
+ META_COLS_TAG);
+ printf(" <%s>\n", LEGEND_TAG);
+ for (j = 0; j < col_cnt; j++) {
+ char *entry = NULL;
+
+ entry = legend_v[j];
+ printf(" <%s>%s</%s>\n", LEGEND_ENTRY_TAG, entry,
+ LEGEND_ENTRY_TAG);
+ free(entry);
+ }
+ free(legend_v);
+ printf(" </%s>\n", LEGEND_TAG);
+ printf(" </%s>\n", META_TAG);
+ printf(" <%s>\n", DATA_TAG);
+ for (ti = start + step; ti <= end; ti += step) {
+ printf(" <%s>", DATA_ROW_TAG);
+ printf("<%s>%lu</%s>", COL_TIME_TAG, ti, COL_TIME_TAG);
+ for (j = 0; j < col_cnt; j++) {
+ rrd_value_t newval = DNAN;
+
+ if (enumds == 1)
+ snprintf(vtag, vtag_s, "%s%lu", COL_DATA_TAG, j);
+ else
+ snprintf(vtag, vtag_s, "%s", COL_DATA_TAG);
+
+ newval = *ptr;
+ if (isnan(newval)) {
+ printf("<%s>NaN</%s>", vtag, vtag);
+ } else {
+ printf("<%s>%0.10e</%s>", vtag, newval, vtag);
+ };
+ ptr++;
+ }
+ printf("</%s>\n", DATA_ROW_TAG);
+ }
+ free(data);
+ printf(" </%s>\n", DATA_TAG);
+ printf("</%s>\n", ROOT_TAG);
+ }
+ free(vtag);
+ } else if (strcmp("graph", argv[1]) == 0) {
+ char **calcpr;
+
+#ifdef notused /*XXX*/
+ const char *imgfile = argv[2]; /* rrd_graph changes argv pointer */
+#endif
+ int xsize, ysize;
+ double ymin, ymax;
+ int i;
+ int tostdout = (strcmp(argv[2], "-") == 0);
+ int imginfo = 0;
+
+ for (i = 2; i < argc; i++) {
+ if (strcmp(argv[i], "--imginfo") == 0
+ || strcmp(argv[i], "-f") == 0) {
+ imginfo = 1;
+ break;
+ }
+ }
+ if (rrd_graph
+ (argc - 1, &argv[1], &calcpr, &xsize, &ysize, NULL, &ymin,
+ &ymax) != -1) {
+ if (!tostdout && !imginfo)
+ printf("%dx%d\n", xsize, ysize);
+ if (calcpr) {
+ for (i = 0; calcpr[i]; i++) {
+ if (!tostdout)
+ printf("%s\n", calcpr[i]);
+ free(calcpr[i]);
+ }
+ free(calcpr);
+ }
+ }
+
+ } else if (strcmp("tune", argv[1]) == 0)
+ rrd_tune(argc - 1, &argv[1]);