diff --git a/src/rrd_xport.c b/src/rrd_xport.c
index 50d094c410c724e4e5d79e0589053eb210590bad..7708be6e084baad327d3fc245068c42f234503c8 100644 (file)
--- a/src/rrd_xport.c
+++ b/src/rrd_xport.c
/****************************************************************************
- * RRDtool 1.3.8 Copyright by Tobi Oetiker, 1997-2009
+ * RRDtool 1.4.8 Copyright by Tobi Oetiker, 1997-2013
****************************************************************************
* rrd_xport.c export RRD data
****************************************************************************/
#include "rrd_graph.h"
#include "rrd_xport.h"
#include "unused.h"
+#include "rrd_client.h"
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
#include <io.h>
char ***legend_v, /* legend entries */
rrd_value_t **data)
{ /* two dimensional array containing the data */
-
image_desc_t im;
time_t start_tmp = 0, end_tmp = 0;
rrd_time_value_t start_tv, end_tv;
char *parsetime_error = NULL;
+
struct option long_options[] = {
{"start", required_argument, 0, 's'},
{"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 ... */
+ {"json", no_argument, 0, 263}, /* these are handled in the frontend ... */
+ {"daemon", required_argument, 0, 'd'},
{0, 0, 0, 0}
};
int option_index = 0;
int opt;
- opt = getopt_long(argc, argv, "s:e:m:", long_options, &option_index);
+ opt = getopt_long(argc, argv, "s:e:m:d:", long_options, &option_index);
if (opt == EOF)
break;
return -1;
}
break;
+ case 'd':
+ {
+ if (im.daemon_addr != NULL)
+ {
+ rrd_set_error ("You cannot specify --daemon "
+ "more than once.");
+ return (-1);
+ }
+
+ im.daemon_addr = strdup(optarg);
+ if (im.daemon_addr == NULL)
+ {
+ rrd_set_error("strdup error");
+ return -1;
+ }
+ break;
+ }
+
case '?':
rrd_set_error("unknown option '%s'", argv[optind - 1]);
return -1;
return (-1);
}
+ { /* try to connect to rrdcached */
+ int status = rrdc_connect(im.daemon_addr);
+ if (status != 0) return status;
+ }
+
if (rrd_xport_fn(&im, start, end, step, col_cnt, legend_v, data) == -1) {
im_free(&im);
return -1;
ref_list[xport_counter++] = i;
*step_list_ptr = im->gdes[im->gdes[i].vidx].step;
/* printf("%s:%lu\n",im->gdes[i].legend,*step_list_ptr); */
- *step_list_ptr++;
+ step_list_ptr++;
/* reserve room for one legend entry */
/* is FMT_LEG_LEN + 5 the correct size? */
if ((legend_list[j] =
while (--j > -1)
free(legend_list[j]);
free(legend_list);
+ free(step_list);
rrd_set_error("malloc xport legend entry");
return (-1);
}
free(step_list);
*start = im->start - im->start % (*step);
- *end = im->end - im->end % (*step);
+ *end = im->end - im->end % (*step) + (*step);
/* room for rearranged data */