X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_graph.c;h=34dbd218ab50ee63884fe823902e8ed9ff3fee9d;hb=87264104167c04f84e61e3580292217269bab14f;hp=ef3c727135411d773f9054c3eea3ec8481a04518;hpb=d0371d8311c9008255a6e50ff296f349f74e10e5;p=rrdtool.git diff --git a/src/rrd_graph.c b/src/rrd_graph.c index ef3c727..34dbd21 100644 --- a/src/rrd_graph.c +++ b/src/rrd_graph.c @@ -1072,6 +1072,11 @@ data_proc( image_desc_t *im ){ else im->maxval = maxval; } + /* make sure min is smaller than max */ + if (im->minval > im->maxval) { + im->minval = 0.99 * im->maxval; + } + /* make sure min and max are not equal */ if (im->minval == im->maxval) { im->maxval *= 1.01; @@ -1352,7 +1357,7 @@ leg_place(image_desc_t *im) char prt_fctn; /*special printfunctions */ int *legspace; - if( !(im->extra_flags & NOLEGEND) ) { + if( !(im->extra_flags & NOLEGEND) & !(im->extra_flags & ONLY_GRAPH) ) { if ((legspace = malloc(im->gdes_c*sizeof(int)))==NULL){ rrd_set_error("malloc for legspace"); return -1; @@ -1895,7 +1900,8 @@ grid_paint(image_desc_t *im) 7, (im->yorigin - im->ysize/2), im->graph_col[GRC_FONT], im->text_prop[TEXT_PROP_AXIS].font, - im->text_prop[TEXT_PROP_AXIS].size, im->tabwidth, 270.0, + im->text_prop[TEXT_PROP_AXIS].size, im->tabwidth, + RRDGRAPH_YLEGEND_ANGLE, GFX_H_LEFT, GFX_V_CENTER, im->ylegend); } else { @@ -1927,7 +1933,7 @@ grid_paint(image_desc_t *im) im->title); /* graph labels */ - if( !(im->extra_flags & NOLEGEND) ) { + if( !(im->extra_flags & NOLEGEND) & !(im->extra_flags & ONLY_GRAPH) ) { for(i=0;igdes_c;i++){ if(im->gdes[i].legend[0] =='\0') continue; @@ -2079,11 +2085,20 @@ graph_size_location(image_desc_t *im, int elements, int piechart ) #if 0 Xlegend =0, Ylegend =0, #endif - Xspacing =10, Yspacing =10; + Xspacing =10, Yspacing =10; - if (im->ylegend[0] != '\0') { - Xvertical = im->text_prop[TEXT_PROP_LEGEND].size *2; - Yvertical = im->text_prop[TEXT_PROP_LEGEND].size * (strlen(im->ylegend)+1); + if (im->extra_flags & ONLY_GRAPH) { + if ( im->ysize > 32 ) { + rrd_set_error("height > 32 is not possible with --only-graph option"); + return -1; + } + Xspacing =0; + Yspacing =0; + } else { + if (im->ylegend[0] != '\0') { + Xvertical = im->text_prop[TEXT_PROP_LEGEND].size *2; + Yvertical = im->text_prop[TEXT_PROP_LEGEND].size * (strlen(im->ylegend)+1); + } } if (im->title[0] != '\0') { @@ -2129,10 +2144,21 @@ graph_size_location(image_desc_t *im, int elements, int piechart ) ** forget about it at all; the legend will have to fit in the ** size already allocated. */ - im->ximg = Xylabel + Xmain + Xpie + Xspacing; + im->ximg = Xmain; + + if ( !(im->extra_flags & ONLY_GRAPH) ) { + im->ximg = Xylabel + Xmain + Xpie + Xspacing; + } + if (Xmain) im->ximg += Xspacing; if (Xpie) im->ximg += Xspacing; - im->xorigin = Xspacing + Xylabel; + + if (im->extra_flags & ONLY_GRAPH) { + im->xorigin = 0; + } else { + im->xorigin = Xspacing + Xylabel; + } + if (Xtitle > im->ximg) im->ximg = Xtitle; if (Xvertical) { im->ximg += Xvertical; @@ -2150,9 +2176,21 @@ graph_size_location(image_desc_t *im, int elements, int piechart ) */ /* reserve space for main and/or pie */ - im->yimg = Ymain + Yxlabel; + + if (im->extra_flags & ONLY_GRAPH) { + im->yimg = Ymain; + } else { + im->yimg = Ymain + Yxlabel; + } + if (im->yimg < Ypie) im->yimg = Ypie; - im->yorigin = im->yimg - Yxlabel; + + if (im->extra_flags & ONLY_GRAPH) { + im->yorigin = im->yimg; + } else { + im->yorigin = im->yimg - Yxlabel; + } + /* reserve space for the title *or* some padding above the graph */ if (Ytitle) { im->yimg += Ytitle; @@ -2255,9 +2293,11 @@ graph_paint(image_desc_t *im, char ***calcpr) if (!calc_horizontal_grid(im)) return -1; + if (im->gridfit) apply_gridfit(im); + /************************************************************** *** Calculating sizes and locations became a bit confusing *** *** so I moved this into a separate function. *** @@ -2289,8 +2329,8 @@ graph_paint(image_desc_t *im, char ***calcpr) areazero = im->minval; if (im->maxval < 0.0) areazero = im->maxval; - - axis_paint(im); + if( !(im->extra_flags & ONLY_GRAPH) ) + axis_paint(im); } if (piechart) { @@ -2442,7 +2482,8 @@ graph_paint(image_desc_t *im, char ***calcpr) im->draw_y_grid=0; } /* grid_paint also does the text */ - grid_paint(im); + if( !(im->extra_flags & ONLY_GRAPH) ) + grid_paint(im); /* the RULES are the last thing to paint ... */ for(i=0;igdes_c;i++){ @@ -2477,11 +2518,11 @@ graph_paint(image_desc_t *im, char ***calcpr) if (strcmp(im->graphfile,"-")==0) { + fo = im->graphhandle ? im->graphhandle : stdout; #ifdef WIN32 /* Change translation mode for stdout to BINARY */ - _setmode( _fileno( stdout ), O_BINARY ); + _setmode( _fileno( fo ), O_BINARY ); #endif - fo = stdout; } else { if ((fo = fopen(im->graphfile,"wb")) == NULL) { rrd_set_error("Opening '%s' for write: %s",im->graphfile, @@ -2569,12 +2610,13 @@ 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) +rrd_graph(int argc, char **argv, char ***prdata, int *xsize, int *ysize, FILE *stream) { image_desc_t im; rrd_graph_init(&im); - + im.graphhandle = stream; + rrd_graph_options(argc,argv,&im); if (rrd_test_error()) { im_free(&im); @@ -2704,7 +2746,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) char scan_gtm[12],scan_mtm[12],scan_ltm[12],col_nam[12]; time_t start_tmp=0,end_tmp=0; long long_tmp; - struct time_value start_tv, end_tv; + struct rrd_time_value start_tv, end_tv; gfx_color_t color; parsetime("end-24h", &start_tv); @@ -2734,6 +2776,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'}, + {"only-graph", no_argument, 0, 'j'}, {"alt-y-grid", no_argument, 0, 'Y'}, {"no-minor", no_argument, 0, 'I'}, {"alt-autoscale", no_argument, 0, 'A'}, @@ -2747,7 +2790,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:zgYAMX:S:N", + "s:e:x:y:v:w:h:iu:l:rb:oc:n:m:t:f:a:I:zgjYAMX:S:N", long_options, &option_index); if (opt == EOF) @@ -2766,6 +2809,9 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) case 'M': im->extra_flags |= ALTAUTOSCALE_MAX; break; + case 'j': + im->extra_flags |= ONLY_GRAPH; + break; case 'g': im->extra_flags |= NOLEGEND; break;