X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_graph.c;h=3ac36234212b27a5579cbdffa473b02177a1b2e3;hb=0ac27e1ec3d519ec6f10d780364ad632e3c57285;hp=438b3e1f1eeda741544db44fc9aca46b931c48c8;hpb=0209ff81818995fcd2e2b7080c0ca504fa14d949;p=rrdtool.git diff --git a/src/rrd_graph.c b/src/rrd_graph.c index 438b3e1..3ac3623 100644 --- a/src/rrd_graph.c +++ b/src/rrd_graph.c @@ -698,6 +698,7 @@ data_fetch(image_desc_t *im ) continue; if ((strcmp(im->gdes[i].rrd, im->gdes[ii].rrd) == 0) && (im->gdes[i].cf == im->gdes[ii].cf) + && (im->gdes[i].cf_reduce == im->gdes[ii].cf_reduce) && (im->gdes[i].start == im->gdes[ii].start) && (im->gdes[i].end == im->gdes[ii].end) && (im->gdes[i].step == im->gdes[ii].step)) { @@ -730,9 +731,10 @@ data_fetch(image_desc_t *im ) return -1; } im->gdes[i].data_first = 1; + im->gdes[i].step = im->step; if (ft_step < im->gdes[i].step) { - reduce_data(im->gdes[i].cf, + reduce_data(im->gdes[i].cf_reduce, ft_step, &im->gdes[i].start, &im->gdes[i].end, @@ -838,7 +840,7 @@ data_calc( image_desc_t *im){ vdp->shift = im->gdes[gdi].shval; /* normalize shift to multiple of consolidated step */ - vdp->shift = (vdp->shift / vdp->step) * vdp->step; + vdp->shift = (vdp->shift / (long)vdp->step) * (long)vdp->step; /* apply shift */ vdp->start += vdp->shift; @@ -934,8 +936,8 @@ data_calc( image_desc_t *im){ for(rpi=0;im->gdes[gdi].rpnp[rpi].op != OP_END;rpi++){ if(im->gdes[gdi].rpnp[rpi].op == OP_VARIABLE || im->gdes[gdi].rpnp[rpi].op == OP_PREV_OTHER){ - long ptr = im->gdes[gdi].rpnp[rpi].ptr; - long diff = im->gdes[gdi].start - im->gdes[ptr].start; + long ptr = im->gdes[gdi].rpnp[rpi].ptr; + long diff = im->gdes[gdi].start - im->gdes[ptr].start; if(diff > 0) im->gdes[gdi].rpnp[rpi].data += (diff / im->gdes[ptr].step) * im->gdes[ptr].ds_cnt; @@ -1394,13 +1396,15 @@ leg_place(image_desc_t *im) /* hid legends for rules which are not displayed */ - if (im->gdes[i].gf == GF_HRULE && - (im->gdes[i].yrule < im->minval || im->gdes[i].yrule > im->maxval)) - im->gdes[i].legend[0] = '\0'; - - if (im->gdes[i].gf == GF_VRULE && - (im->gdes[i].xrule < im->start || im->gdes[i].xrule > im->end)) - im->gdes[i].legend[0] = '\0'; + if(!(im->extra_flags & FORCE_RULES_LEGEND)) { + if (im->gdes[i].gf == GF_HRULE && + (im->gdes[i].yrule < im->minval || im->gdes[i].yrule > im->maxval)) + im->gdes[i].legend[0] = '\0'; + + if (im->gdes[i].gf == GF_VRULE && + (im->gdes[i].xrule < im->start || im->gdes[i].xrule > im->end)) + im->gdes[i].legend[0] = '\0'; + } leg_cc = strlen(im->gdes[i].legend); @@ -2570,13 +2574,7 @@ graph_paint(image_desc_t *im, char ***calcpr) int gdes_alloc(image_desc_t *im){ - unsigned long def_step = (im->end-im->start)/im->xsize; - - if (im->step > def_step) /* step can be increassed ... no decreassed */ - def_step = im->step; - im->gdes_c++; - if ((im->gdes = (graph_desc_t *) rrd_realloc(im->gdes, (im->gdes_c) * sizeof(graph_desc_t)))==NULL){ rrd_set_error("realloc graph_descs"); @@ -2584,7 +2582,7 @@ gdes_alloc(image_desc_t *im){ } - im->gdes[im->gdes_c-1].step=def_step; + im->gdes[im->gdes_c-1].step=im->step; im->gdes[im->gdes_c-1].stack=0; im->gdes[im->gdes_c-1].debug=0; im->gdes[im->gdes_c-1].start=im->start; @@ -2637,7 +2635,7 @@ scan_for_col(char *input, int len, char *output) ** - script parsing now in rrd_graph_script() */ int -rrd_graph(int argc, char **argv, char ***prdata, int *xsize, int *ysize, FILE *stream) +rrd_graph(int argc, char **argv, char ***prdata, int *xsize, int *ysize, FILE *stream, double *ymin, double *ymax) { image_desc_t im; @@ -2678,6 +2676,8 @@ rrd_graph(int argc, char **argv, char ***prdata, int *xsize, int *ysize, FILE *s *xsize=im.ximg; *ysize=im.yimg; + *ymin=im.minval; + *ymax=im.maxval; if (im.imginfo) { char *filename; if (!(*prdata)) { @@ -2803,6 +2803,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) {"lazy", no_argument, 0, 'z'}, {"zoom", required_argument, 0, 'm'}, {"no-legend", no_argument, 0, 'g'}, + {"force-rules-legend",no_argument,0, 'F'}, {"only-graph", no_argument, 0, 'j'}, {"alt-y-grid", no_argument, 0, 'Y'}, {"no-minor", no_argument, 0, 'I'}, @@ -2817,7 +2818,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) opt = getopt_long(argc, argv, - "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:I:zgjYAMX:S:N", + "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:I:zgjFYAMX:S:N", long_options, &option_index); if (opt == EOF) @@ -2842,6 +2843,9 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) case 'g': im->extra_flags |= NOLEGEND; break; + case 'F': + im->extra_flags |= FORCE_RULES_LEGEND; + break; case 'X': im->unitsexponent = atoi(optarg); break; @@ -3081,6 +3085,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) im->start = start_tmp; im->end = end_tmp; + im->step = max((long)im->step, (im->end-im->start)/im->xsize); } int