projects
/
rrdtool.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
make the areas that makeup the graphs a little larger, so that they overlap a bit
[rrdtool.git]
/
src
/
rrd_graph.c
diff --git
a/src/rrd_graph.c
b/src/rrd_graph.c
index
597abaf
..
3a39ae2
100644
(file)
--- a/
src/rrd_graph.c
+++ b/
src/rrd_graph.c
@@
-1,5
+1,5
@@
/****************************************************************************
/****************************************************************************
- * RRDtool 1.2.
1
Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.2.
6
Copyright by Tobi Oetiker, 1997-2005
****************************************************************************
* rrd__graph.c produce graphs from data in rrdfiles
****************************************************************************/
****************************************************************************
* rrd__graph.c produce graphs from data in rrdfiles
****************************************************************************/
@@
-151,9
+151,9
@@
ytr(image_desc_t *im, double value){
if (! im->rigid) {
/* keep yval as-is */
} else if (yval > im->yorigin) {
if (! im->rigid) {
/* keep yval as-is */
} else if (yval > im->yorigin) {
- yval = im->yorigin
+2
;
+ yval = im->yorigin;
} else if (yval < im->yorigin - im->ysize){
} else if (yval < im->yorigin - im->ysize){
- yval = im->yorigin - im->ysize
- 2
;
+ yval = im->yorigin - im->ysize;
}
return yval;
}
}
return yval;
}
@@
-886,26
+886,29
@@
data_calc( image_desc_t *im){
* and the resulting number is the step size for the
* resulting data source.
*/
* and the resulting number is the step size for the
* resulting data source.
*/
- 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;
- if (im->gdes[ptr].ds_cnt == 0) {
+ 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;
+ if (im->gdes[ptr].ds_cnt == 0) {
/* this is a VDEF data source */
#if 0
#if 0
- printf("DEBUG: inside CDEF '%s' processing VDEF '%s'\n",
- im->gdes[gdi].vname,
- im->gdes[ptr].vname);
- printf("DEBUG: value from vdef is %f\n",im->gdes[ptr].vf.val);
+
printf("DEBUG: inside CDEF '%s' processing VDEF '%s'\n",
+
im->gdes[gdi].vname,
+
im->gdes[ptr].vname);
+
printf("DEBUG: value from vdef is %f\n",im->gdes[ptr].vf.val);
#endif
im->gdes[gdi].rpnp[rpi].val = im->gdes[ptr].vf.val;
im->gdes[gdi].rpnp[rpi].op = OP_NUMBER;
#endif
im->gdes[gdi].rpnp[rpi].val = im->gdes[ptr].vf.val;
im->gdes[gdi].rpnp[rpi].op = OP_NUMBER;
- } else {
- if ((steparray =
+ } else { /* normal variables and PREF(variables) */
+
+ /* add one entry to the array that keeps track of the step sizes of the
+ * data sources going into the CDEF. */
+ if ((steparray =
rrd_realloc(steparray,
(++stepcnt+1)*sizeof(*steparray)))==NULL){
rrd_realloc(steparray,
(++stepcnt+1)*sizeof(*steparray)))==NULL){
- rrd_set_error("realloc steparray");
- rpnstack_free(&rpnstack);
- return -1;
+
rrd_set_error("realloc steparray");
+
rpnstack_free(&rpnstack);
+
return -1;
};
steparray[stepcnt-1] = im->gdes[ptr].step;
};
steparray[stepcnt-1] = im->gdes[ptr].step;
@@
-915,6
+918,7
@@
data_calc( image_desc_t *im){
* to the earliest endpoint of any of the
* rras involved (ptr)
*/
* to the earliest endpoint of any of the
* rras involved (ptr)
*/
+
if(im->gdes[gdi].start < im->gdes[ptr].start)
im->gdes[gdi].start = im->gdes[ptr].start;
if(im->gdes[gdi].start < im->gdes[ptr].start)
im->gdes[gdi].start = im->gdes[ptr].start;
@@
-927,8
+931,8
@@
data_calc( image_desc_t *im){
* further save step size and data source
* count of this rra
*/
* further save step size and data source
* count of this rra
*/
- im->gdes[gdi].rpnp[rpi].data
=
im->gdes[ptr].data + im->gdes[ptr].ds;
- im->gdes[gdi].rpnp[rpi].step = im->gdes[ptr].step;
+ im->gdes[gdi].rpnp[rpi].data
=
im->gdes[ptr].data + im->gdes[ptr].ds;
+ im->gdes[gdi].rpnp[rpi].step
= im->gdes[ptr].step;
im->gdes[gdi].rpnp[rpi].ds_cnt = im->gdes[ptr].ds_cnt;
/* backoff the *.data ptr; this is done so
im->gdes[gdi].rpnp[rpi].ds_cnt = im->gdes[ptr].ds_cnt;
/* backoff the *.data ptr; this is done so
@@
-941,9
+945,9
@@
data_calc( image_desc_t *im){
/* move the data pointers to the correct period */
for(rpi=0;im->gdes[gdi].rpnp[rpi].op != OP_END;rpi++){
/* move the data pointers to the correct period */
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;
+
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;
if(diff > 0)
long diff = im->gdes[gdi].start - im->gdes[ptr].start;
if(diff > 0)
@@
-1578,14
+1582,14
@@
calc_horizontal_grid(image_desc_t *im)
else {
for(i=0;ylab[i].grid > 0;i++){
pixel = im->ysize / (scaledrange / ylab[i].grid);
else {
for(i=0;ylab[i].grid > 0;i++){
pixel = im->ysize / (scaledrange / ylab[i].grid);
- if (pixel >
5
) {
+ if (pixel >
7
) {
gridind = i;
break;
}
}
for(i=0; i<4;i++) {
gridind = i;
break;
}
}
for(i=0; i<4;i++) {
- if (pixel * ylab[gridind].lfac[i] >= 2 * im->text_prop[TEXT_PROP_AXIS].size) {
+ if (pixel * ylab[gridind].lfac[i] >= 2
.5
* im->text_prop[TEXT_PROP_AXIS].size) {
im->ygrid_scale.labfact = ylab[gridind].lfac[i];
break;
}
im->ygrid_scale.labfact = ylab[gridind].lfac[i];
break;
}
@@
-1610,14
+1614,16
@@
int draw_horizontal_grid(image_desc_t *im)
int sgrid = (int)( im->minval / im->ygrid_scale.gridstep - 1);
int egrid = (int)( im->maxval / im->ygrid_scale.gridstep + 1);
int sgrid = (int)( im->minval / im->ygrid_scale.gridstep - 1);
int egrid = (int)( im->maxval / im->ygrid_scale.gridstep + 1);
+ double MaxY;
scaledstep = im->ygrid_scale.gridstep/im->magfact;
scaledstep = im->ygrid_scale.gridstep/im->magfact;
+ MaxY = scaledstep*(double)im->viewfactor*(double)egrid;
for (i = sgrid; i <= egrid; i++){
double Y0=ytr(im,im->ygrid_scale.gridstep*i);
if ( Y0 >= im->yorigin-im->ysize
&& Y0 <= im->yorigin){
if(i % im->ygrid_scale.labfact == 0){
if (i==0 || im->symbol == ' ') {
for (i = sgrid; i <= egrid; i++){
double Y0=ytr(im,im->ygrid_scale.gridstep*i);
if ( Y0 >= im->yorigin-im->ysize
&& Y0 <= im->yorigin){
if(i % im->ygrid_scale.labfact == 0){
if (i==0 || im->symbol == ' ') {
- if(
scaledstep < 1)
{
+ if(
MaxY < 10)
{
if(im->extra_flags & ALTYGRID) {
sprintf(graph_label,im->ygrid_scale.labfmt,scaledstep*im->viewfactor*i);
}
if(im->extra_flags & ALTYGRID) {
sprintf(graph_label,im->ygrid_scale.labfmt,scaledstep*im->viewfactor*i);
}
@@
-1628,7
+1634,7
@@
int draw_horizontal_grid(image_desc_t *im)
sprintf(graph_label,"%4.0f",scaledstep*im->viewfactor*i);
}
}else {
sprintf(graph_label,"%4.0f",scaledstep*im->viewfactor*i);
}
}else {
- if(
scaledstep < 1
){
+ if(
MaxY < 10
){
sprintf(graph_label,"%4.1f %c",scaledstep*im->viewfactor*i, im->symbol);
} else {
sprintf(graph_label,"%4.0f %c",scaledstep*im->viewfactor*i, im->symbol);
sprintf(graph_label,"%4.1f %c",scaledstep*im->viewfactor*i, im->symbol);
} else {
sprintf(graph_label,"%4.0f %c",scaledstep*im->viewfactor*i, im->symbol);
@@
-1923,7
+1929,7
@@
grid_paint(image_desc_t *im)
} else {
res = draw_horizontal_grid(im);
}
} else {
res = draw_horizontal_grid(im);
}
-
+
/* dont draw horizontal grid if there is no min and max val */
if (! res ) {
char *nodata = "No Data found";
/* dont draw horizontal grid if there is no min and max val */
if (! res ) {
char *nodata = "No Data found";
@@
-1938,7
+1944,7
@@
grid_paint(image_desc_t *im)
/* yaxis unit description */
gfx_new_text( im->canvas,
/* yaxis unit description */
gfx_new_text( im->canvas,
- 1
2
, (im->yorigin - im->ysize/2),
+ 1
0
, (im->yorigin - im->ysize/2),
im->graph_col[GRC_FONT],
im->text_prop[TEXT_PROP_UNIT].font,
im->text_prop[TEXT_PROP_UNIT].size, im->tabwidth,
im->graph_col[GRC_FONT],
im->text_prop[TEXT_PROP_UNIT].font,
im->text_prop[TEXT_PROP_UNIT].size, im->tabwidth,
@@
-1954,6
+1960,14
@@
grid_paint(image_desc_t *im)
im->text_prop[TEXT_PROP_TITLE].size, im->tabwidth, 0.0,
GFX_H_CENTER, GFX_V_CENTER,
im->title);
im->text_prop[TEXT_PROP_TITLE].size, im->tabwidth, 0.0,
GFX_H_CENTER, GFX_V_CENTER,
im->title);
+ /* rrdtool 'logo' */
+ gfx_new_text( im->canvas,
+ im->ximg-7, 7,
+ ( im->graph_col[GRC_FONT] & 0xffffff00 ) | 0x00000044,
+ im->text_prop[TEXT_PROP_AXIS].font,
+ 5.5, im->tabwidth, 270,
+ GFX_H_RIGHT, GFX_V_TOP,
+ "RRDTOOL / TOBI OETIKER");
/* graph labels */
if( !(im->extra_flags & NOLEGEND) & !(im->extra_flags & ONLY_GRAPH) ) {
/* graph labels */
if( !(im->extra_flags & NOLEGEND) & !(im->extra_flags & ONLY_GRAPH) ) {
@@
-1975,30
+1989,38
@@
grid_paint(image_desc_t *im)
if ( im->gdes[i].gf != GF_PRINT &&
im->gdes[i].gf != GF_GPRINT &&
im->gdes[i].gf != GF_COMMENT) {
if ( im->gdes[i].gf != GF_PRINT &&
im->gdes[i].gf != GF_GPRINT &&
im->gdes[i].gf != GF_COMMENT) {
- int boxH, boxV;
+ int box
L, box
H, boxV;
- box
H
= gfx_get_text_width(im->canvas, 0,
+ box
L
= gfx_get_text_width(im->canvas, 0,
im->text_prop[TEXT_PROP_LEGEND].font,
im->text_prop[TEXT_PROP_LEGEND].size,
im->text_prop[TEXT_PROP_LEGEND].font,
im->text_prop[TEXT_PROP_LEGEND].size,
- im->tabwidth,"M", 0)*1.2;
- boxV = boxH;
+ im->tabwidth,"oo", 0);
+ boxH = boxL / 1.9;
+ boxV = boxH+1;
/* make sure transparent colors show up all the same */
/* make sure transparent colors show up all the same */
+ node = gfx_new_area(im->canvas,
+ X0-1,Y0-boxV,
+ X0-1,Y0+1,
+ X0+boxL+0.5,Y0+1,
+ im->graph_col[GRC_BACK]);
+ gfx_add_point ( node, X0+boxL+0.5, Y0-boxV );
node = gfx_new_area(im->canvas,
node = gfx_new_area(im->canvas,
- X0,Y0-boxV,
- X0,Y0,
+ X0
-1
,Y0-boxV,
+ X0
-1
,Y0,
X0+boxH,Y0,
im->graph_col[GRC_CANVAS]);
gfx_add_point ( node, X0+boxH, Y0-boxV );
node = gfx_new_area(im->canvas,
X0+boxH,Y0,
im->graph_col[GRC_CANVAS]);
gfx_add_point ( node, X0+boxH, Y0-boxV );
node = gfx_new_area(im->canvas,
- X0,Y0-boxV,
- X0,Y0,
+ X0
-1
,Y0-boxV,
+ X0
-1
,Y0,
X0+boxH,Y0,
im->gdes[i].col);
gfx_add_point ( node, X0+boxH, Y0-boxV );
node = gfx_new_line(im->canvas,
X0+boxH,Y0,
im->gdes[i].col);
gfx_add_point ( node, X0+boxH, Y0-boxV );
node = gfx_new_line(im->canvas,
- X0,Y0-boxV, X0,Y0,
+ X0-1,Y0-boxV,
+ X0-1,Y0,
1,im->graph_col[GRC_FONT]);
gfx_add_point(node,X0+boxH,Y0);
gfx_add_point(node,X0+boxH,Y0-boxV);
1,im->graph_col[GRC_FONT]);
gfx_add_point(node,X0+boxH,Y0);
gfx_add_point(node,X0+boxH,Y0-boxV);
@@
-2168,7
+2190,7
@@
graph_size_location(image_desc_t *im, int elements
im->text_prop[TEXT_PROP_AXIS].font,
im->text_prop[TEXT_PROP_AXIS].size,
im->tabwidth,
im->text_prop[TEXT_PROP_AXIS].font,
im->text_prop[TEXT_PROP_AXIS].size,
im->tabwidth,
- "0", 0) * im->unitslength
+ Xspacing
;
+ "0", 0) * im->unitslength;
}
}
}
}
@@
-2484,11
+2506,11
@@
graph_paint(image_desc_t *im, char ***calcpr)
}
} else {
}
} else {
-
float ybase0 = DNAN,ytop0
;
+
double ybase0 = DNAN,ytop0=DNAN
;
for(ii=0;ii<im->xsize;ii++){
/* keep things simple for now, just draw these bars
do not try to build a big and complex area */
for(ii=0;ii<im->xsize;ii++){
/* keep things simple for now, just draw these bars
do not try to build a big and complex area */
-
float
ybase,ytop;
+
double
ybase,ytop;
if ( im->slopemode == 0 && ii==0){
continue;
}
if ( im->slopemode == 0 && ii==0){
continue;
}
@@
-2509,7
+2531,7
@@
graph_paint(image_desc_t *im, char ***calcpr)
/* every area has to be wound clock-wise,
so we have to make sur base remains base */
if (ybase > ytop){
/* every area has to be wound clock-wise,
so we have to make sur base remains base */
if (ybase > ytop){
-
float
extra = ytop;
+
double
extra = ytop;
ytop = ybase;
ybase = extra;
}
ytop = ybase;
ybase = extra;
}
@@
-2519,13
+2541,13
@@
graph_paint(image_desc_t *im, char ***calcpr)
}
if ( !isnan(ybase0) ){
node = gfx_new_area(im->canvas,
}
if ( !isnan(ybase0) ){
node = gfx_new_area(im->canvas,
-
ii-1+im->xorigin,ybase0
,
-
ii-1+im->xorigin,ytop0
,
- ii+im->xorigin,ytop,
+
(double)ii-1.1+(double)im->xorigin,ybase0-0.1
,
+
(double)ii-1.1+(double)im->xorigin,ytop0+0.1
,
+ (double)ii+0.1+(double)im->xorigin,ytop+0.1,
im->gdes[i].col
);
gfx_add_point(node,
im->gdes[i].col
);
gfx_add_point(node,
- ii+im->xorigin,ybase
+ (double)ii+0.01+im->xorigin,ybase-0.1
);
}
ybase0=ybase;
);
}
ybase0=ybase;