X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_fetch.c;h=47b41669fd25a390bbc2385b5e91663f6c1231de;hb=a8f63ee4c8e78a3fd998038e8912839c29343a56;hp=b60ea158e53223651b6ac4c54a100c38f97fd000;hpb=397379136abf8e34961f6fe7dc5b435cac61ca28;p=rrdtool.git diff --git a/src/rrd_fetch.c b/src/rrd_fetch.c index b60ea15..47b4166 100644 --- a/src/rrd_fetch.c +++ b/src/rrd_fetch.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008 + * RRDtool 1.4.3 Copyright by Tobi Oetiker, 1997-2010 ***************************************************************************** * rrd_fetch.c read date from an rrd to use for further processing ***************************************************************************** @@ -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