From 5356d2fa3c67c5a208b8674f8f56459e9735dbfe Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Wed, 2 Jul 2008 15:54:52 +0200 Subject: [PATCH] src/rrd_fetch.c: Revert `rrd_fetch_r' to the original version again. --- src/rrd.h | 1 - src/rrd_fetch.c | 66 +++++++++++++++++++++++++-------------------------------- src/rrd_graph.c | 31 ++++++++++++++++++++++++++- src/rrd_tool.h | 1 - 4 files changed, 59 insertions(+), 40 deletions(-) diff --git a/src/rrd.h b/src/rrd.h index daed0e2..b29d19d 100644 --- a/src/rrd.h +++ b/src/rrd.h @@ -223,7 +223,6 @@ extern "C" { time_t *start, time_t *end, unsigned long *step, - const char *daemon, unsigned long *ds_cnt, char ***ds_namv, rrd_value_t **data); diff --git a/src/rrd_fetch.c b/src/rrd_fetch.c index 26c3324..956c634 100644 --- a/src/rrd_fetch.c +++ b/src/rrd_fetch.c @@ -74,6 +74,7 @@ int rrd_fetch( time_t start_tmp = 0, end_tmp = 0; const char *cf; char *daemon = NULL; + int status; rrd_time_value_t start_tv, end_tv; char *parsetime_error = NULL; @@ -119,8 +120,8 @@ int rrd_fetch( break; case 'd': - if (daemon != NULL) - free (daemon); + if (daemon != NULL) + free (daemon); daemon = strdup (optarg); if (daemon == NULL) { @@ -177,15 +178,36 @@ int rrd_fetch( if (daemon == NULL) { rrd_set_error("strdup failed."); - return (-1); + return (-1); } } } + if (daemon != NULL) + { + status = rrdc_connect (daemon); + if (status != 0) + { + rrd_set_error ("rrdc_connect failed with status %i.", status); + return (-1); + } + + status = rrdc_flush (argv[optind]); + if (status != 0) + { + rrd_set_error ("rrdc_flush (%s) failed with status %i.", + argv[optind], status); + return (-1); + } + + rrdc_disconnect (); + } /* if (daemon) */ + cf = argv[optind + 1]; - if (rrd_fetch_r(argv[optind], cf, start, end, step, daemon, ds_cnt, - ds_namv, data) != 0) + status = rrd_fetch_r(argv[optind], cf, start, end, step, + ds_cnt, ds_namv, data); + if (status != 0) return (-1); return (0); } @@ -198,35 +220,18 @@ int rrd_fetch_r( * will be changed to represent reality */ unsigned long *step, /* which stepsize do you want? * will be changed to represent reality */ - const char *daemon, unsigned long *ds_cnt, /* number of data sources in file */ char ***ds_namv, /* names of data_sources */ rrd_value_t **data) { /* two dimensional array containing the data */ enum cf_en cf_idx; - int status; if ((int) (cf_idx = cf_conv(cf)) == -1) { return -1; } - if (daemon != NULL) - { - status = rrdc_connect (daemon); - if (status != 0) - { - rrd_set_error ("rrdc_connect failed with status %i.", status); - return (-1); - } - } - - status = rrd_fetch_fn (filename, cf_idx, start, end, step, - (daemon == NULL) ? 0 : 1, - ds_cnt, ds_namv, data); - - rrdc_disconnect (); - - return (status); + return (rrd_fetch_fn + (filename, cf_idx, start, end, step, ds_cnt, ds_namv, data)); } /* int rrd_fetch_r */ int rrd_fetch_fn( @@ -237,7 +242,6 @@ int rrd_fetch_fn( * will be changed to represent reality */ unsigned long *step, /* which stepsize do you want? * will be changed to represent reality */ - int use_rrdcached, unsigned long *ds_cnt, /* number of data sources in file */ char ***ds_namv, /* names of data_sources */ rrd_value_t **data) @@ -257,18 +261,6 @@ int rrd_fetch_fn( rrd_value_t *data_ptr; unsigned long rows; - if (use_rrdcached) - { - int status; - - status = rrdc_flush (filename); - if (status != 0) - { - rrd_set_error ("rrdc_flush failed with status %i.", status); - return (-1); - } - } - #ifdef DEBUG fprintf(stderr, "Entered rrd_fetch_fn() searching for the best match\n"); fprintf(stderr, "Looking for: start %10lu end %10lu step %5lu\n", diff --git a/src/rrd_graph.c b/src/rrd_graph.c index dbca157..f688d4c 100644 --- a/src/rrd_graph.c +++ b/src/rrd_graph.c @@ -832,12 +832,41 @@ int data_fetch( if (!skip) { unsigned long ft_step = im->gdes[i].step; /* ft_step will record what we got from fetch */ + /* Flush the file if + * - a connection to the daemon has been established + * - this is the first occurrence of that RRD file + */ + if (im->use_rrdcached) + { + int status; + + status = 0; + for (ii = 0; ii < i; ii++) + { + if (strcmp (im->gdes[i].rrd, im->gdes[ii].rrd) == 0) + { + status = 1; + break; + } + } + + if (status == 0) + { + status = rrdc_flush (im->gdes[i].rrd); + if (status != 0) + { + rrd_set_error ("rrdc_flush (%s) failed with status %i.", + im->gdes[i].rrd, status); + return (-1); + } + } + } /* if (im->use_rrdcached) */ + if ((rrd_fetch_fn(im->gdes[i].rrd, im->gdes[i].cf, &im->gdes[i].start, &im->gdes[i].end, &ft_step, - im->use_rrdcached ? 1 : 0, &im->gdes[i].ds_cnt, &im->gdes[i].ds_namv, &im->gdes[i].data)) == -1) { diff --git a/src/rrd_tool.h b/src/rrd_tool.h index 63359b6..eb8846f 100644 --- a/src/rrd_tool.h +++ b/src/rrd_tool.h @@ -82,7 +82,6 @@ extern "C" { time_t *start, time_t *end, unsigned long *step, - int use_rrdcached, unsigned long *ds_cnt, char ***ds_namv, rrd_value_t **data); -- 2.11.0