X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_fetch.c;h=47b41669fd25a390bbc2385b5e91663f6c1231de;hb=23a7a9744b3f840f358e1c8e8483f93bd2bdf97f;hp=b46ba7a25bd2e36f3b3f42419978a18082f88fa0;hpb=19f031713115921bebf5949ce63926d66dd8c6a5;p=rrdtool.git diff --git a/src/rrd_fetch.c b/src/rrd_fetch.c index b46ba7a..47b4166 100644 --- a/src/rrd_fetch.c +++ b/src/rrd_fetch.c @@ -167,14 +167,17 @@ int rrd_fetch( return -1; } - status = rrdc_flush_if_daemon(opt_daemon, argv[optind]); - if (opt_daemon) free (opt_daemon); - if (status) return (-1); - cf = argv[optind + 1]; - status = rrd_fetch_r(argv[optind], cf, start, end, step, - ds_cnt, ds_namv, data); + rrdc_connect (opt_daemon); + if (rrdc_is_connected (opt_daemon)) + status = rrdc_fetch (argv[optind], cf, start, end, step, + ds_cnt, ds_namv, data); + + else + status = rrd_fetch_r(argv[optind], cf, start, end, step, + ds_cnt, ds_namv, data); + if (status != 0) return (-1); return (0); @@ -237,10 +240,8 @@ int rrd_fetch_fn( #ifdef HAVE_LIBDBI /* handle libdbi datasources */ - if (strncmp("sql",filename,3)==0) { - if (filename[3]==filename[4]) { + if (strncmp("sql//",filename,5)==0) { return rrd_fetch_fn_libdbi(filename,cf_idx,start,end,step,ds_cnt,ds_namv,data); - } } #endif @@ -269,7 +270,34 @@ int rrd_fetch_fn( /* find the rra which best matches the requirements */ for (i = 0; (unsigned) i < rrd.stat_head->rra_cnt; i++) { - if (cf_conv(rrd.rra_def[i].cf_nam) == cf_idx) { + enum cf_en rratype=cf_conv(rrd.rra_def[i].cf_nam); + /* handle this RRA */ + if ( + /* if we found a direct match */ + (rratype == cf_idx) + || + /*if we found a DS with interval 1 + and CF (requested,available) are MIN,MAX,AVERAGE,LAST + */ + ( + /* only if we are on interval 1 */ + (rrd.rra_def[i].pdp_cnt==1) + && ( + /* and requested CF is MIN,MAX,AVERAGE,LAST */ + (cf_idx == CF_MINIMUM) + ||(cf_idx == CF_MAXIMUM) + ||(cf_idx == CF_AVERAGE) + ||(cf_idx == CF_LAST) + ) + && ( + /* and found CF is MIN,MAX,AVERAGE,LAST */ + (rratype == CF_MINIMUM) + ||(rratype == CF_MAXIMUM) + ||(rratype == CF_AVERAGE) + ||(rratype == CF_LAST) + ) + ) + ){ cal_end = (rrd.live_head->last_up - (rrd.live_head->last_up % (rrd.rra_def[i].pdp_cnt