text_prop_t text_prop[] = {
{ 10.0, RRD_DEFAULT_FONT }, /* default */
- { 12.0, RRD_DEFAULT_FONT }, /* title */
+ { 10.0, RRD_DEFAULT_FONT }, /* title */
{ 8.0, RRD_DEFAULT_FONT }, /* axis */
{ 10.0, RRD_DEFAULT_FONT }, /* unit */
{ 10.0, RRD_DEFAULT_FONT } /* legend */
conv_if(VDEF,GF_VDEF)
conv_if(PART,GF_PART)
conv_if(XPORT,GF_XPORT)
+ conv_if(SHIFT,GF_SHIFT)
return (-1);
}
** into one interval for the destination.
*/
- for (dst_row=0;row_cnt>=reduce_factor;dst_row++) {
+ for (dst_row=0;(long int)row_cnt>=reduce_factor;dst_row++) {
for (col=0;col<(*ds_cnt);col++) {
rrd_value_t newval=DNAN;
unsigned long validval=0;
int
data_fetch(image_desc_t *im )
{
- unsigned int i,ii;
+ int i,ii;
int skip;
/* pull the data from the log files ... */
- for (i=0;i<im->gdes_c;i++){
+ for (i=0;i< (int)im->gdes_c;i++){
/* only GF_DEF elements fetch data */
if (im->gdes[i].gf != GF_DEF)
continue;
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,
}
}
- /* lets see if the required data source is realy there */
- for(ii=0;ii<im->gdes[i].ds_cnt;ii++){
+ /* lets see if the required data source is really there */
+ for(ii=0;ii<(int)im->gdes[i].ds_cnt;ii++){
if(strcmp(im->gdes[i].ds_namv[ii],im->gdes[i].ds_nam) == 0){
im->gdes[i].ds=ii; }
}
switch (im->gdes[gdi].gf) {
case GF_XPORT:
break;
+ case GF_SHIFT: {
+ graph_desc_t *vdp = &im->gdes[im->gdes[gdi].vidx];
+
+ /* remove current shift */
+ vdp->start -= vdp->shift;
+ vdp->end -= vdp->shift;
+
+ /* vdef */
+ if (im->gdes[gdi].shidx >= 0)
+ vdp->shift = im->gdes[im->gdes[gdi].shidx].vf.val;
+ /* constant */
+ else
+ vdp->shift = im->gdes[gdi].shval;
+
+ /* normalize shift to multiple of consolidated step */
+ vdp->shift = (vdp->shift / (long)vdp->step) * (long)vdp->step;
+
+ /* apply shift */
+ vdp->start += vdp->shift;
+ vdp->end += vdp->shift;
+ break;
+ }
case GF_VDEF:
/* A VDEF has no DS. This also signals other parts
* of rrdtool that this is a VDEF value, not a CDEF.
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].start > im->gdes[ptr].start) {
- im->gdes[gdi].rpnp[rpi].data += im->gdes[gdi].rpnp[rpi].ds_cnt;
- }
+ 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;
}
}
-
if(steparray == NULL){
rrd_set_error("rpn expressions without DEF"
** the time of the graph. Beware.
*/
vidx = im->gdes[ii].vidx;
- if ( (gr_time >= im->gdes[vidx].start) &&
- (gr_time <= im->gdes[vidx].end) ) {
+ if (im->gdes[vidx].gf == GF_VDEF) {
+ value = im->gdes[vidx].vf.val;
+ } else if (((long int)gr_time >= (long int)im->gdes[vidx].start) &&
+ ((long int)gr_time <= (long int)im->gdes[vidx].end) ) {
value = im->gdes[vidx].data[
(unsigned long) floor(
(double)(gr_time - im->gdes[vidx].start)
case GF_CDEF:
case GF_VDEF:
case GF_PART:
+ case GF_SHIFT:
case GF_XPORT:
break;
}
/* horrible hack until we can actually print vertically */
{
int n;
- int l=strlen(im->ylegend);
char s[2];
- for (n=0;n<strlen(im->ylegend);n++) {
+ for (n=0;n< (int)strlen(im->ylegend);n++) {
s[0]=im->ylegend[n];
s[1]='\0';
gfx_new_text(im->canvas,7,im->text_prop[TEXT_PROP_AXIS].size*(n+1),
case GF_HRULE:
case GF_VRULE:
case GF_XPORT:
+ case GF_SHIFT:
break;
case GF_TICK:
for (ii = 0; ii < im->xsize; ii++)
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;
im->gdes[im->gdes_c-1].data_first=0;
im->gdes[im->gdes_c-1].p_data=NULL;
im->gdes[im->gdes_c-1].rpnp=NULL;
+ im->gdes[im->gdes_c-1].shift=0;
im->gdes[im->gdes_c-1].col = 0x0;
im->gdes[im->gdes_c-1].legend[0]='\0';
im->gdes[im->gdes_c-1].rrd[0]='\0';
strncpy(im.graphfile,argv[optind],MAXPATH-1);
im.graphfile[MAXPATH-1]='\0';
- rrd_graph_script(argc,argv,&im);
+ rrd_graph_script(argc,argv,&im,1);
if (rrd_test_error()) {
im_free(&im);
return -1;
{"lazy", no_argument, 0, 'z'},
{"zoom", required_argument, 0, 'm'},
{"no-legend", no_argument, 0, 'g'},
- {"only-graph", no_argument, 0, 'j'},
+ {"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'},
&im->xlab_user.precis,
&stroff) == 7 && stroff != 0){
strncpy(im->xlab_form, optarg+stroff, sizeof(im->xlab_form) - 1);
- if((im->xlab_user.gridtm = tmt_conv(scan_gtm)) == -1){
+ if((int)(im->xlab_user.gridtm = tmt_conv(scan_gtm)) == -1){
rrd_set_error("unknown keyword %s",scan_gtm);
return;
- } else if ((im->xlab_user.mgridtm = tmt_conv(scan_mtm)) == -1){
+ } else if ((int)(im->xlab_user.mgridtm = tmt_conv(scan_mtm)) == -1){
rrd_set_error("unknown keyword %s",scan_mtm);
return;
- } else if ((im->xlab_user.labtm = tmt_conv(scan_ltm)) == -1){
+ } else if ((int)(im->xlab_user.labtm = tmt_conv(scan_ltm)) == -1){
rrd_set_error("unknown keyword %s",scan_ltm);
return;
}
im->imginfo = optarg;
break;
case 'a':
- if((im->canvas->imgformat = if_conv(optarg)) == -1) {
+ if((int)(im->canvas->imgformat = if_conv(optarg)) == -1) {
rrd_set_error("unsupported graphics format '%s'",optarg);
return;
}
im->start = start_tmp;
im->end = end_tmp;
+ im->step = max((long)im->step, (im->end-im->start)/im->xsize);
}
int
n=0;
sscanf(str,"%le,%29[A-Z]%n",¶m,func,&n);
- if (n==strlen(str)) { /* matched */
+ if (n== (int)strlen(str)) { /* matched */
;
} else {
n=0;
sscanf(str,"%29[A-Z]%n",func,&n);
- if (n==strlen(str)) { /* matched */
+ if (n== (int)strlen(str)) { /* matched */
param=DNAN;
} else {
rrd_set_error("Unknown function string '%s' in VDEF '%s'"