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)) {
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,
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;
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;
/* 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);
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");
}
- 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;
** - 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;
*xsize=im.ximg;
*ysize=im.yimg;
+ *ymin=im.minval;
+ *ymax=im.maxval;
if (im.imginfo) {
char *filename;
if (!(*prdata)) {
{"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'},
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)
case 'g':
im->extra_flags |= NOLEGEND;
break;
+ case 'F':
+ im->extra_flags |= FORCE_RULES_LEGEND;
+ break;
case 'X':
im->unitsexponent = atoi(optarg);
break;
im->start = start_tmp;
im->end = end_tmp;
+ im->step = max((long)im->step, (im->end-im->start)/im->xsize);
}
int